summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-02-05 16:36:33 -0800
committerKaz Kylheku <kaz@kylheku.com>2014-02-05 16:36:33 -0800
commit227f0d19dc5313edbebbb56ba6b4966012a2370e (patch)
treee134458589904e1b9444d3cf59e6d5abc74d98e3 /eval.c
parent68c084269581f32f0a7b859446ae2efb6c6a26c0 (diff)
downloadtxr-227f0d19dc5313edbebbb56ba6b4966012a2370e.tar.gz
txr-227f0d19dc5313edbebbb56ba6b4966012a2370e.tar.bz2
txr-227f0d19dc5313edbebbb56ba6b4966012a2370e.zip
* arith.c (lognot): Conform to new scheme for defaulting optional args.
* eval.c (apply): Unconditionally use colon_k for missing optional args, for intrinsic functions. (eval_intrinsic, rangev, rangev_star, errno_wrap): Conform to new scheme for defaulting optional args. (reg_fun_mark): Function removed. (eval_init): Switch reduce_left and reduce_right back to reg_fun registration. * hash.c (gethash_n): Conform to new scheme for defaulting optional arguments. * lib.c (sub_list, replace_list, remove_if, keep_if, remove_if_lazy, keep_if_lazy, tree_find, count_if, some_satisfy, all_satisfy, none_satisfy, search_str, match_str, match_str_tree, sub_str, replace_str, cat_str, tok_str, intern, rehome_sym, sub_vec, replace_vec, lazy_str, sort, multi_sort, find, find_if, set_diff, obj_print, obj_pprint): Conform to new scheme for defaulting optional arguments. (func_f0, func_f1, func_f2, func_f3, func_f4, func_n0, func_n1, func_n2, func_n3, func_n4, func_n5, func_n6, func_n7, func_f0v, func_f1v, func_f2v, func_f3v, func_f4v, func_n0v, func_n1v, func_n2v, func_n3v, func_n4v, func_n5v, func_n6v, func_n7v): Remove references to removed mark_missing_args member of struct func. (func_set_mark_missing): Function removed. (generic_funcall): Unconditionally use colon_k for missing optional args, for intrinsic functions. * lib.h (struct func): mark_missing_args member removed. (func_set_mark_missing): Declaration removed. (default_arg, default_bool_arg): New inline functions. * rand.c (random): Left argument is not optional. (rnd): Conform to new scheme for defaulting optional arguments. * regex.c (search_regex, match_regex): Conform to new scheme for defaulting optional arguments. * stream.c (unget_char, unget_byte, put_string, put_char, put_byte, put_line): Conform to new scheme for defaulting optional arguments. * syslog.c (openlog_wrap): Conform to new scheme for defaulting optional arguments. * txr.1: Remove the specification that nil is a sentinel value in default arguments, where necessary. Use consistent syntax for specifying variable parts in argument lists. A few errors and omissions addressed.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c37
1 files changed, 12 insertions, 25 deletions
diff --git a/eval.c b/eval.c
index ff6e82ea..61459838 100644
--- a/eval.c
+++ b/eval.c
@@ -331,7 +331,6 @@ twocol:
val apply(val fun, val arglist, val ctx_form)
{
val arg[32], *p = arg;
- val missing;
int variadic, fixparam, reqargs, nargs;
if (symbolp(fun)) {
@@ -343,8 +342,6 @@ val apply(val fun, val arglist, val ctx_form)
type_check (fun, FUN);
- missing = fun->f.mark_missing_args ? colon_k : nil;
-
if (!listp(arglist)) {
val arglist_conv = tolist(arglist);
type_assert (listp(arglist_conv),
@@ -372,7 +369,7 @@ val apply(val fun, val arglist, val ctx_form)
car(ctx_form), nao);
for (; nargs < fixparam; nargs++)
- *p++ = missing;
+ *p++ = colon_k;
switch (fun->f.functype) {
case F0:
@@ -415,7 +412,7 @@ val apply(val fun, val arglist, val ctx_form)
car(ctx_form), nao);
for (; nargs < fixparam; nargs++)
- *p++ = missing;
+ *p++ = colon_k;
switch (fun->f.functype) {
case FINTERP:
@@ -501,9 +498,8 @@ val interp_fun(val env, val fun, val args)
val eval_intrinsic(val form, val env)
{
- uses_or2;
form = expand(form);
- return eval(form, or2(env, make_env(nil, nil, env)), form);
+ return eval(form, default_arg(env, make_env(nil, nil, env)), form);
}
static val do_eval(val form, val env, val ctx_form,
@@ -2065,10 +2061,9 @@ static val rangev_func(val env, val lcons)
static val rangev(val args)
{
- uses_or2;
- val from = or2(first(args), zero);
- val to = second(args);
- val step = or2(third(args), if3(to && gt(from, to), negone, one));
+ val from = default_arg(first(args), zero);
+ val to = default_bool_arg(second(args));
+ val step = default_arg(third(args), if3(to && gt(from, to), negone, one));
val env = cons(from, cons(to, step));
return make_lazy_cons(func_f1(env, rangev_func));
@@ -2101,8 +2096,8 @@ static val range_star_v_func(val env, val lcons)
static val range_star_v(val args)
{
uses_or2;
- val from = or2(first(args), zero);
- val to = second(args);
+ val from = default_arg(first(args), zero);
+ val to = default_bool_arg(second(args));
if (eql(from, to)) {
return nil;
@@ -2197,7 +2192,7 @@ static val force(val promise)
static val errno_wrap(val newval)
{
val oldval = num(errno);
- if (newval)
+ if (default_bool_arg(newval))
errno = c_num(newval);
return oldval;
}
@@ -2257,12 +2252,6 @@ static void reg_fun(val sym, val fun)
sethash(top_fb, sym, cons(sym, fun));
}
-static void reg_fun_mark(val sym, val fun)
-{
- sethash(top_fb, sym, cons(sym, fun));
- func_set_mark_missing(fun);
-}
-
static void c_var_mark(val obj)
{
struct c_var *cv = (struct c_var *) obj->co.handle;
@@ -2441,10 +2430,8 @@ void eval_init(void)
reg_fun(intern(lit("mappend"), user_package), func_n1v(mappendv));
reg_fun(intern(lit("mappend*"), user_package), func_n1v(lazy_mappendv));
reg_fun(apply_s, func_n1v(apply_intrinsic));
- reg_fun_mark(intern(lit("reduce-left"), user_package),
- func_n4o(reduce_left, 2));
- reg_fun_mark(intern(lit("reduce-right"), user_package),
- func_n4o(reduce_right, 2));
+ reg_fun(intern(lit("reduce-left"), user_package), func_n4o(reduce_left, 2));
+ reg_fun(intern(lit("reduce-right"), user_package), func_n4o(reduce_right, 2));
reg_fun(intern(lit("second"), user_package), func_n1(second));
reg_fun(intern(lit("third"), user_package), func_n1(third));
@@ -2757,7 +2744,7 @@ void eval_init(void)
reg_fun(intern(lit("copy-cons"), user_package), func_n1(copy_cons));
reg_fun(intern(lit("copy-alist"), user_package), func_n1(copy_alist));
reg_fun(intern(lit("prop"), user_package), func_n2(getplist));
- reg_fun(intern(lit("merge"), user_package), func_n4o(merge, 2));
+ reg_fun(intern(lit("merge"), user_package), func_n4o(merge, 3));
reg_fun(intern(lit("sort"), user_package), func_n3o(sort, 2));
reg_fun(intern(lit("find"), user_package), func_n4o(find, 2));
reg_fun(intern(lit("multi-sort"), user_package), func_n3o(multi_sort, 2));