diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/frames.c | 5 | ||||
-rw-r--r-- | src/frames.h | 25 | ||||
-rw-r--r-- | src/objcodes.c | 4 | ||||
-rw-r--r-- | src/programs.c | 2 | ||||
-rw-r--r-- | src/vm.c | 2 | ||||
-rw-r--r-- | src/vm_loader.c | 12 |
6 files changed, 30 insertions, 20 deletions
diff --git a/src/frames.c b/src/frames.c index 80c2147af..ab6cb0a61 100644 --- a/src/frames.c +++ b/src/frames.c @@ -140,8 +140,9 @@ SCM_DEFINE (scm_frame_return_address, "frame-return-address", 1, 0, 0, #define FUNC_NAME s_scm_frame_return_address { SCM_VALIDATE_HEAP_FRAME (1, frame); - return scm_from_ulong ((unsigned long) (SCM_FRAME_RETURN_ADDRESS - (SCM_HEAP_FRAME_POINTER (frame)))); + return scm_from_ulong ((unsigned long) + (SCM_FRAME_RETURN_ADDRESS + (SCM_HEAP_FRAME_POINTER (frame)))); } #undef FUNC_NAME diff --git a/src/frames.h b/src/frames.h index 4647b403d..a2e04c121 100644 --- a/src/frames.h +++ b/src/frames.h @@ -51,21 +51,26 @@ * VM frames */ -/* +/* VM Frame Layout + --------------- + | | <- fp + bp->nargs + bp->nlocs + 4 +------------------+ = SCM_FRAME_UPPER_ADDRESS (fp) | Return address | | Dynamic link | | Heap link | | External link | <- fp + bp->nargs + bp->nlocs - | Local varialbe 1 | = SCM_FRAME_DATA_ADDRESS (fp) + | Local variable 1 | = SCM_FRAME_DATA_ADDRESS (fp) | Local variable 0 | <- fp + bp->nargs | Argument 1 | | Argument 0 | <- fp | Program | <- fp - 1 +------------------+ = SCM_FRAME_LOWER_ADDRESS (fp) | | -*/ + + As can be inferred from this drawing, it is assumed that + `sizeof (SCM *) == sizeof (SCM)', since pointers (the `link' parts) are + assumed to be as long as SCM objects. */ #define SCM_FRAME_DATA_ADDRESS(fp) \ (fp + SCM_PROGRAM_DATA (SCM_FRAME_PROGRAM (fp))->nargs \ @@ -76,10 +81,14 @@ #define SCM_FRAME_BYTE_CAST(x) ((scm_byte_t *) SCM_UNPACK (x)) #define SCM_FRAME_STACK_CAST(x) ((SCM *) SCM_UNPACK (x)) -#define SCM_FRAME_RETURN_ADDRESS(fp) SCM_FRAME_BYTE_CAST (SCM_FRAME_DATA_ADDRESS (fp)[3]) -#define SCM_FRAME_DYNAMIC_LINK(fp) SCM_FRAME_STACK_CAST (SCM_FRAME_DATA_ADDRESS (fp)[2]) -#define SCM_FRAME_HEAP_LINK(fp) SCM_FRAME_DATA_ADDRESS (fp)[1] -#define SCM_FRAME_EXTERNAL_LINK(fp) SCM_FRAME_DATA_ADDRESS (fp)[0] +#define SCM_FRAME_RETURN_ADDRESS(fp) \ + (SCM_FRAME_BYTE_CAST (SCM_FRAME_DATA_ADDRESS (fp)[3])) +#define SCM_FRAME_DYNAMIC_LINK(fp) \ + (SCM_FRAME_STACK_CAST (SCM_FRAME_DATA_ADDRESS (fp)[2])) +#define SCM_FRAME_SET_DYNAMIC_LINK(fp, dl) \ + ((SCM_FRAME_DATA_ADDRESS (fp)[2])) = (SCM)(dl); +#define SCM_FRAME_HEAP_LINK(fp) (SCM_FRAME_DATA_ADDRESS (fp)[1]) +#define SCM_FRAME_EXTERNAL_LINK(fp) (SCM_FRAME_DATA_ADDRESS (fp)[0]) #define SCM_FRAME_VARIABLE(fp,i) fp[i] #define SCM_FRAME_PROGRAM(fp) fp[-1] @@ -92,7 +101,7 @@ extern scm_t_bits scm_tc16_heap_frame; #define SCM_HEAP_FRAME_P(x) SCM_SMOB_PREDICATE (scm_tc16_heap_frame, x) #define SCM_HEAP_FRAME_DATA(f) ((SCM *) SCM_SMOB_DATA (f)) -#define SCM_HEAP_FRAME_SELF(f) (SCM_HEAP_FRAME_DATA (f)[0]) +#define SCM_HEAP_FRAME_SELF(f) (SCM_HEAP_FRAME_DATA (f) + 0) #define SCM_HEAP_FRAME_POINTER(f) (SCM_HEAP_FRAME_DATA (f) + 2) #define SCM_VALIDATE_HEAP_FRAME(p,x) SCM_MAKE_VALIDATE (p, x, HEAP_FRAME_P) diff --git a/src/objcodes.c b/src/objcodes.c index e1a3b17e8..b97e851c4 100644 --- a/src/objcodes.c +++ b/src/objcodes.c @@ -183,7 +183,7 @@ SCM_DEFINE (scm_bytecode_to_objcode, "bytecode->objcode", 3, 0, 0, ssize_t increment; scm_t_array_handle handle; char *base; - const char *c_bytecode; + const scm_t_uint8 *c_bytecode; SCM objcode; if (scm_u8vector_p (bytecode) != SCM_BOOL_T) @@ -235,7 +235,7 @@ SCM_DEFINE (scm_objcode_to_u8vector, "objcode->u8vector", 1, 0, 0, "") #define FUNC_NAME s_scm_objcode_to_u8vector { - char *u8vector; + scm_t_uint8 *u8vector; size_t size; SCM_VALIDATE_OBJCODE (1, objcode); diff --git a/src/programs.c b/src/programs.c index 50848a774..6a5c4f390 100644 --- a/src/programs.c +++ b/src/programs.c @@ -205,7 +205,7 @@ SCM_DEFINE (scm_program_bytecode, "program-bytecode", 1, 0, 0, #define FUNC_NAME s_scm_program_bytecode { size_t size; - char *c_bytecode; + scm_t_uint8 *c_bytecode; SCM_VALIDATE_PROGRAM (1, program); @@ -175,7 +175,7 @@ vm_heapify_frames_1 (struct scm_vm *vp, SCM *fp, SCM *sp, SCM **destp) frame = scm_c_make_heap_frame (fp); fp = SCM_HEAP_FRAME_POINTER (frame); SCM_FRAME_HEAP_LINK (fp) = link; - SCM_FRAME_DYNAMIC_LINK (fp) = SCM_HEAP_FRAME_POINTER (link); + SCM_FRAME_SET_DYNAMIC_LINK (fp, SCM_HEAP_FRAME_POINTER (link)); } /* Move stack data */ diff --git a/src/vm_loader.c b/src/vm_loader.c index e8eaec122..0c614914b 100644 --- a/src/vm_loader.c +++ b/src/vm_loader.c @@ -63,7 +63,7 @@ VM_DEFINE_LOADER (load_number, "load-number") size_t len; FETCH_LENGTH (len); - PUSH (scm_string_to_number (scm_from_locale_stringn (ip, len), + PUSH (scm_string_to_number (scm_from_locale_stringn ((char *)ip, len), SCM_UNSPECIFIED /* radix = 10 */)); /* Was: scm_istring2number (ip, len, 10)); */ ip += len; @@ -74,7 +74,7 @@ VM_DEFINE_LOADER (load_string, "load-string") { size_t len; FETCH_LENGTH (len); - PUSH (scm_from_locale_stringn (ip, len)); + PUSH (scm_from_locale_stringn ((char *)ip, len)); /* Was: scm_makfromstr (ip, len, 0) */ ip += len; NEXT; @@ -84,7 +84,7 @@ VM_DEFINE_LOADER (load_symbol, "load-symbol") { size_t len; FETCH_LENGTH (len); - PUSH (scm_from_locale_symboln (ip, len)); + PUSH (scm_from_locale_symboln ((char *)ip, len)); ip += len; NEXT; } @@ -94,7 +94,7 @@ VM_DEFINE_LOADER (load_keyword, "load-keyword") SCM sym; size_t len; FETCH_LENGTH (len); - sym = scm_from_locale_symboln (ip, len); + sym = scm_from_locale_symboln ((char *)ip, len); PUSH (scm_make_keyword_from_dash_symbol (sym)); ip += len; NEXT; @@ -104,7 +104,7 @@ VM_DEFINE_LOADER (load_module, "load-module") { size_t len; FETCH_LENGTH (len); - PUSH (scm_c_lookup_env (scm_from_locale_symboln (ip, len))); + PUSH (scm_c_lookup_env (scm_from_locale_symboln ((char *)ip, len))); ip += len; NEXT; } @@ -184,7 +184,7 @@ VM_DEFINE_LOADER (link, "link") size_t len; FETCH_LENGTH (len); - sym = scm_from_locale_symboln (ip, len); + sym = scm_from_locale_symboln ((char *)ip, len); ip += len; #if 0 |