aboutsummaryrefslogtreecommitdiff
path: root/src/doer.c
diff options
context:
space:
mode:
authorc2024-04-16 15:19:57 -0400
committerc2024-04-16 15:19:57 -0400
commitc26ffc484d30dce65754c0081baa5402346c703a (patch)
tree0c8c98eed4ba68fac761e26ef63fce8d660bdf55 /src/doer.c
parent2e6d3b3343f8e51bc2f3749017ee8a22d7e8b2f6 (diff)
One may now add and subtract integers.
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;