mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 13:00:26 +02:00
refactoring for toplevel-ref, toplevel-set, link-now
* libguile/vm-i-system.c (toplevel-ref, toplevel-set) * libguile/vm-i-loader.c (link-now): * libguile/vm.c (resolve_variable): Factor out common code to a static method. The compiler can still inline it, so it shouldn't have a significant performance effect. * libguile/vm-engine.c (vm_error_no_such_module): Remove now-unused label.
This commit is contained in:
parent
42193dac58
commit
b7393ea123
4 changed files with 40 additions and 98 deletions
|
@ -124,29 +124,7 @@ VM_DEFINE_INSTRUCTION (66, link_now, "link-now", 0, 1, 1)
|
|||
SCM what;
|
||||
POP (what);
|
||||
SYNC_REGISTER ();
|
||||
if (SCM_LIKELY (SCM_SYMBOLP (what)))
|
||||
{
|
||||
PUSH (scm_lookup (what)); /* might longjmp */
|
||||
}
|
||||
else
|
||||
{
|
||||
SCM mod;
|
||||
/* compilation of @ or @@
|
||||
`what' is a three-element list: (MODNAME SYM INTERFACE?)
|
||||
INTERFACE? is #t if we compiled @ or #f if we compiled @@
|
||||
*/
|
||||
mod = scm_resolve_module (SCM_CAR (what));
|
||||
if (scm_is_true (SCM_CADDR (what)))
|
||||
mod = scm_module_public_interface (mod);
|
||||
if (SCM_FALSEP (mod))
|
||||
{
|
||||
finish_args = scm_list_1 (SCM_CAR (what));
|
||||
goto vm_error_no_such_module;
|
||||
}
|
||||
/* might longjmp */
|
||||
PUSH (scm_module_lookup (mod, SCM_CADR (what)));
|
||||
}
|
||||
|
||||
PUSH (resolve_variable (what, scm_current_module ()));
|
||||
NEXT;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue