diff options
author | Michael Gran <spk121@yahoo.com> | 2010-10-14 18:27:41 -0700 |
---|---|---|
committer | Michael Gran <spk121@yahoo.com> | 2010-10-14 18:27:41 -0700 |
commit | 45dc6b347d81a580bbcaefe25007cbbe8bb9841d (patch) | |
tree | 30d395a1c4fb84b2e2e1ab1acd6bc81ef65cdc3d /libguile/vm-i-system.c | |
parent | 4ad7f6cf9ffeb4b3499898755bf36c1091b3da7e (diff) | |
download | guile-45dc6b347d81a580bbcaefe25007cbbe8bb9841d.tar.gz |
Unresolved var errors don't work for top-level vars
* libguile/vm-i-system.c (toplevel_ref, long_toplevel_ref): modified
Diffstat (limited to 'libguile/vm-i-system.c')
-rw-r--r-- | libguile/vm-i-system.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c index 62b5e1a9c..bc0c9620d 100644 --- a/libguile/vm-i-system.c +++ b/libguile/vm-i-system.c @@ -330,19 +330,20 @@ VM_DEFINE_INSTRUCTION (26, variable_bound, "variable-bound?", 0, 1, 1) VM_DEFINE_INSTRUCTION (27, toplevel_ref, "toplevel-ref", 1, 0, 1) { unsigned objnum = FETCH (); - SCM what; + SCM what, resolved; CHECK_OBJECT (objnum); what = OBJECT_REF (objnum); - if (!SCM_VARIABLEP (what)) + if (!SCM_VARIABLEP (what)) { SYNC_REGISTER (); - what = resolve_variable (what, scm_program_module (program)); - if (!VARIABLE_BOUNDP (what)) + resolved = resolve_variable (what, scm_program_module (program)); + if (!VARIABLE_BOUNDP (resolved)) { finish_args = scm_list_1 (what); goto vm_error_unbound; } + what = resolved; OBJECT_SET (objnum, what); } @@ -352,22 +353,23 @@ VM_DEFINE_INSTRUCTION (27, toplevel_ref, "toplevel-ref", 1, 0, 1) VM_DEFINE_INSTRUCTION (28, long_toplevel_ref, "long-toplevel-ref", 2, 0, 1) { - SCM what; + SCM what, resolved; unsigned int objnum = FETCH (); objnum <<= 8; objnum += FETCH (); CHECK_OBJECT (objnum); what = OBJECT_REF (objnum); - if (!SCM_VARIABLEP (what)) + if (!SCM_VARIABLEP (what)) { SYNC_REGISTER (); - what = resolve_variable (what, scm_program_module (program)); - if (!VARIABLE_BOUNDP (what)) + resolved = resolve_variable (what, scm_program_module (program)); + if (!VARIABLE_BOUNDP (resolved)) { finish_args = scm_list_1 (what); goto vm_error_unbound; } + what = resolved; OBJECT_SET (objnum, what); } |