diff options
author | Clyne Sullivan <tullivan99@gmail.com> | 2018-03-08 12:17:12 -0500 |
---|---|---|
committer | Clyne Sullivan <tullivan99@gmail.com> | 2018-03-08 12:17:12 -0500 |
commit | 28447df15ac80d7dad1f4889d3d61fe7bfe42a12 (patch) | |
tree | dcc38b9a21e9771af0ce3d243660a59bd4992c52 /builtins.c | |
parent | 40e157ffa2ae741088d2fbea22c9042b85daf108 (diff) |
implicit multiply, negatives, solve
Diffstat (limited to 'builtins.c')
-rw-r--r-- | builtins.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -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) |