summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-11-16 05:32:47 -0800
committerKaz Kylheku <kaz@kylheku.com>2016-11-16 05:32:47 -0800
commitcf0ac2826bc7dc06d3c63e956ec8922a358f4f80 (patch)
tree50063036810b493a2bca9d5892ea992f02d82360 /eval.c
parent704664e60d7d548d9ce5c44b34d0d2b60db1e31c (diff)
downloadtxr-cf0ac2826bc7dc06d3c63e956ec8922a358f4f80.tar.gz
txr-cf0ac2826bc7dc06d3c63e956ec8922a358f4f80.tar.bz2
txr-cf0ac2826bc7dc06d3c63e956ec8922a358f4f80.zip
Start of fallback package list implementation.
* eval.c (eval_init): Register package-fallback-list and set-package-fallback-list intrinsics. * lib.c (package_fallback_list, set_package_fallback_list, intern_fallback): New functions * lib.h (package_fallback_list, set_package_fallback_list, intern_fallback): Declared. * parser.y (sym_helper): Slightly restructure function so that the symbol interning is done separately in the various cases. In the unqualified symbol case, use intern_fallback to search the fallback list of the current package. * share/txr/stdlib/package.tl (defpackage): Implement :fallback clause.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index 199bfa0a..e8ac079e 100644
--- a/eval.c
+++ b/eval.c
@@ -5246,6 +5246,8 @@ void eval_init(void)
reg_fun(intern(lit("intern"), user_package), func_n2o(intern, 1));
reg_fun(intern(lit("unintern"), user_package), func_n2o(unintern, 1));
reg_fun(intern(lit("rehome-sym"), user_package), func_n2o(rehome_sym, 1));
+ reg_fun(intern(lit("package-fallback-list"), user_package), func_n1(package_fallback_list));
+ reg_fun(intern(lit("set-package-fallback-list"), user_package), func_n2(set_package_fallback_list));
reg_fun(intern(lit("symbolp"), user_package), func_n1(symbolp));
reg_fun(intern(lit("symbol-name"), user_package), func_n1(symbol_name));
reg_fun(intern(lit("symbol-package"), user_package), func_n1(symbol_package));