diff options
Diffstat (limited to 'src/doer.c')
-rw-r--r-- | src/doer.c | 23 |
1 files changed, 21 insertions, 2 deletions
@@ -229,9 +229,9 @@ tree_t* blin_add(doer_t* doer) { tree_t* arg1 = args; tree_t* arg2 = arg1->data.carg.nxt; - doer->tree = arg1; + doer->tree = arg1->data.carg.val; int a = doer_eval_lint(doer); - doer->tree = arg2; + doer->tree = arg2->data.carg.val; int b = doer_eval_lint(doer); tree_t* newt = tree_init(TREE_TYPE_LINT, tree->parent); @@ -241,6 +241,25 @@ tree_t* blin_add(doer_t* doer) { return newt; } +tree_t* blin_sub(doer_t* doer) { + tree_t* tree = doer->tree; + + tree_t* args = tree->data.call.arg; + tree_t* arg1 = args; + tree_t* arg2 = arg1->data.carg.nxt; + + doer->tree = arg1->data.carg.val; + int a = doer_eval_lint(doer); + doer->tree = arg2->data.carg.val; + int b = doer_eval_lint(doer); + + tree_t* newt = tree_init(TREE_TYPE_LINT, tree->parent); + + newt->data.lint.val = a - b; + + return newt; +} + void doer_do_block(doer_t* doer) { if (!doer->tree) return; |