aboutsummaryrefslogtreecommitdiffstats
path: root/builtins.c
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2018-03-08 12:17:12 -0500
committerClyne Sullivan <tullivan99@gmail.com>2018-03-08 12:17:12 -0500
commit28447df15ac80d7dad1f4889d3d61fe7bfe42a12 (patch)
treedcc38b9a21e9771af0ce3d243660a59bd4992c52 /builtins.c
parent40e157ffa2ae741088d2fbea22c9042b85daf108 (diff)
implicit multiply, negatives, solve
Diffstat (limited to 'builtins.c')
-rw-r--r--builtins.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/builtins.c b/builtins.c
index 5186e8b..0ab6f3b 100644
--- a/builtins.c
+++ b/builtins.c
@@ -13,6 +13,7 @@ int ifunc_do(interpreter *it);
int ifunc_while(interpreter *it);
int ifunc_ret(interpreter *it);
int ifunc_else(interpreter *it);
+int ifunc_solve(interpreter *it);
const func_t indent_up[IUP_COUNT] = {
ifunc_if, ifunc_do, ifunc_label
@@ -32,6 +33,24 @@ void iload_core(interpreter *interp)
inew_cfunc(interp, "while", ifunc_while);
inew_cfunc(interp, "ret", ifunc_ret);
inew_cfunc(interp, "else", ifunc_else);
+ inew_cfunc(interp, "solve", ifunc_solve);
+}
+
+int ifunc_solve(interpreter *it)
+{
+ const char *expr = igetarg_string(it, 0);
+ int len = strlen(expr);
+ char *buf = (char *)malloc(len + 2);
+ strcpy(buf, expr);
+ buf[len] = ')';
+ buf[len + 1] = '\0';
+ variable *r = idoexpr(it, buf);
+ free(buf);
+ if (r == 0)
+ r = make_varn(0, 0.0f);
+ iret(it, r);
+ free(r);
+ return 0;
}
int ifunc_set(interpreter *it)