From 18d0ffb0f4e1dfc0942c0fe7e3f8aa628c418b6e Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Sun, 8 Jun 2008 22:13:45 +0200 Subject: [PATCH] The lexical environment of a function is stored in the same IHS record as its name. --- src/c/interpreter.d | 4 +--- src/c/stacks.d | 2 +- src/h/stacks.h | 2 +- src/lsp/top.lsp | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/c/interpreter.d b/src/c/interpreter.d index 7cff8bca8..4be097e1f 100644 --- a/src/c/interpreter.d +++ b/src/c/interpreter.d @@ -489,15 +489,13 @@ static cl_object interpret_funcall(cl_object lex_env, cl_narg narg, cl_object fun) { struct ecl_stack_frame frame_aux; - struct ihs_frame ihs; - ihs_push(&ihs, fun, lex_env); + cl_env.ihs_top->lex_env = lex_env; frame_aux.t = t_frame; frame_aux.stack = cl_env.stack; frame_aux.top = cl_env.stack_top; frame_aux.bottom = frame_aux.top - narg; fun = ecl_apply_from_stack_frame((cl_object)&frame_aux, fun); ecl_stack_frame_close((cl_object)&frame_aux); - ihs_pop(); return fun; } diff --git a/src/c/stacks.d b/src/c/stacks.d index 663d6e606..75df305c0 100644 --- a/src/c/stacks.d +++ b/src/c/stacks.d @@ -234,7 +234,7 @@ si_ihs_fun(cl_object arg) cl_object si_ihs_env(cl_object arg) { - @(return get_ihs_ptr(fixnnint(si_ihs_next(arg)))->lex_env) + @(return get_ihs_ptr(fixnnint(arg))->lex_env) } /********************** FRAME STACK *************************/ diff --git a/src/h/stacks.h b/src/h/stacks.h index 5629ab2ea..eabbd5742 100644 --- a/src/h/stacks.h +++ b/src/h/stacks.h @@ -77,7 +77,7 @@ typedef struct ihs_frame { } *ihs_ptr; #define ihs_push(r,f,e) do { \ - (r)->next=cl_env.ihs_top; (r)->function=(f); (r)->lex_env= (e); \ + (r)->next=cl_env.ihs_top; (r)->function=(f); (r)->lex_env=(e); \ (r)->index=cl_env.ihs_top->index+1;\ cl_env.ihs_top = (r); \ } while(0) diff --git a/src/lsp/top.lsp b/src/lsp/top.lsp index c01bb3e8e..8e794a3fa 100644 --- a/src/lsp/top.lsp +++ b/src/lsp/top.lsp @@ -781,7 +781,7 @@ under certain conditions; see file 'Copyright' for details.") (set-break-env)) (defun set-break-env () - (setq *break-env* (if (= *ihs-current* *ihs-top*) nil (ihs-env *ihs-current*)))) + (setq *break-env* (ihs-env *ihs-current*))) (defun ihs-search (string unrestricted &optional (start (si::ihs-top 'tpl))) (do ((ihs start (si::ihs-prev ihs)))