summaryrefslogtreecommitdiff
path: root/libguile/vm-i-system.c
diff options
context:
space:
mode:
authorMichael Gran <spk121@yahoo.com>2010-10-14 18:27:41 -0700
committerMichael Gran <spk121@yahoo.com>2010-10-14 18:27:41 -0700
commit45dc6b347d81a580bbcaefe25007cbbe8bb9841d (patch)
tree30d395a1c4fb84b2e2e1ab1acd6bc81ef65cdc3d /libguile/vm-i-system.c
parent4ad7f6cf9ffeb4b3499898755bf36c1091b3da7e (diff)
downloadguile-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.c18
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);
}