aboutsummaryrefslogtreecommitdiff
path: root/src/doer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/doer.c')
-rw-r--r--src/doer.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/doer.c b/src/doer.c
index 5262fb1..bc6d4bd 100644
--- a/src/doer.c
+++ b/src/doer.c
@@ -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;