diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/programs.c | 8 | ||||
-rw-r--r-- | src/vm.c | 4 | ||||
-rw-r--r-- | src/vm_engine.c | 1 | ||||
-rw-r--r-- | src/vm_engine.h | 24 | ||||
-rw-r--r-- | src/vm_loader.c | 6 | ||||
-rw-r--r-- | src/vm_system.c | 28 |
6 files changed, 42 insertions, 29 deletions
diff --git a/src/programs.c b/src/programs.c index 111f87f66..d45cd96dd 100644 --- a/src/programs.c +++ b/src/programs.c @@ -149,10 +149,10 @@ SCM_DEFINE (scm_program_arity, "program-arity", 1, 0, 0, SCM_VALIDATE_PROGRAM (1, program); p = SCM_PROGRAM_DATA (program); - return SCM_LIST4 (SCM_MAKINUM (p->nargs), - SCM_MAKINUM (p->nrest), - SCM_MAKINUM (p->nlocs), - SCM_MAKINUM (p->nexts)); + return SCM_LIST4 (scm_from_uchar (p->nargs), + scm_from_uchar (p->nrest), + scm_from_uchar (p->nlocs), + scm_from_uchar (p->nexts)); } #undef FUNC_NAME @@ -369,7 +369,7 @@ SCM_DEFINE (scm_vm_fp, "vm:fp", 1, 0, 0, SCM_VALIDATE_VM (1, vm); \ vp = SCM_VM_DATA (vm); \ if (SCM_FALSEP (vp->hooks[n])) \ - vp->hooks[n] = scm_make_hook (SCM_MAKINUM (1)); \ + vp->hooks[n] = scm_make_hook (SCM_I_MAKINUM (1)); \ return vp->hooks[n]; \ } @@ -528,7 +528,7 @@ SCM_DEFINE (scm_vm_fetch_code, "vm-fetch-code", 1, 0, 0, list = SCM_LIST1 (scm_str2symbol (p->name)); for (i = 1; i <= p->len; i++) - list = scm_cons (SCM_MAKINUM (ip[i]), list); + list = scm_cons (scm_from_uint8 (ip[i]), list); return scm_reverse_x (list, SCM_EOL); } #undef FUNC_NAME diff --git a/src/vm_engine.c b/src/vm_engine.c index c275cfb02..21b8468ef 100644 --- a/src/vm_engine.c +++ b/src/vm_engine.c @@ -43,6 +43,7 @@ #include "vm_engine.h" + static SCM vm_run (SCM vm, SCM program, SCM args) #define FUNC_NAME "vm-engine" diff --git a/src/vm_engine.h b/src/vm_engine.h index c4ce6b40f..745b68972 100644 --- a/src/vm_engine.h +++ b/src/vm_engine.h @@ -130,10 +130,20 @@ vp->fp = fp; \ } -#define CACHE_PROGRAM() \ -{ \ - bp = SCM_PROGRAM_DATA (program); \ - objects = SCM_VELTS (bp->objs); \ +/* 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() \ +{ \ + size_t _vsize; \ + 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, \ + &_vsize, &_vincr); \ + scm_array_handle_release (&_vhandle); \ } #define SYNC_BEFORE_GC() \ @@ -208,12 +218,8 @@ #define CONS(x,y,z) \ { \ - SCM cell; \ SYNC_BEFORE_GC (); \ - SCM_NEWCELL (cell); \ - SCM_SET_CELL_OBJECT_0 (cell, y); \ - SCM_SET_CELL_OBJECT_1 (cell, z); \ - x = cell; \ + x = scm_cons (y, z); \ } #define POP_LIST(n) \ diff --git a/src/vm_loader.c b/src/vm_loader.c index fb30b54ee..6516b36c5 100644 --- a/src/vm_loader.c +++ b/src/vm_loader.c @@ -130,7 +130,7 @@ VM_DEFINE_LOADER (load_program, "load-program") } /* init object table */ - if (SCM_VECTORP (x)) + if (scm_is_vector (x)) { p->objs = x; POP (x); @@ -178,7 +178,7 @@ VM_DEFINE_LOADER (link, "link") size_t len; FETCH_LENGTH (len); - sym = scm_mem2symbol (ip, len); + sym = scm_from_locale_symboln (ip, len); ip += len; #if 0 @@ -193,7 +193,7 @@ VM_DEFINE_LOADER (link, "link") /* Create a new variable if not defined yet */ var = scm_eval_closure_lookup (scm_standard_eval_closure (mod), sym, SCM_BOOL_T); - PUSH (scm_variable_ref (var)); + PUSH (var); /* Was: SCM_VARVCELL (var)); */ NEXT; } diff --git a/src/vm_system.c b/src/vm_system.c index 894c74643..9b4522747 100644 --- a/src/vm_system.c +++ b/src/vm_system.c @@ -119,19 +119,19 @@ VM_DEFINE_INSTRUCTION (make_eol, "make-eol", 0, 0, 1) VM_DEFINE_INSTRUCTION (make_int8, "make-int8", 1, 0, 1) { - PUSH (SCM_MAKINUM ((signed char) FETCH ())); + PUSH (scm_from_schar ((signed char) FETCH ())); NEXT; } VM_DEFINE_INSTRUCTION (make_int8_0, "make-int8:0", 0, 0, 1) { - PUSH (SCM_MAKINUM (0)); + PUSH (SCM_INUM0); NEXT; } VM_DEFINE_INSTRUCTION (make_int8_1, "make-int8:1", 0, 0, 1) { - PUSH (SCM_MAKINUM (1)); + PUSH (SCM_I_MAKINUM (1)); NEXT; } @@ -139,7 +139,7 @@ VM_DEFINE_INSTRUCTION (make_int16, "make-int16", 2, 0, 1) { int h = FETCH (); int l = FETCH (); - PUSH (SCM_MAKINUM ((signed short) (h << 8) + l)); + PUSH (scm_from_short ((signed short) (h << 8) + l)); NEXT; } @@ -197,8 +197,8 @@ VM_DEFINE_INSTRUCTION (list_break, "list-break", 0, 0, 0) #define LOCAL_REF(i) SCM_FRAME_VARIABLE (fp, i) #define LOCAL_SET(i,o) SCM_FRAME_VARIABLE (fp, i) = o -#define VARIABLE_REF(v) SCM_CDR (v) -#define VARIABLE_SET(v,o) SCM_SETCDR (v, o) +/* #define VARIABLE_REF(v) SCM_CDR (v) */ +/* #define VARIABLE_SET(v,o) SCM_SETCDR (v, o) */ /* ref */ @@ -231,13 +231,19 @@ VM_DEFINE_INSTRUCTION (external_ref, "external-ref", 1, 0, 1) VM_DEFINE_INSTRUCTION (variable_ref, "variable-ref", 0, 0, 1) { SCM x = *sp; - SCM o = VARIABLE_REF (x); - if (SCM_UNBNDP (o)) + + if (SCM_FALSEP (scm_variable_bound_p (x))) { - err_args = SCM_LIST1 (SCM_CAR (x)); + err_args = SCM_LIST1 (x); + /* Was: err_args = SCM_LIST1 (SCM_CAR (x)); */ goto vm_error_unbound; } - *sp = o; + else + { + SCM o = scm_variable_ref (x); + *sp = o; + } + NEXT; } @@ -267,7 +273,7 @@ VM_DEFINE_INSTRUCTION (external_set, "external-set", 1, 1, 0) VM_DEFINE_INSTRUCTION (variable_set, "variable-set", 0, 1, 0) { - VARIABLE_SET (sp[0], sp[-1]); + scm_variable_set_x (sp[0], sp[-1]); scm_set_object_property_x (sp[-1], scm_sym_name, SCM_CAR (sp[0])); sp -= 2; NEXT; |