summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-11-30 06:16:16 -0800
committerKaz Kylheku <kaz@kylheku.com>2015-11-30 06:16:16 -0800
commite557f0f806badf93b36b2bf519a73830b67cf564 (patch)
tree0be990c21e59608e3ec8be36b01093f60bad23e5
parent4a71d6d387e332431d8a53bca4f37a32d12b647a (diff)
downloadtxr-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.c4
-rw-r--r--eval.h2
-rw-r--r--lib.c13
3 files changed, 10 insertions, 9 deletions
diff --git a/eval.c b/eval.c
index 3accea39..a8f61cff 100644
--- a/eval.c
+++ b/eval.c
@@ -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);
diff --git a/eval.h b/eval.h
index 792c6efc..7dd51121 100644
--- a/eval.h
+++ b/eval.h
@@ -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);
diff --git a/lib.c b/lib.c
index f5ec840f..bd172bf8 100644
--- a/lib.c
+++ b/lib.c
@@ -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);