diff options
author | Ludovic Courtes <ludovic.courtes@laas.fr> | 2005-06-25 06:57:20 +0000 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2008-04-25 19:09:30 +0200 |
commit | a52b2d3d5547564c10cfce9ae9993ee0a9ae698e (patch) | |
tree | 627a219a1f1d8d501113ec389a311bd67a47a053 /src | |
parent | 0b5f0e49a8b172544e2a7cb564c01c2ec439aaec (diff) | |
download | guile-a52b2d3d5547564c10cfce9ae9993ee0a9ae698e.tar.gz |
Started documenting the compiler.
* doc/guile-vm.texi: Documented the compiler (node `The Compiler').
Removed a number of things that might have been relevant to Guile-VM 0.0.
* module/system/il/compile.scm (optimize): Commented out the case
using `<ghil-inst?>'.
* src/vm_engine.c (vm_run)[objects_handle]: New variable.
Before leaving the function, release OBJECTS_HANDLE.
* src/vm_engine.h (CACHE_PROGRAM): Use `scm_vector_writable_elements'
instead of `scm_vector_elements'; don't release the handle right away.
* src/vm_loader.c (load-program): New commented out piece of code
dealing with simple vectors.
* src/vm_system.c (object-ref): Added the type of OBJNUM.
git-archimport-id: lcourtes@laas.fr--2005-mobile/guile-vm--mobile--0.6--patch-3
Diffstat (limited to 'src')
-rw-r--r-- | src/vm_engine.c | 4 | ||||
-rw-r--r-- | src/vm_engine.h | 24 | ||||
-rw-r--r-- | src/vm_loader.c | 6 | ||||
-rw-r--r-- | src/vm_system.c | 2 |
4 files changed, 25 insertions, 11 deletions
diff --git a/src/vm_engine.c b/src/vm_engine.c index 8c93c1de0..aa45971bf 100644 --- a/src/vm_engine.c +++ b/src/vm_engine.c @@ -58,6 +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 */ SCM *stack_base = vp->stack_base; /* stack base address */ SCM *stack_limit = vp->stack_limit; /* stack limit address */ @@ -178,6 +179,9 @@ vm_run (SCM vm, SCM program, SCM args) vm_error: SYNC_ALL (); + if (objects) + scm_array_handle_release (&objects_handle); + vp->last_frame = vm_heapify_frames (vm); scm_ithrow (sym_vm_error, SCM_LIST3 (sym_vm_run, err_msg, err_args), 1); } diff --git a/src/vm_engine.h b/src/vm_engine.h index ac12caabe..02b719375 100644 --- a/src/vm_engine.h +++ b/src/vm_engine.h @@ -134,16 +134,20 @@ /* Get a local copy of the program's "object table" (i.e. the vector of external bindings that are referenced by the program), initialized by `load-program'. */ -#define CACHE_PROGRAM() \ -{ \ - ssize_t _vincr; \ - scm_t_array_handle _vhandle; \ - \ - bp = SCM_PROGRAM_DATA (program); \ - /* Was: objects = SCM_VELTS (bp->objs); */ \ - objects = scm_vector_elements (bp->objs, &_vhandle, \ - &object_count, &_vincr); \ - scm_array_handle_release (&_vhandle); \ +/* XXX: We could instead use the "simple vector macros", thus not having to + call `scm_vector_writable_elements ()' and the likes. */ +#define CACHE_PROGRAM() \ +{ \ + ssize_t _vincr; \ + \ + bp = SCM_PROGRAM_DATA (program); \ + /* Was: objects = SCM_VELTS (bp->objs); */ \ + \ + if (objects) \ + scm_array_handle_release (&objects_handle); \ + \ + objects = scm_vector_writable_elements (bp->objs, &objects_handle, \ + &object_count, &_vincr); \ } #define SYNC_BEFORE_GC() \ diff --git a/src/vm_loader.c b/src/vm_loader.c index 59aae86a2..e8eaec122 100644 --- a/src/vm_loader.c +++ b/src/vm_loader.c @@ -132,6 +132,12 @@ VM_DEFINE_LOADER (load_program, "load-program") /* init object table */ if (scm_is_vector (x)) { +#if 0 + if (scm_is_simple_vector (x)) + printf ("is_simple_vector!\n"); + else + printf ("NOT is_simple_vector\n"); +#endif p->objs = x; POP (x); } diff --git a/src/vm_system.c b/src/vm_system.c index 5eb125b88..e220b613c 100644 --- a/src/vm_system.c +++ b/src/vm_system.c @@ -208,7 +208,7 @@ VM_DEFINE_INSTRUCTION (list_break, "list-break", 0, 0, 0) VM_DEFINE_INSTRUCTION (object_ref, "object-ref", 1, 0, 1) { - register objnum = FETCH (); + register unsigned objnum = FETCH (); CHECK_OBJECT (objnum); PUSH (OBJECT_REF (objnum)); NEXT; |