summaryrefslogtreecommitdiffstats
path: root/parser.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-09-26 20:04:48 -0700
committerKaz Kylheku <kaz@kylheku.com>2016-09-26 20:04:48 -0700
commit35c93525878412abba9acbc46071327c8bfcfc9c (patch)
treea7445b4a0bf67b203d0fbc32d5d55a159b020395 /parser.c
parent36f8481e4029ce04776e222653ab3e5aff0c9cd7 (diff)
downloadtxr-35c93525878412abba9acbc46071327c8bfcfc9c.tar.gz
txr-35c93525878412abba9acbc46071327c8bfcfc9c.tar.bz2
txr-35c93525878412abba9acbc46071327c8bfcfc9c.zip
Overhaul of self-load-path mechanism.
The self-load-path symbol macro is as of now deprecated. It simply expands to *load-path*. *load-path* is a new special variable which is dynamically bound to the path of a file being loaded. * eval.c (self_load_path_s): Global variable renamed to load_path_s. (sys_load): Bind *load-path* around processing of loaded file. (me_load): Expand (load x) simply to (sys:load x *load-path*). (set_get_symacro): Function removed. (reg_symacro): New static function. (eval_init): Initialize renamed load_path_s with interned symbol having the name *load-path*. Register the *load-path* special variable. Set up the sel-load-path symbol macro aliasing for *load-path*. * eval.h (self_load_path_s): Declaration renamed. * match.c (v_load): Bind *load-path* around loading or inclusion. * parser.c (load_rcfile): Bind *load-path* around loading of .txr_profile file. * txr.c (txr_main): Bind *load-path* instead of self-load-path symbol macro. * txr.1: Updated documentation for @(load) directive and load macro. Replaced documentation of self-load-path with *load-path*.
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/parser.c b/parser.c
index 88e24475..1e0b2b6f 100644
--- a/parser.c
+++ b/parser.c
@@ -408,7 +408,6 @@ static void load_rcfile(val name)
val catch_syms = cons(error_s, nil);
val path_private_to_me_p = intern(lit("path-private-to-me-p"), user_package);
val path_exists_p = intern(lit("path-exists-p"), user_package);
- val self_load_path_old = nil;
if (!funcall1(path_exists_p, name))
return;
@@ -417,15 +416,16 @@ static void load_rcfile(val name)
open_txr_file(name, &lisp_p, &resolved_name, &stream);
- self_load_path_old = set_get_symacro(self_load_path_s, resolved_name);
-
if (stream) {
if (!funcall1(path_private_to_me_p, statf(stream))) {
format(std_output,
lit("** possible security problem: ~a is writable to others\n"),
name, nao);
} else {
+ val saved_dyn_env = set_dyn_env(make_env(nil, nil, dyn_env));
+ env_vbind(dyn_env, load_path_s, resolved_name);
read_eval_stream(stream, std_output, nil);
+ dyn_env = saved_dyn_env;
}
}
@@ -438,7 +438,6 @@ static void load_rcfile(val name)
}
uw_unwind {
- set_get_symacro(self_load_path_s, self_load_path_old);
if (stream)
close_stream(stream, nil);
}