diff options
author | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 2000-06-21 02:42:03 +0000 |
---|---|---|
committer | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 2000-06-21 02:42:03 +0000 |
commit | 549e6ec69d0ba7d3cfadc9575c62f3e94f7c63b8 (patch) | |
tree | a10585bf15a57b511fff3661ee11e75f97faa99a | |
parent | 03cd374d375ba0d0d5ae074f048582f35a169707 (diff) | |
download | guile-549e6ec69d0ba7d3cfadc9575c62f3e94f7c63b8.tar.gz |
* eval.c, eval.h (scm_top_level_lookup_closure_var): Added.
#include "libguile/fluids.h".
-rw-r--r-- | libguile/eval.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/libguile/eval.c b/libguile/eval.c index 54e28268f..e9c8f0b1d 100644 --- a/libguile/eval.c +++ b/libguile/eval.c @@ -99,6 +99,7 @@ char *alloca (); #include "libguile/ports.h" #include "libguile/root.h" #include "libguile/vectors.h" +#include "libguile/fluids.h" #include "libguile/validate.h" #include "libguile/eval.h" @@ -3825,8 +3826,9 @@ SCM_DEFINE (scm_copy_tree, "copy-tree", 1, 0, 0, SCM scm_eval_3 (SCM obj, int copyp, SCM env) { - if (SCM_NIMP (SCM_CDR (scm_system_transformer))) - obj = scm_apply (SCM_CDR (scm_system_transformer), obj, scm_listofnull); + SCM transformer = scm_fluid_ref (SCM_CDR (scm_system_transformer)); + if (SCM_NIMP (transformer)) + obj = scm_apply (transformer, obj, scm_listofnull); else if (copyp) obj = scm_copy_tree (obj); return SCM_XEVAL (obj, env); @@ -3843,6 +3845,9 @@ SCM_DEFINE (scm_eval2, "eval2", 2, 0, 0, } #undef FUNC_NAME +SCM scm_system_transformer; +SCM scm_top_level_lookup_closure_var; + SCM_DEFINE (scm_eval, "eval", 1, 0, 0, (SCM obj), "Evaluate @var{exp}, a list representing a Scheme expression, in the\n" @@ -3851,8 +3856,7 @@ SCM_DEFINE (scm_eval, "eval", 1, 0, 0, { return scm_eval_3 (obj, 1, - scm_top_level_env - (SCM_CDR (scm_top_level_lookup_closure_var))); + scm_top_level_env (SCM_TOP_LEVEL_LOOKUP_CLOSURE)); } #undef FUNC_NAME @@ -3865,8 +3869,7 @@ scm_eval_x (SCM obj) { return scm_eval_3 (obj, 0, - scm_top_level_env - (SCM_CDR (scm_top_level_lookup_closure_var))); + scm_top_level_env (SCM_TOP_LEVEL_LOOKUP_CLOSURE)); } @@ -3895,7 +3898,8 @@ scm_init_eval () scm_set_smob_print (scm_tc16_promise, prinprom); scm_f_apply = scm_make_subr ("apply", scm_tc7_lsubr_2, scm_apply); - scm_system_transformer = scm_sysintern ("scm:eval-transformer", SCM_UNDEFINED); + scm_system_transformer = scm_sysintern ("scm:eval-transformer", + scm_make_fluid ()); scm_sym_dot = SCM_CAR (scm_sysintern (".", SCM_UNDEFINED)); scm_sym_arrow = SCM_CAR (scm_sysintern ("=>", SCM_UNDEFINED)); scm_sym_else = SCM_CAR (scm_sysintern ("else", SCM_UNDEFINED)); @@ -3913,7 +3917,7 @@ scm_init_eval () /* end of acros */ scm_top_level_lookup_closure_var = - scm_sysintern("*top-level-lookup-closure*", SCM_BOOL_F); + scm_sysintern ("*top-level-lookup-closure*", scm_make_fluid ()); scm_can_use_top_level_lookup_closure_var = 1; #ifdef DEBUG_EXTENSIONS |