summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-12-06 15:40:47 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-12-06 15:40:47 -0800
commit6f051c69587d159cafbb6bcf79ba245e8ca0d6c0 (patch)
tree9f32f483a41807787a4c6b864d65404de4fd043d /eval.c
parent6cf90c4dc732318823adf7ec96e88e9e7772d4cf (diff)
downloadtxr-6f051c69587d159cafbb6bcf79ba245e8ca0d6c0.tar.gz
txr-6f051c69587d159cafbb6bcf79ba245e8ca0d6c0.tar.bz2
txr-6f051c69587d159cafbb6bcf79ba245e8ca0d6c0.zip
* eval.c (op_unwind_protect): Fixed uninitialized variable
warning. (eval_init): New functions registered: typeof and vector functions, as well as length_list. * lib.c (length): Function renamed to length_list, because it is list specific. (length_vec, size_vec, vector_list): New functions. (length): New function, generic over lists, vectors and strings. * lib.h (length_list, length_vec, size_vec, vector_list): Declared. * match.c (h_var, h_fun, robust_length, v_deffilter, v_fun): Use length_list instead of length. * parser.l: Introduced # token. * parser.y (vector): New nonterminal. (expr): vector is a kind of expr. (chrlist): Bugfix: single-character syntax was not working; for instance #\x to denote the charcter x. (lit_char_helper): Use length_list instead of length. * stream.c (string_in_get_line): Bugfix: this was using the wrong length function: length was being applied to a string. The genericity of length makes that correct now, but changing to length_str anyway. * txr.1: Blank sections created for functions. Vector syntax documented.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/eval.c b/eval.c
index 85176f7f..f3abb911 100644
--- a/eval.c
+++ b/eval.c
@@ -630,7 +630,7 @@ static val op_unwind_protect(val form, val env)
{
val prot_form = second(form);
val cleanup_forms = rest(rest(form));
- val result;
+ val result = nil;
uw_catch_begin(nil, exsym, exvals);
@@ -1061,13 +1061,14 @@ void eval_init(void)
reg_fun(append_s, func_n0v(appendv));
reg_fun(list_s, func_n0v(identity));
reg_fun(intern(lit("identity"), user_package), identity_f);
+ reg_fun(intern(lit("typeof"), user_package), func_n1(typeof));
reg_fun(intern(lit("atom"), user_package), func_n1(atom));
reg_fun(intern(lit("null"), user_package), func_n1(nullp));
reg_fun(intern(lit("consp"), user_package), func_n1(consp));
reg_fun(intern(lit("listp"), user_package), func_n1(listp));
reg_fun(intern(lit("proper-listp"), user_package), func_n1(proper_listp));
- reg_fun(intern(lit("length"), user_package), func_n1(length));
+ reg_fun(intern(lit("length-list"), user_package), func_n1(length_list));
reg_fun(intern(lit("mapcar"), user_package), func_n1v(mapcarv));
reg_fun(intern(lit("mappend"), user_package), func_n1v(mappendv));
@@ -1185,6 +1186,16 @@ void eval_init(void)
reg_fun(intern(lit("compl-span-str"), user_package), func_n2(compl_span_str));
reg_fun(intern(lit("break-str"), user_package), func_n2(break_str));
+ reg_fun(intern(lit("vector"), user_package), func_n1(vector));
+ reg_fun(intern(lit("vec-get-fill"), user_package), func_n1(vec_get_fill));
+ reg_fun(intern(lit("vec-set-fill"), user_package), func_n2(vec_set_fill));
+ reg_fun(intern(lit("vecref"), user_package), func_n2(vecref));
+ reg_fun(intern(lit("vec-push"), user_package), func_n2(vec_push));
+ reg_fun(intern(lit("length-vec"), user_package), func_n1(length_vec));
+ reg_fun(intern(lit("size-vec"), user_package), func_n1(size_vec));
+ reg_fun(intern(lit("vector-list"), user_package), func_n1(vector_list));
+ reg_fun(intern(lit("length"), user_package), func_n1(length));
+
eval_error_s = intern(lit("eval-error"), user_package);
uw_register_subtype(eval_error_s, error_s);
}