diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-11-30 06:16:16 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-11-30 06:16:16 -0800 |
commit | e557f0f806badf93b36b2bf519a73830b67cf564 (patch) | |
tree | 0be990c21e59608e3ec8be36b01093f60bad23e5 | |
parent | 4a71d6d387e332431d8a53bca4f37a32d12b647a (diff) | |
download | txr-e557f0f806badf93b36b2bf519a73830b67cf564.tar.gz txr-e557f0f806badf93b36b2bf519a73830b67cf564.tar.bz2 txr-e557f0f806badf93b36b2bf519a73830b67cf564.zip |
Change funcall_interp API.
* eval.c (funcall_interp): Drop the env argument.
The fun argument is now the whole function object, not the
encapsulated code to be interpreted. We pull the
environment and code out of the object locally
and interpret as before.
* eval.h (funcall_interp): Declaration updated.
* lib.c (generic_funcall, funcall, funcall1, funcall2,
* funcall3, funcall4): Calls to funcall_interp simplified,
just passing fun.
-rw-r--r-- | eval.c | 4 | ||||
-rw-r--r-- | eval.h | 2 | ||||
-rw-r--r-- | lib.c | 13 |
3 files changed, 10 insertions, 9 deletions
@@ -1023,8 +1023,10 @@ val set_dyn_env(val de) return old; } -val funcall_interp(val env, val fun, struct args *args) +val funcall_interp(val interp_fun, struct args *args) { + val env = interp_fun->f.env; + val fun = interp_fun->f.f.interp_fun; val def = cdr(fun); val params = car(def); val body = cdr(def); @@ -43,7 +43,7 @@ loc lookup_var_l(val env, val sym); loc lookup_global_var_l(val sym); val lookup_fun(val env, val sym); val set_dyn_env(val de); -val funcall_interp(val env, val fun, struct args *); +val funcall_interp(val interp_fun, struct args *); val boundp(val sym); val fboundp(val sym); val special_operator_p(val sym); @@ -4950,7 +4950,7 @@ val generic_funcall(val fun, struct args *args_in) switch (fun->f.functype) { case FINTERP: - return funcall_interp(fun->f.env, fun->f.f.interp_fun, args); + return funcall_interp(fun, args); case F0: return fun->f.f.f0v(fun->f.env, args); case F1: @@ -5000,7 +5000,7 @@ val funcall(val fun) switch (fun->f.functype) { case FINTERP: - return funcall_interp(fun->f.env, fun->f.f.interp_fun, args); + return funcall_interp(fun, args); case F0: return fun->f.f.f0v(fun->f.env, args); case N0: @@ -5035,7 +5035,7 @@ val funcall1(val fun, val arg) switch (fun->f.functype) { case FINTERP: args_add(args, arg); - return funcall_interp(fun->f.env, fun->f.f.interp_fun, args); + return funcall_interp(fun, args); case F0: args_add(args, arg); return fun->f.f.f0v(fun->f.env, args); @@ -5076,7 +5076,7 @@ val funcall2(val fun, val arg1, val arg2) switch (fun->f.functype) { case FINTERP: args_add2(args, arg1, arg2); - return funcall_interp(fun->f.env, fun->f.f.interp_fun, args); + return funcall_interp(fun, args); case F0: args_add2(args, arg1, arg2); return fun->f.f.f0v(fun->f.env, args); @@ -5123,7 +5123,7 @@ val funcall3(val fun, val arg1, val arg2, val arg3) switch (fun->f.functype) { case FINTERP: args_add3(args, arg1, arg2, arg3); - return funcall_interp(fun->f.env, fun->f.f.interp_fun, args); + return funcall_interp(fun, args); case F0: args_add3(args, arg1, arg2, arg3); return fun->f.f.f0v(fun->f.env, args); @@ -5176,8 +5176,7 @@ val funcall4(val fun, val arg1, val arg2, val arg3, val arg4) switch (fun->f.functype) { case FINTERP: args_add4(args, arg1, arg2, arg3, arg4); - return funcall_interp(fun->f.env, fun->f.f.interp_fun, - args); + return funcall_interp(fun, args); case F0: args_add4(args, arg1, arg2, arg3, arg4); return fun->f.f.f0v(fun->f.env, args); |