mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-03 13:20:26 +02:00
Unresolved var errors don't work for top-level vars
* libguile/vm-i-system.c (toplevel_ref, long_toplevel_ref): modified
This commit is contained in:
parent
4ad7f6cf9f
commit
45dc6b347d
1 changed files with 10 additions and 8 deletions
|
@ -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)
|
VM_DEFINE_INSTRUCTION (27, toplevel_ref, "toplevel-ref", 1, 0, 1)
|
||||||
{
|
{
|
||||||
unsigned objnum = FETCH ();
|
unsigned objnum = FETCH ();
|
||||||
SCM what;
|
SCM what, resolved;
|
||||||
CHECK_OBJECT (objnum);
|
CHECK_OBJECT (objnum);
|
||||||
what = OBJECT_REF (objnum);
|
what = OBJECT_REF (objnum);
|
||||||
|
|
||||||
if (!SCM_VARIABLEP (what))
|
if (!SCM_VARIABLEP (what))
|
||||||
{
|
{
|
||||||
SYNC_REGISTER ();
|
SYNC_REGISTER ();
|
||||||
what = resolve_variable (what, scm_program_module (program));
|
resolved = resolve_variable (what, scm_program_module (program));
|
||||||
if (!VARIABLE_BOUNDP (what))
|
if (!VARIABLE_BOUNDP (resolved))
|
||||||
{
|
{
|
||||||
finish_args = scm_list_1 (what);
|
finish_args = scm_list_1 (what);
|
||||||
goto vm_error_unbound;
|
goto vm_error_unbound;
|
||||||
}
|
}
|
||||||
|
what = resolved;
|
||||||
OBJECT_SET (objnum, what);
|
OBJECT_SET (objnum, what);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -352,7 +353,7 @@ VM_DEFINE_INSTRUCTION (27, toplevel_ref, "toplevel-ref", 1, 0, 1)
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (28, long_toplevel_ref, "long-toplevel-ref", 2, 0, 1)
|
VM_DEFINE_INSTRUCTION (28, long_toplevel_ref, "long-toplevel-ref", 2, 0, 1)
|
||||||
{
|
{
|
||||||
SCM what;
|
SCM what, resolved;
|
||||||
unsigned int objnum = FETCH ();
|
unsigned int objnum = FETCH ();
|
||||||
objnum <<= 8;
|
objnum <<= 8;
|
||||||
objnum += FETCH ();
|
objnum += FETCH ();
|
||||||
|
@ -362,12 +363,13 @@ VM_DEFINE_INSTRUCTION (28, long_toplevel_ref, "long-toplevel-ref", 2, 0, 1)
|
||||||
if (!SCM_VARIABLEP (what))
|
if (!SCM_VARIABLEP (what))
|
||||||
{
|
{
|
||||||
SYNC_REGISTER ();
|
SYNC_REGISTER ();
|
||||||
what = resolve_variable (what, scm_program_module (program));
|
resolved = resolve_variable (what, scm_program_module (program));
|
||||||
if (!VARIABLE_BOUNDP (what))
|
if (!VARIABLE_BOUNDP (resolved))
|
||||||
{
|
{
|
||||||
finish_args = scm_list_1 (what);
|
finish_args = scm_list_1 (what);
|
||||||
goto vm_error_unbound;
|
goto vm_error_unbound;
|
||||||
}
|
}
|
||||||
|
what = resolved;
|
||||||
OBJECT_SET (objnum, what);
|
OBJECT_SET (objnum, what);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue