aboutsummaryrefslogtreecommitdiff
path: root/src/primitives/conditional.d
diff options
context:
space:
mode:
authorAdrian Kummerlaender2017-04-14 23:21:51 +0200
committerAdrian Kummerlaender2017-04-14 23:21:51 +0200
commitc6d2b259a4f253403929f6f1104395a6a71b1be6 (patch)
tree6d4cdfa4ab50fbe0fa982db601d772c67e4dda20 /src/primitives/conditional.d
parent963ace2e5ba0337130e5f343d7ab97a30b4547ae (diff)
downloadslang-c6d2b259a4f253403929f6f1104395a6a71b1be6.tar
slang-c6d2b259a4f253403929f6f1104395a6a71b1be6.tar.gz
slang-c6d2b259a4f253403929f6f1104395a6a71b1be6.tar.bz2
slang-c6d2b259a4f253403929f6f1104395a6a71b1be6.tar.lz
slang-c6d2b259a4f253403929f6f1104395a6a71b1be6.tar.xz
slang-c6d2b259a4f253403929f6f1104395a6a71b1be6.tar.zst
slang-c6d2b259a4f253403929f6f1104395a6a71b1be6.zip
Convert structure to _dub_ build system
Diffstat (limited to 'src/primitives/conditional.d')
-rw-r--r--src/primitives/conditional.d77
1 files changed, 0 insertions, 77 deletions
diff --git a/src/primitives/conditional.d b/src/primitives/conditional.d
deleted file mode 100644
index ee89ea5..0000000
--- a/src/primitives/conditional.d
+++ /dev/null
@@ -1,77 +0,0 @@
-module src.primitives.conditional;
-
-import std.variant;
-import std.typecons;
-import std.container : DList;
-
-import src.stack;
-
-Nullable!(DList!Token) buffer;
-bool concluded = true;
-bool drop_mode = false;
-
-void capture(Token token) {
- if ( !drop_mode ) {
- buffer.insertBack(token);
- }
-}
-
-bool drop(Token token) {
- if ( concluded && buffer.isNull ) {
- return false;
- }
-
- if ( token.type == typeid(string) ) {
- switch ( *token.peek!string ) {
- case "if" : eval_if; break;
- case "then" : eval_then; break;
- case "else" : eval_else; break;
- default : capture(token); break;
- }
- } else {
- capture(token);
- }
-
- return true;
-}
-
-void eval_if() {
- if ( concluded ) {
- buffer = DList!Token();
- drop_mode = !stack.pop.get!bool;
- concluded = false;
- } else {
- throw new Exception("conditionals may not be nested directly");
- }
-}
-
-void eval_then() {
- if ( concluded ) {
- throw new Exception("`then` without preceding `if`");
- } else {
- drop_mode = !drop_mode;
- }
-}
-
-void eval_else() {
- if ( concluded ) {
- throw new Exception("`else` without preceding `if`");
- } else {
- drop_mode = false;
- concluded = true;
- }
-}
-
-bool dischargeable() {
- return concluded && !buffer.isNull;
-}
-
-Stack!Token discharge() {
- if ( concluded ) {
- Stack!Token result = buffer[];
- buffer.nullify;
- return result;
- } else {
- throw new Exception("unconcluded conditional may not be discharged");
- }
-}