diff options
Diffstat (limited to 'src/primitives/impl.d')
-rw-r--r-- | src/primitives/impl.d | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/src/primitives/impl.d b/src/primitives/impl.d deleted file mode 100644 index 9fddee5..0000000 --- a/src/primitives/impl.d +++ /dev/null @@ -1,137 +0,0 @@ -module src.primitives.impl; - -import std.stdio; - -import src.stack; -import src.definition; - -Token[string] variables; -bool drop_mode; - -bool definition_start() { - src.definition.start; - return true; -} - -bool binary_op_variable_bind() { - string name = stack.pop.get!string; - Token value = stack.pop; - - variables[name] = value; - return true; -} - -bool unary_op_variable_resolve() { - string name = stack.pop.get!string; - - if ( name in variables ) { - stack.push(variables[name]); - } - - return true; -} - -bool unary_conditional_if() { - drop_mode = !stack.pop.get!bool; - return true; -} - -bool n_ary_conditional_then() { - drop_mode = !drop_mode; - return true; -} - -bool n_ary_conditional_else() { - drop_mode = false; - return true; -} - -bool binary_op_add() { - int b = stack.pop.get!int; - int a = stack.pop.get!int; - - stack.push(a + b); - - return true; -} - -bool binary_op_multiply() { - int b = stack.pop.get!int; - int a = stack.pop.get!int; - - stack.push(a * b); - - return true; -} - -bool binary_op_divide() { - 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; -} - -bool binary_op_modulo() { - 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; -} - -bool unary_op_io_print() { - writeln(stack.top); - return true; -} - -bool unary_op_stack_pop() { - stack.pop; - return true; -} - -bool unary_op_stack_dup() { - stack.push(stack.top); - return true; -} - -bool binary_op_stack_swp() { - auto b = stack.pop; - auto a = stack.pop; - - stack.push(b); - stack.push(a); - - return true; -} - -bool binary_cond_lt() { - int b = stack.pop.get!int; - int a = stack.pop.get!int; - - stack.push(a < b); - return true; -} - -bool binary_cond_eq() { - auto b = stack.pop; - auto a = stack.pop; - - stack.push(a == b); - return true; -} - -bool integral_value_bool(bool value) { - stack.push(Token(value)); - return true; -} |