summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2013-11-28 08:53:32 -0800
committerKaz Kylheku <kaz@kylheku.com>2013-11-28 08:53:32 -0800
commit5690908deca7a4a803381ed7629da1f5ef057375 (patch)
tree01851ce84c3105952a3cc59bec4ef6789a30233e /eval.c
parent2cca0f202343044e81785c7612da105f528217fd (diff)
downloadtxr-5690908deca7a4a803381ed7629da1f5ef057375.tar.gz
txr-5690908deca7a4a803381ed7629da1f5ef057375.tar.bz2
txr-5690908deca7a4a803381ed7629da1f5ef057375.zip
Extending intrinsic functions to go up to 7 arguments.
Adding wrapper for mktime. * eval.c (apply): Handle function codes N5 through N7. (eval_init): Register make_time as intrinsic. * lib.c (auto_k): New keyword symbol variable. (equal, generic_funcall): Handle N5-N7. (func_n5, func_n6, func_n7, func_n5v, func_n6v, func_n7v): New functions. (obj_init): Initialize auto_k. (make_time): New function. * lib.h (functype_t): New enum members: N5, N6, N7. (struct func): New members: n5, n6, n7, n5v, n6v, n7v. (auto_k, func_n5, func_n6, func_n7, func_n5v, func_n6v, func_n7v, make_time): Declared.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index 003a0623..defed7e9 100644
--- a/eval.c
+++ b/eval.c
@@ -317,6 +317,12 @@ val apply(val fun, val arglist, val ctx_form)
return fun->f.f.n3(arg[0], arg[1], arg[2]);
case N4:
return fun->f.f.n4(arg[0], arg[1], arg[2], arg[3]);
+ case N5:
+ return fun->f.f.n5(arg[0], arg[1], arg[2], arg[3], arg[4]);
+ case N6:
+ return fun->f.f.n6(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]);
+ case N7:
+ return fun->f.f.n7(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]);
case FINTERP:
internal_error("unsupported function type");
}
@@ -356,6 +362,12 @@ val apply(val fun, val arglist, val ctx_form)
return fun->f.f.n3v(arg[0], arg[1], arg[2], arglist);
case N4:
return fun->f.f.n4v(arg[0], arg[1], arg[2], arg[3], arglist);
+ case N5:
+ return fun->f.f.n5v(arg[0], arg[1], arg[2], arg[3], arg[4], arglist);
+ case N6:
+ return fun->f.f.n6v(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arglist);
+ case N7:
+ return fun->f.f.n7v(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arglist);
}
}
@@ -2518,7 +2530,7 @@ void eval_init(void)
reg_fun(intern(lit("time-usec"), user_package), func_n0(time_sec_usec));
reg_fun(intern(lit("time-string-local"), user_package), func_n2(time_string_local));
reg_fun(intern(lit("time-string-utc"), user_package), func_n2(time_string_utc));
-
+ reg_fun(intern(lit("make-time"), user_package), func_n7(make_time));
reg_fun(intern(lit("source-loc"), user_package), func_n1(source_loc));
reg_fun(intern(lit("source-loc-str"), user_package), func_n1(source_loc_str));