mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-24 12:20:20 +02:00
Simplify variable resolution in the evaluator
* libguile/expand.c (convert_assignment): Handle creation of the default lambda-case body here. * libguile/eval.c (eval): * module/ice-9/eval.scm (primitive-eval): * libguile/memoize.h: * libguile/memoize.c (MAKMEMO_BOX_REF, MAKMEMO_BOX_SET): (MAKMEMO_TOP_BOX, MAKMEMO_MOD_BOX): Refactor all global var resolution to go through "resolve". Add "box-ref" and "box-set!". Rename memoize-variable-access! to %resolve-variable, and don't be destructive.
This commit is contained in:
parent
a3cae847d0
commit
e6a42e6765
5 changed files with 156 additions and 212 deletions
|
@ -1412,7 +1412,21 @@ convert_assignment (SCM exp, SCM assigned)
|
|||
return LAMBDA
|
||||
(REF (exp, LAMBDA, SRC),
|
||||
REF (exp, LAMBDA, META),
|
||||
convert_assignment (REF (exp, LAMBDA, BODY), assigned));
|
||||
scm_is_false (REF (exp, LAMBDA, BODY))
|
||||
/* Give a body to case-lambda with no clauses. */
|
||||
? LAMBDA_CASE (SCM_BOOL_F, SCM_EOL, SCM_EOL, SCM_BOOL_F, SCM_BOOL_F,
|
||||
SCM_EOL, SCM_EOL,
|
||||
PRIMCALL
|
||||
(SCM_BOOL_F,
|
||||
scm_from_latin1_symbol ("throw"),
|
||||
scm_list_5 (CONST_ (SCM_BOOL_F, scm_args_number_key),
|
||||
CONST_ (SCM_BOOL_F, SCM_BOOL_F),
|
||||
CONST_ (SCM_BOOL_F, scm_from_latin1_string
|
||||
("Wrong number of arguments")),
|
||||
CONST_ (SCM_BOOL_F, SCM_EOL),
|
||||
CONST_ (SCM_BOOL_F, SCM_BOOL_F))),
|
||||
SCM_BOOL_F)
|
||||
: convert_assignment (REF (exp, LAMBDA, BODY), assigned));
|
||||
|
||||
case SCM_EXPANDED_LAMBDA_CASE:
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue