diff options
author | Andy Wingo <wingo@pobox.com> | 2009-01-17 16:42:53 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-01-17 16:42:53 +0100 |
commit | 2fda0242214e1b650b8fd3eb084e1c930a8399a5 (patch) | |
tree | cb0e118575713554b98b11e4d15c91a0605f6941 /libguile/vm-engine.c | |
parent | a72317988fa29377928d30c7e52b5acf63b6943a (diff) | |
download | guile-2fda0242214e1b650b8fd3eb084e1c930a8399a5.tar.gz |
move module and meta inside programs' object tables
* libguile/programs.h (struct scm_program): Remove the module and meta
fields.
* libguile/programs.c (scm_c_make_program): Add a new argument, `objs'.
If it's a vector, we'll look for the module and the metadata in there,
instead of having them in the scm_program structure.
(scm_c_make_closure, program_mark, scm_program_meta)
(scm_c_program_source, scm_program_module): Adapt to the new program
representation.
* libguile/objcodes.c (scm_objcode_to_program): Pass #f as the object
table when making the program.
* libguile/vm-engine.h (CACHE_PROGRAM):
* libguile/vm-engine.c (vm_run): Rework to use the simple vector API for
getting the current object table. Call the helper,
vm_make_boot_program, to make the boot program.
* libguile/vm-i-loader.c (load-program): Set the current module and the
meta in the object vector, which we pass to scm_c_make_program.
* libguile/vm-i-system.c (toplevel-ref, toplevel-set): Adapt to the new
program representation.
* module/language/glil/compile-objcode.scm (codegen): Clarify.
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r-- | libguile/vm-engine.c | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index fcafd5151..2f058c5b8 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -58,8 +58,7 @@ vm_run (SCM vm, SCM program, SCM args) struct scm_program *bp = NULL; /* program base pointer */ SCM external = SCM_EOL; /* external environment */ SCM *objects = NULL; /* constant objects */ - scm_t_array_handle objects_handle; /* handle of the OBJECTS array */ - size_t object_count; /* length of OBJECTS */ + size_t object_count = 0; /* length of OBJECTS */ SCM *stack_base = vp->stack_base; /* stack base address */ SCM *stack_limit = vp->stack_limit; /* stack limit address */ @@ -105,9 +104,7 @@ vm_run (SCM vm, SCM program, SCM args) SCM prog = program; /* Boot program */ - scm_byte_t bytes[6] = {scm_op_mv_call, 0, 0, 1, scm_op_make_int8_1, scm_op_halt}; - bytes[1] = scm_ilength (args); /* FIXME: argument overflow */ - program = scm_c_make_program (bytes, 6, SCM_BOOL_F); + program = vm_make_boot_program (scm_ilength (args)); /* Initial frame */ CACHE_REGISTER (); @@ -152,8 +149,6 @@ vm_run (SCM vm, SCM program, SCM args) vm_error_wrong_num_args: /* nargs and program are valid */ SYNC_ALL (); - if (objects) - scm_array_handle_release (&objects_handle); scm_wrong_num_args (program); /* shouldn't get here */ goto vm_error; @@ -222,8 +217,6 @@ vm_run (SCM vm, SCM program, SCM args) vm_error: SYNC_ALL (); - if (objects) - scm_array_handle_release (&objects_handle); scm_ithrow (sym_vm_error, SCM_LIST3 (sym_vm_run, err_msg, err_args), 1); } |