diff options
-rw-r--r-- | repl.d | 9 | ||||
-rw-r--r-- | src/primitives.d | 27 |
2 files changed, 35 insertions, 1 deletions
@@ -12,7 +12,14 @@ static import src.definition; static import src.primitives; void process(int x) { - stack.push(x); + try { + if ( !src.primitives.evaluate(x) ) { + stack.push(x); + } + } + catch (Exception ex) { + writeln("Error: ", ex.msg); + } } void process(string word) { diff --git a/src/primitives.d b/src/primitives.d index 0be6836..f577713 100644 --- a/src/primitives.d +++ b/src/primitives.d @@ -6,8 +6,21 @@ import src.stack; import src.definition; int[string] variables; +bool drop_mode; + +bool evaluate(int value) { + return drop_mode; +} bool evaluate(string word) { + if ( drop_mode ) { + if ( word == "then" ) { + drop_mode = false; + } + + return true; + } + switch ( word ) { case "ยง": src.definition.start; @@ -25,6 +38,20 @@ bool evaluate(string word) { stack.push(variables[name]); } return true; + case "if": + switch ( stack.pop.get!int ) { + case 0: + drop_mode = true; + return true; + case 1: + drop_mode = false; + return true; + default: + throw new Exception("invalid logic value"); + } + case "then": + drop_mode = false; + return true; case "+": int b = stack.pop.get!int; int a = stack.pop.get!int; |