diff options
author | Adrian Kummerlaender | 2017-04-12 16:58:18 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2017-04-12 17:24:09 +0200 |
commit | 4804893a6616a312ac8028e42d2aa990018ffbe6 (patch) | |
tree | 7eabf5638dd29580dae9c0197804b739301885a9 /src/primitives.d | |
parent | 900c223ed40e36ffedce95e9a987d9a3c0309271 (diff) | |
download | slang-4804893a6616a312ac8028e42d2aa990018ffbe6.tar slang-4804893a6616a312ac8028e42d2aa990018ffbe6.tar.gz slang-4804893a6616a312ac8028e42d2aa990018ffbe6.tar.bz2 slang-4804893a6616a312ac8028e42d2aa990018ffbe6.tar.lz slang-4804893a6616a312ac8028e42d2aa990018ffbe6.tar.xz slang-4804893a6616a312ac8028e42d2aa990018ffbe6.tar.zst slang-4804893a6616a312ac8028e42d2aa990018ffbe6.zip |
Modularize primitives implementation, add stack manipulators
Diffstat (limited to 'src/primitives.d')
-rw-r--r-- | src/primitives.d | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/src/primitives.d b/src/primitives.d deleted file mode 100644 index f577713..0000000 --- a/src/primitives.d +++ /dev/null @@ -1,96 +0,0 @@ -module src.primitives; - -import std.stdio; - -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; - return true; - case "$": - string name = stack.pop.get!string; - int value = stack.pop.get!int; - - variables[name] = value; - return true; - case "@": - string name = stack.pop.get!string; - - if ( name in variables ) { - 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; - - stack.push(a + b); - return true; - case "*": - int b = stack.pop.get!int; - int a = stack.pop.get!int; - - stack.push(a * b); - return true; - case "/": - int b = stack.pop.get!int; - int a = stack.pop.get!int; - - if ( b == 0 ) { - throw new Exception("division by 0 undefined"); - } else { - stack.push(a / b); - } - return true; - case "%": - int b = stack.pop.get!int; - int a = stack.pop.get!int; - - if ( b == 0 ) { - throw new Exception("modulo 0 undefined"); - } else { - stack.push(a % b); - } - return true; - case ".": - stack.pop; - return true; - case "'": - writeln(stack.top); - return true; - default: - return false; - } -} |