From 2ec258000d48be0fc601e8b754c141de1d0af3df Mon Sep 17 00:00:00 2001 From: "Guillermo J. Rozas" Date: Mon, 5 Oct 1987 18:37:10 +0000 Subject: [PATCH] Change variable caches so assignments and references go through different caches. This allows uuo links to be turned on by default. --- v7/src/microcode/debug.c | 57 +++++++++----- v7/src/microcode/errors.h | 6 +- v7/src/microcode/fhooks.c | 11 +-- v7/src/microcode/gccode.h | 5 +- v7/src/microcode/gctype.c | 6 +- v7/src/microcode/interp.c | 54 ++++++------- v7/src/microcode/lookup.h | 12 ++- v7/src/microcode/object.h | 3 +- v7/src/microcode/ppband.c | 5 +- v7/src/microcode/returns.h | 155 +++++++++++++++++++------------------ v7/src/microcode/sdata.h | 29 ++++--- v7/src/microcode/storage.c | 17 ++-- v7/src/microcode/trap.h | 16 +++- v7/src/microcode/types.h | 7 +- v7/src/microcode/version.h | 4 +- v8/src/microcode/gctype.c | 6 +- v8/src/microcode/interp.c | 54 ++++++------- v8/src/microcode/lookup.h | 12 ++- v8/src/microcode/object.h | 3 +- v8/src/microcode/ppband.c | 5 +- v8/src/microcode/returns.h | 155 +++++++++++++++++++------------------ v8/src/microcode/trap.h | 16 +++- v8/src/microcode/types.h | 7 +- v8/src/microcode/version.h | 4 +- 24 files changed, 366 insertions(+), 283 deletions(-) diff --git a/v7/src/microcode/debug.c b/v7/src/microcode/debug.c index 27f455627..9618b3824 100644 --- a/v7/src/microcode/debug.c +++ b/v7/src/microcode/debug.c @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/debug.c,v 9.24 1987/04/16 02:20:42 jinx Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/debug.c,v 9.25 1987/10/05 18:31:47 jinx Rel $ * * Utilities to help with debugging */ @@ -40,18 +40,23 @@ MIT in each case. */ #include "trap.h" #include "lookup.h" -void Show_Pure() -{ Pointer *Obj_Address; +void +Show_Pure() +{ + Pointer *Obj_Address; long Pure_Size, Total_Size; Obj_Address = Constant_Space; while (true) - { if (Obj_Address > Free_Constant) - { printf("Past end of area.\n"); + { + if (Obj_Address > Free_Constant) + { + printf("Past end of area.\n"); return; } if (Obj_Address == Free_Constant) - { printf("Done.\n"); + { + printf("Done.\n"); return; } Pure_Size = Get_Integer(*Obj_Address); @@ -59,39 +64,52 @@ void Show_Pure() printf("0x%x: pure=0x%x, total=0x%x\n", Obj_Address, Pure_Size, Total_Size); if (Type_Code(*Obj_Address) != TC_MANIFEST_SPECIAL_NM_VECTOR) - { printf("Missing initial SNMV.\n"); + { + printf("Missing initial SNMV.\n"); return; } if (Type_Code(Obj_Address[1]) != PURE_PART) + { printf("Missing subsequent pure header.\n"); + } if (Type_Code(Obj_Address[Pure_Size-1]) != TC_MANIFEST_SPECIAL_NM_VECTOR) - { printf("Missing internal SNMV.\n"); + { + printf("Missing internal SNMV.\n"); return; } if (Type_Code(Obj_Address[Pure_Size]) != CONSTANT_PART) - { printf("Missing constant header.\n"); + { + printf("Missing constant header.\n"); return; } if (Get_Integer(Obj_Address[Pure_Size]) != Pure_Size) + { printf("Pure size mismatch 0x%x.\n", Get_Integer(Obj_Address[Pure_Size])); + } if (Type_Code(Obj_Address[Total_Size-1]) != TC_MANIFEST_SPECIAL_NM_VECTOR) - { printf("Missing ending SNMV.\n"); + { + printf("Missing ending SNMV.\n"); return; } if (Type_Code(Obj_Address[Total_Size]) != END_OF_BLOCK) - { printf("Missing ending header.\n"); + { + printf("Missing ending header.\n"); return; } if (Get_Integer(Obj_Address[Total_Size]) != Total_Size) + { printf("Total size mismatch 0x%x.\n", Get_Integer(Obj_Address[Total_Size])); + } Obj_Address += Total_Size+1; #ifdef FLOATING_ALIGNMENT while (*Obj_Address == Make_Non_Pointer(TC_MANIFEST_NM_VECTOR, 0)) + { Obj_Address += 1; + } #endif } } @@ -376,16 +394,19 @@ SPrint: /* Do_Printing, continued */ case TC_FUTURE: printf("[FUTURE"); break; - case TC_HUNK3: printf("[TRIPLE"); break; + case TC_HUNK3_A: printf("[TRIPLE_A"); break; + case TC_HUNK3_B: printf("[TRIPLE_B"); break; case TC_IN_PACKAGE: printf("[IN_PACKAGE"); break; + case TC_LAMBDA: - if (Detailed) printf("[LAMBDA ("); - Do_Printing( - Vector_Ref( - Vector_Ref(Expr, LAMBDA_FORMALS), - 1), false); - if (Detailed) printf(") 0x%x]", Temp_Address); + if (Detailed) + printf("[LAMBDA ("); + Do_Printing(Vector_Ref(Vector_Ref(Expr, LAMBDA_FORMALS), 1), + false); + if (Detailed) + printf(") 0x%x]", Temp_Address); return; + case TC_LEXPR: printf("[LEXPR"); break; case TC_MANIFEST_NM_VECTOR: printf("[MANIFEST_NM_VECTOR"); break; case TC_MANIFEST_SPECIAL_NM_VECTOR: diff --git a/v7/src/microcode/errors.h b/v7/src/microcode/errors.h index 611b7bacd..dcc5ca52f 100644 --- a/v7/src/microcode/errors.h +++ b/v7/src/microcode/errors.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/errors.h,v 9.24 1987/04/03 00:11:24 jinx Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/errors.h,v 9.25 1987/10/05 18:32:03 jinx Rel $ * * Error and termination code declarations. This must correspond * to UTABMD.SCM @@ -98,8 +98,10 @@ MIT in each case. */ #define ERR_COMPILED_CODE_ERROR 0x31 #define ERR_FLOATING_OVERFLOW 0x32 #define ERR_UNIMPLEMENTED_PRIMITIVE 0x33 +#define ERR_ILLEGAL_REFERENCE_TRAP 0x34 +#define ERR_BROKEN_VARIABLE_CACHE 0x35 -#define MAX_ERROR 0x33 +#define MAX_ERROR 0x35 /* Termination codes: the interpreter halts on these */ diff --git a/v7/src/microcode/fhooks.c b/v7/src/microcode/fhooks.c index 7ed859f97..09a6a540b 100644 --- a/v7/src/microcode/fhooks.c +++ b/v7/src/microcode/fhooks.c @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/fhooks.c,v 9.24 1987/06/18 21:15:25 jinx Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/fhooks.c,v 9.25 1987/10/05 18:32:13 jinx Rel $ * * This file contains hooks and handles for the new fluid bindings * scheme for multiprocessors. @@ -126,11 +126,8 @@ Pointer case TRAP_UNASSIGNED: return cell; - case TRAP_NOP: - Primitive_Error(ERR_BAD_FRAME); - default: - Primitive_Error(ERR_BROKEN_COMPILED_VARIABLE); + Primitive_Error(ERR_ILLEGAL_REFERENCE_TRAP); } } @@ -158,7 +155,6 @@ new_fluid_binding_restart: get_trap_kind(trap_kind, trap); switch(trap_kind) { - case TRAP_NOP: case TRAP_DANGEROUS: Vector_Set(trap, TRAP_TAG, @@ -188,11 +184,12 @@ new_fluid_binding_restart: case TRAP_COMPILER_CACHED_DANGEROUS: cell = Nth_Vector_Loc(Fast_Vector_Ref(*cell, TRAP_EXTRA), TRAP_EXTENSION_CELL); + update_lock(set_serializer, cell); goto new_fluid_binding_restart; default: remove_lock(set_serializer); - Primitive_Error(ERR_BROKEN_COMPILED_VARIABLE); + Primitive_Error(ERR_ILLEGAL_REFERENCE_TRAP); } } diff --git a/v7/src/microcode/gccode.h b/v7/src/microcode/gccode.h index 00db3b4b6..d95a29a85 100644 --- a/v7/src/microcode/gccode.h +++ b/v7/src/microcode/gccode.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/gccode.h,v 9.28 1987/09/21 21:56:03 jinx Exp $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/gccode.h,v 9.29 1987/10/05 18:32:24 jinx Exp $ * * This file contains the macros for use in code which does GC-like * loops over memory. It is only included in a few files, unlike @@ -115,7 +115,8 @@ MIT in each case. */ #define case_Triple \ case TC_COMBINATION_2: \ case TC_EXTENDED_LAMBDA: \ - case TC_HUNK3: \ + case TC_HUNK3_A: \ + case TC_HUNK3_B: \ case TC_CONDITIONAL: \ case TC_SEQUENCE_3: \ case TC_PCOMB2 diff --git a/v7/src/microcode/gctype.c b/v7/src/microcode/gctype.c index 9b0e9bbfd..fc73eeb9d 100644 --- a/v7/src/microcode/gctype.c +++ b/v7/src/microcode/gctype.c @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/gctype.c,v 9.23 1987/06/05 20:56:37 cph Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/gctype.c,v 9.24 1987/10/05 18:32:37 jinx Exp $ * * This file contains the table which maps between Types and * GC Types. @@ -74,11 +74,11 @@ int GC_Type_Map[MAX_SAFE_TYPE + 1] = { GC_Pair, /* TC_INTERNED_SYMBOL */ GC_Vector, /* TC_CHARACTER_STRING,TC_VECTOR_8B */ GC_Pair, /* TC_ACCESS */ - GC_Undefined, /* 0x20 */ + GC_Triple, /* TC_HUNK3_A */ GC_Pair, /* TC_DEFINITION */ GC_Special, /* TC_BROKEN_HEART */ GC_Pair, /* TC_ASSIGNMENT */ - GC_Triple, /* TC_HUNK3 */ + GC_Triple, /* TC_HUNK3_B */ GC_Pair, /* TC_IN_PACKAGE */ /* GC_Type_Map continues on next page */ diff --git a/v7/src/microcode/interp.c b/v7/src/microcode/interp.c index 7b5747ac5..b936b1880 100644 --- a/v7/src/microcode/interp.c +++ b/v7/src/microcode/interp.c @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/interp.c,v 9.31 1987/07/15 22:08:05 cph Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/interp.c,v 9.32 1987/10/05 18:32:48 jinx Exp $ * * This file contains the heart of the Scheme Scode * interpreter @@ -411,7 +411,8 @@ Do_Expression: Eval_Non_Trapping: Eval_Ucode_Hook(); switch (Type_Code(Fetch_Expression())) - { case TC_BIG_FIXNUM: /* The self evaluating items */ + { + case TC_BIG_FIXNUM: /* The self evaluating items */ case TC_BIG_FLONUM: case TC_CHARACTER_STRING: case TC_CHARACTER: @@ -422,7 +423,8 @@ Eval_Non_Trapping: case TC_ENVIRONMENT: case TC_EXTENDED_PROCEDURE: case TC_FIXNUM: - case TC_HUNK3: + case TC_HUNK3_A: + case TC_HUNK3_B: case TC_INTERNED_SYMBOL: case TC_LIST: case TC_NON_MARKED_VECTOR: @@ -700,11 +702,6 @@ lookup_end_restart: /* Interpret(), continued */ - case TRAP_NOP: - Val = Vector_Ref(Val, TRAP_EXTRA); - Set_Time_Zone(Zone_Working); - goto Pop_Return; - case TRAP_UNBOUND: temp = ERR_UNBOUND_VARIABLE; break; @@ -714,7 +711,7 @@ lookup_end_restart: break; default: - temp = ERR_BROKEN_COMPILED_VARIABLE; + temp = ERR_ILLEGAL_REFERENCE_TRAP; break; } @@ -871,20 +868,23 @@ Pop_Return: define_compiler_restart (RC_COMP_SAFE_REFERENCE_RESTART, comp_safe_reference_restart) - define_compiler_restart (RC_COMP_CACHE_VARIABLE_RESTART, - comp_cache_variable_restart) + define_compiler_restart (RC_COMP_CACHE_LOOKUP_RESTART, + comp_cache_lookup_restart) - define_compiler_restart (RC_COMP_REFERENCE_TRAP_RESTART, - comp_reference_trap_restart) + define_compiler_restart (RC_COMP_LOOKUP_TRAP_RESTART, + comp_lookup_trap_restart) + + define_compiler_restart (RC_COMP_CACHE_ASSIGNMENT_RESTART, + comp_cache_assignment_restart) define_compiler_restart (RC_COMP_ASSIGNMENT_TRAP_RESTART, comp_assignment_trap_restart) - define_compiler_restart (RC_COMP_UUO_LINK_RESTART, - comp_uuo_link_restart) + define_compiler_restart (RC_COMP_CACHE_OPERATOR_RESTART, + comp_cache_operator_restart) - define_compiler_restart (RC_COMP_UUO_LINK_TRAP_RESTART, - comp_uuo_link_trap_restart) + define_compiler_restart (RC_COMP_OP_REF_TRAP_RESTART, + comp_op_ref_trap_restart) define_compiler_restart (RC_COMP_CACHE_REF_APPLY_RESTART, comp_cache_ref_apply_restart) @@ -1029,12 +1029,18 @@ external_assignment_return: case TRAP_COMPILER_CACHED: { - Pointer extension; + Pointer extension, references; extension = Fast_Vector_Ref(Val, TRAP_EXTRA); - if (Fast_Vector_Ref(extension, TRAP_EXTENSION_UUO_LIST) != NIL) + references = Fast_Vector_Ref(extension, TRAP_EXTENSION_REFERENCES); + + if (Fast_Vector_Ref(references, TRAP_REFERENCES_OPERATOR) != NIL) { - /* No need to recompile, pass the fake variable. */ + + /* There are uuo links. + wimp out and let deep_assignment_end handle it. + */ + remove_lock(set_serializer); temp = deep_assignment_end(cell, fake_variable_object, @@ -1043,6 +1049,7 @@ external_assignment_return: goto external_assignment_return; } cell = Nth_Vector_Loc(extension, TRAP_EXTENSION_CELL); + update_lock(set_serializer, cell); goto assignment_end_after_lock; } @@ -1064,14 +1071,9 @@ external_assignment_return: Val = bogus_unassigned; goto normal_assignment_done; - case TRAP_NOP: - remove_lock(set_serializer); - temp = ERR_BAD_FRAME; - break; - default: remove_lock(set_serializer); - temp = ERR_BROKEN_COMPILED_VARIABLE; + temp = ERR_ILLEGAL_REFERENCE_TRAP; break; } diff --git a/v7/src/microcode/lookup.h b/v7/src/microcode/lookup.h index caa3071f3..788cdcba5 100644 --- a/v7/src/microcode/lookup.h +++ b/v7/src/microcode/lookup.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/lookup.h,v 9.38 1987/07/07 02:40:24 jinx Rel $ */ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/lookup.h,v 9.39 1987/10/05 18:35:30 jinx Rel $ */ /* Macros and declarations for the variable lookup code. */ @@ -130,6 +130,16 @@ extern Pointer #endif +/* This is provided as a separate macro so that it can be made + atomic if necessary. + */ + +#define update_lock(handle, cell) \ +{ \ + remove_lock(handle); \ + setup_lock(handle, cell); \ +} + #ifndef Future_Variable_Splice #define Future_Variable_Splice(Vbl, Ofs, Val) #endif diff --git a/v7/src/microcode/object.h b/v7/src/microcode/object.h index c91b5e184..451f89d7f 100644 --- a/v7/src/microcode/object.h +++ b/v7/src/microcode/object.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/object.h,v 9.24 1987/07/23 21:49:17 cph Exp $ */ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/object.h,v 9.25 1987/10/05 18:35:46 jinx Exp $ */ /* This file contains definitions pertaining to the C view of Scheme pointers: widths of fields, extraction macros, pre-computed @@ -185,6 +185,7 @@ typedef long relocation_type; /* Used to relocate pointers on fasload */ #define PAIR_P(object) ((OBJECT_TYPE (object)) == TC_LIST) #define WEAK_PAIR_P(object) ((OBJECT_TYPE (object)) == TC_WEAK_CONS) #define VECTOR_P(object) ((OBJECT_TYPE (object)) == TC_VECTOR) +#define REFERENCE_TRAP_P(object) ((OBJECT_TYPE (object)) == TC_REFERENCE_TRAP) #define NON_MARKED_VECTOR_P(object) \ ((OBJECT_TYPE (object)) == TC_NON_MARKED_VECTOR) diff --git a/v7/src/microcode/ppband.c b/v7/src/microcode/ppband.c index 6950a9aa6..ada657611 100644 --- a/v7/src/microcode/ppband.c +++ b/v7/src/microcode/ppband.c @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/ppband.c,v 9.26 1987/07/01 17:55:37 jinx Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/ppband.c,v 9.27 1987/10/05 18:30:44 jinx Exp $ * * Dumps Scheme FASL in user-readable form . */ @@ -221,7 +221,8 @@ Display(Location, Type, The_Datum) case TC_ACCESS: printf("[ACCESS "); break; case TC_DEFINITION: printf("[DEFINITION "); break; case TC_ASSIGNMENT: printf("[ASSIGNMENT "); break; - case TC_HUNK3: printf("[HUNK3 "); break; + case TC_HUNK3_A: printf("[HUNK3_A "); break; + case TC_HUNK3_B: printf("[HUNK3_B "); break; case TC_IN_PACKAGE: printf("[IN-PACKAGE "); break; case TC_COMBINATION: printf("[COMBINATION "); break; case TC_COMPILED_EXPRESSION: printf("[COMPILED-EXPRESSION "); break; diff --git a/v7/src/microcode/returns.h b/v7/src/microcode/returns.h index f4a23d2e3..cc0356d53 100644 --- a/v7/src/microcode/returns.h +++ b/v7/src/microcode/returns.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/returns.h,v 9.26 1987/06/19 15:54:29 jinx Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/returns.h,v 9.27 1987/10/05 18:36:01 jinx Exp $ * * Return codes. These are placed in Return when an * interpreter operation needs to operate in several @@ -42,86 +42,87 @@ MIT in each case. */ * Please maintain consistency. */ -#define RC_END_OF_COMPUTATION 0x00 -/* formerly RC_RESTORE_CONTROL_POINT 0x01 */ -#define RC_JOIN_STACKLETS 0x01 -#define RC_RESTORE_CONTINUATION 0x02 /* Used for 68000 */ -#define RC_INTERNAL_APPLY 0x03 -#define RC_BAD_INTERRUPT_CONTINUE 0x04 /* Used for 68000 */ -#define RC_RESTORE_HISTORY 0x05 -#define RC_INVOKE_STACK_THREAD 0x06 -#define RC_RESTART_EXECUTION 0x07 /* Used for 68000 */ -#define RC_EXECUTE_ASSIGNMENT_FINISH 0x08 -#define RC_EXECUTE_DEFINITION_FINISH 0x09 -#define RC_EXECUTE_ACCESS_FINISH 0x0A -#define RC_EXECUTE_IN_PACKAGE_CONTINUE 0x0B -#define RC_SEQ_2_DO_2 0x0C -#define RC_SEQ_3_DO_2 0x0D -#define RC_SEQ_3_DO_3 0x0E -#define RC_CONDITIONAL_DECIDE 0x0F -#define RC_DISJUNCTION_DECIDE 0x10 -#define RC_COMB_1_PROCEDURE 0x11 -#define RC_COMB_APPLY_FUNCTION 0x12 -#define RC_COMB_2_FIRST_OPERAND 0x13 -#define RC_COMB_2_PROCEDURE 0x14 -#define RC_COMB_SAVE_VALUE 0x15 -#define RC_PCOMB1_APPLY 0x16 -#define RC_PCOMB2_DO_1 0x17 -#define RC_PCOMB2_APPLY 0x18 -#define RC_PCOMB3_DO_2 0x19 -#define RC_PCOMB3_DO_1 0x1A -#define RC_PCOMB3_APPLY 0x1B +#define RC_END_OF_COMPUTATION 0x00 +/* formerly RC_RESTORE_CONTROL_POINT 0x01 */ +#define RC_JOIN_STACKLETS 0x01 +#define RC_RESTORE_CONTINUATION 0x02 /* Used for 68000 */ +#define RC_INTERNAL_APPLY 0x03 +#define RC_BAD_INTERRUPT_CONTINUE 0x04 /* Used for 68000 */ +#define RC_RESTORE_HISTORY 0x05 +#define RC_INVOKE_STACK_THREAD 0x06 +#define RC_RESTART_EXECUTION 0x07 /* Used for 68000 */ +#define RC_EXECUTE_ASSIGNMENT_FINISH 0x08 +#define RC_EXECUTE_DEFINITION_FINISH 0x09 +#define RC_EXECUTE_ACCESS_FINISH 0x0A +#define RC_EXECUTE_IN_PACKAGE_CONTINUE 0x0B +#define RC_SEQ_2_DO_2 0x0C +#define RC_SEQ_3_DO_2 0x0D +#define RC_SEQ_3_DO_3 0x0E +#define RC_CONDITIONAL_DECIDE 0x0F +#define RC_DISJUNCTION_DECIDE 0x10 +#define RC_COMB_1_PROCEDURE 0x11 +#define RC_COMB_APPLY_FUNCTION 0x12 +#define RC_COMB_2_FIRST_OPERAND 0x13 +#define RC_COMB_2_PROCEDURE 0x14 +#define RC_COMB_SAVE_VALUE 0x15 +#define RC_PCOMB1_APPLY 0x16 +#define RC_PCOMB2_DO_1 0x17 +#define RC_PCOMB2_APPLY 0x18 +#define RC_PCOMB3_DO_2 0x19 +#define RC_PCOMB3_DO_1 0x1A +#define RC_PCOMB3_APPLY 0x1B -#define RC_SNAP_NEED_THUNK 0x1C -#define RC_REENTER_COMPILED_CODE 0x1D -/* formerly RC_GET_CHAR_REPEAT 0x1E */ -#define RC_COMP_REFERENCE_RESTART 0x1F -#define RC_NORMAL_GC_DONE 0x20 -#define RC_COMPLETE_GC_DONE 0x21 /* Used for 68000 */ -#define RC_PURIFY_GC_1 0x22 -#define RC_PURIFY_GC_2 0x23 -#define RC_AFTER_MEMORY_UPDATE 0x24 /* Used for 68000 */ -#define RC_RESTARTABLE_EXIT 0x25 /* Used for 68000 */ -/* formerly RC_GET_CHAR 0x26 */ -/* formerly RC_GET_CHAR_IMMEDIATE 0x27 */ -#define RC_COMP_ASSIGNMENT_RESTART 0x28 -#define RC_POP_FROM_COMPILED_CODE 0x29 -#define RC_RETURN_TRAP_POINT 0x2A -#define RC_RESTORE_STEPPER 0x2B /* Used for 68000 */ -#define RC_RESTORE_TO_STATE_POINT 0x2C -#define RC_MOVE_TO_ADJACENT_POINT 0x2D -#define RC_RESTORE_VALUE 0x2E -#define RC_RESTORE_DONT_COPY_HISTORY 0x2F +#define RC_SNAP_NEED_THUNK 0x1C +#define RC_REENTER_COMPILED_CODE 0x1D +/* formerly RC_GET_CHAR_REPEAT 0x1E */ +#define RC_COMP_REFERENCE_RESTART 0x1F +#define RC_NORMAL_GC_DONE 0x20 +#define RC_COMPLETE_GC_DONE 0x21 /* Used for 68000 */ +#define RC_PURIFY_GC_1 0x22 +#define RC_PURIFY_GC_2 0x23 +#define RC_AFTER_MEMORY_UPDATE 0x24 /* Used for 68000 */ +#define RC_RESTARTABLE_EXIT 0x25 /* Used for 68000 */ +/* formerly RC_GET_CHAR 0x26 */ +/* formerly RC_GET_CHAR_IMMEDIATE 0x27 */ +#define RC_COMP_ASSIGNMENT_RESTART 0x28 +#define RC_POP_FROM_COMPILED_CODE 0x29 +#define RC_RETURN_TRAP_POINT 0x2A +#define RC_RESTORE_STEPPER 0x2B /* Used for 68000 */ +#define RC_RESTORE_TO_STATE_POINT 0x2C +#define RC_MOVE_TO_ADJACENT_POINT 0x2D +#define RC_RESTORE_VALUE 0x2E +#define RC_RESTORE_DONT_COPY_HISTORY 0x2F /* The following are not used in the 68000 implementation */ -#define RC_POP_RETURN_ERROR 0x40 -#define RC_EVAL_ERROR 0x41 -#define RC_REPEAT_PRIMITIVE 0x42 -#define RC_COMP_INTERRUPT_RESTART 0x43 -/* formerly RC_COMP_RECURSION_GC 0x44 */ -#define RC_RESTORE_INT_MASK 0x45 -#define RC_HALT 0x46 -#define RC_FINISH_GLOBAL_INT 0x47 /* Multiprocessor */ -#define RC_REPEAT_DISPATCH 0x48 -#define RC_GC_CHECK 0x49 -#define RC_RESTORE_FLUIDS 0x4A -#define RC_COMP_LOOKUP_APPLY_RESTART 0x4B -#define RC_COMP_ACCESS_RESTART 0x4C -#define RC_COMP_UNASSIGNED_P_RESTART 0x4D -#define RC_COMP_UNBOUND_P_RESTART 0x4E -#define RC_COMP_DEFINITION_RESTART 0x4F -#define RC_COMP_LEXPR_INTERRUPT_RESTART 0x50 -#define RC_COMP_SAFE_REFERENCE_RESTART 0x51 -#define RC_COMP_CACHE_VARIABLE_RESTART 0x52 -#define RC_COMP_REFERENCE_TRAP_RESTART 0x53 -#define RC_COMP_ASSIGNMENT_TRAP_RESTART 0x54 -#define RC_COMP_UUO_LINK_RESTART 0x55 -#define RC_COMP_UUO_LINK_TRAP_RESTART 0x56 -#define RC_COMP_CACHE_REF_APPLY_RESTART 0x57 -#define RC_COMP_SAFE_REF_TRAP_RESTART 0x58 -#define RC_COMP_UNASSIGNED_TRAP_RESTART 0x59 +#define RC_POP_RETURN_ERROR 0x40 +#define RC_EVAL_ERROR 0x41 +#define RC_REPEAT_PRIMITIVE 0x42 +#define RC_COMP_INTERRUPT_RESTART 0x43 +/* formerly RC_COMP_RECURSION_GC 0x44 */ +#define RC_RESTORE_INT_MASK 0x45 +#define RC_HALT 0x46 +#define RC_FINISH_GLOBAL_INT 0x47 /* Multiprocessor */ +#define RC_REPEAT_DISPATCH 0x48 +#define RC_GC_CHECK 0x49 +#define RC_RESTORE_FLUIDS 0x4A +#define RC_COMP_LOOKUP_APPLY_RESTART 0x4B +#define RC_COMP_ACCESS_RESTART 0x4C +#define RC_COMP_UNASSIGNED_P_RESTART 0x4D +#define RC_COMP_UNBOUND_P_RESTART 0x4E +#define RC_COMP_DEFINITION_RESTART 0x4F +#define RC_COMP_LEXPR_INTERRUPT_RESTART 0x50 +#define RC_COMP_SAFE_REFERENCE_RESTART 0x51 +#define RC_COMP_CACHE_LOOKUP_RESTART 0x52 +#define RC_COMP_LOOKUP_TRAP_RESTART 0x53 +#define RC_COMP_ASSIGNMENT_TRAP_RESTART 0x54 +#define RC_COMP_CACHE_OPERATOR_RESTART 0x55 +#define RC_COMP_OP_REF_TRAP_RESTART 0x56 +#define RC_COMP_CACHE_REF_APPLY_RESTART 0x57 +#define RC_COMP_SAFE_REF_TRAP_RESTART 0x58 +#define RC_COMP_UNASSIGNED_TRAP_RESTART 0x59 +#define RC_COMP_CACHE_ASSIGNMENT_RESTART 0x60 -#define MAX_RETURN_CODE 0x59 +#define MAX_RETURN_CODE 0x60 /* When adding return codes, don't forget to update storage.c too. */ diff --git a/v7/src/microcode/sdata.h b/v7/src/microcode/sdata.h index bc44964e1..fb026091c 100644 --- a/v7/src/microcode/sdata.h +++ b/v7/src/microcode/sdata.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/sdata.h,v 9.24 1987/05/29 02:24:18 jinx Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/sdata.h,v 9.25 1987/10/05 18:36:16 jinx Exp $ * * Description of the user data objects. This should parallel the * file SDATA.SCM in the runtime system. @@ -245,9 +245,15 @@ MIT in each case. */ /* HUNK3 * User object like a CONS, but with 3 slots rather than 2. */ -#define HUNK_CXR0 0 -#define HUNK_CXR1 1 -#define HUNK_CXR2 2 +#define HUNK3_CXR0 0 +#define HUNK3_CXR1 1 +#define HUNK3_CXR2 2 + +/* Old code uses these */ + +#define HUNK_CXR0 HUNK3_CXR0 +#define HUNK_CXR1 HUNK3_CXR1 +#define HUNK_CXR2 HUNK3_CXR2 /* INTERNED_SYMBOL * A symbol, such as the result of evaluating (QUOTE A). Some @@ -347,13 +353,18 @@ MIT in each case. */ */ #define TRAP_EXTENSION_CELL HUNK4_CXR0 -#define TRAP_EXTENSION_CACHE_LIST HUNK4_CXR1 -#define TRAP_EXTENSION_UUO_LIST HUNK4_CXR2 -#define TRAP_EXTENSION_NAME HUNK4_CXR3 +#define TRAP_EXTENSION_NAME HUNK4_CXR1 +#define TRAP_EXTENSION_CLONE HUNK4_CXR2 +#define TRAP_EXTENSION_REFERENCES HUNK4_CXR3 /* Aliases */ -#define TRAP_EXTENSION_BLOCK TRAP_EXTENSION_CACHE_LIST -#define TRAP_EXTENSION_OFFSET TRAP_EXTENSION_UUO_LIST + +#define TRAP_EXTENSION_BLOCK TRAP_EXTENSION_CLONE +#define TRAP_EXTENSION_OFFSET TRAP_EXTENSION_REFERENCES + +#define TRAP_REFERENCES_LOOKUP HUNK3_CXR0 +#define TRAP_REFERENCES_ASSIGNMENT HUNK3_CXR1 +#define TRAP_REFERENCES_OPERATOR HUNK3_CXR2 /* RETURN_CODE * Represents an address where computation is to continue. These can be diff --git a/v7/src/microcode/storage.c b/v7/src/microcode/storage.c index 55fa1d1fd..168cf618a 100644 --- a/v7/src/microcode/storage.c +++ b/v7/src/microcode/storage.c @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/storage.c,v 9.35 1987/06/23 22:01:53 cph Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/storage.c,v 9.36 1987/10/05 18:36:30 jinx Exp $ This file defines the storage for global variables for the Scheme Interpreter. */ @@ -65,8 +65,6 @@ Pointer This is only meaningful while in compiled code. *** This must be changed when stacklets are used. *** */ - compiler_utilities, /* Utility block in constant space needed by the compiled - code interface. */ Swap_Temp; /* Used by Swap_Pointers in default.h */ long IntCode, /* Interrupts requesting */ @@ -233,17 +231,18 @@ char *Return_Names[] = { /* 0x4F */ "COMPILER_DEFINITION_RESTART", /* 0x50 */ "COMPILER_LEXPR_GC_RESTART", /* 0x51 */ "COMPILER_SAFE_REFERENCE_RESTART", -/* 0x52 */ "COMPILER_CACHE_VARIABLE_RESTART", -/* 0x53 */ "COMPILER_REFERENCE_TRAP_RESTART", +/* 0x52 */ "COMPILER_CACHE_LOOKUP_RESTART", +/* 0x53 */ "COMPILER_LOOKUP_TRAP_RESTART", /* 0x54 */ "COMPILER_ASSIGNMENT_TRAP_RESTART", -/* 0x55 */ "COMPILER_UUO_LINK_RESTART", -/* 0x56 */ "COMPILER_UUO_LINK_TRAP_RESTART", +/* 0x55 */ "COMPILER_CACHE_OPERATOR_RESTART", +/* 0x56 */ "COMPILER_OPERATOR_REFERENCE_TRAP_RESTART", /* 0x57 */ "COMPILER_CACHE_REFERENCE_APPLY_RESTART", /* 0x58 */ "COMPILER_SAFE_REFERENCE_TRAP_RESTART", -/* 0x59 */ "COMPILER_UNASSIGNED_P_TRAP_RESTART" +/* 0x59 */ "COMPILER_UNASSIGNED_P_TRAP_RESTART", +/* 0x60 */ "COMPILER_CACHE_ASSIGNMENT_RESTART" }; -#if (MAX_RETURN_CODE != 0x59) +#if (MAX_RETURN_CODE != 0x60) /* Cause an error */ #include "Returns.h and storage.c are inconsistent -- Names Table" #endif diff --git a/v7/src/microcode/trap.h b/v7/src/microcode/trap.h index e8fcdb33b..60751bf8e 100644 --- a/v7/src/microcode/trap.h +++ b/v7/src/microcode/trap.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/trap.h,v 9.38 1987/05/29 02:24:53 jinx Rel $ */ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/trap.h,v 9.39 1987/10/05 18:36:52 jinx Rel $ */ /* Kinds of traps: @@ -51,6 +51,8 @@ MIT in each case. */ #define TRAP_UNBOUND_DANGEROUS 3 #define TRAP_ILLEGAL 4 #define TRAP_ILLEGAL_DANGEROUS 5 +#define TRAP_EXPENSIVE 6 +#define TRAP_EXPENSIVE_DANGEROUS 7 /* TRAP_MAX_IMMEDIATE is defined in const.h */ @@ -63,15 +65,18 @@ MIT in each case. */ #define TRAP_COMPILER_CACHED 14 #define TRAP_COMPILER_CACHED_DANGEROUS 15 +/* These MUST be distinct */ + #define TRAP_EXTENSION_TYPE TC_QUAD +#define TRAP_REFERENCES_TYPE TC_HUNK3 /* Trap utilities */ #define get_trap_kind(variable, what) \ { \ - variable = Datum(what); \ + variable = OBJECT_DATUM(what); \ if (variable > TRAP_MAX_IMMEDIATE) \ - variable = Datum(Vector_Ref(what, TRAP_TAG)); \ + variable = OBJECT_DATUM(Vector_Ref(what, TRAP_TAG)); \ } /* Common constants */ @@ -83,6 +88,8 @@ MIT in each case. */ #define DANGEROUS_UNBOUND_OBJECT Make_Non_Pointer(TC_REFERENCE_TRAP, TRAP_UNBOUND_DANGEROUS) #define ILLEGAL_OBJECT Make_Non_Pointer(TC_REFERENCE_TRAP, TRAP_ILLEGAL) #define DANGEROUS_ILLEGAL_OBJECT Make_Non_Pointer(TC_REFERENCE_TRAP, TRAP_ILLEGAL_DANGEROUS) +#define EXPENSIVE_OBJECT Make_Non_Pointer(TC_REFERENCE_TRAP, TRAP_EXPENSIVE) +#define DANGEROUS_EXPENSIVE_OBJECT Make_Non_Pointer(TC_REFERENCE_TRAP, TRAP_EXPENSIVE_DANGEROUS) #else #define UNASSIGNED_OBJECT 0x32000000 #define DANGEROUS_UNASSIGNED_OBJECT 0x32000001 @@ -90,11 +97,14 @@ MIT in each case. */ #define DANGEROUS_UNBOUND_OBJECT 0x32000003 #define ILLEGAL_OBJECT 0x32000004 #define DANGEROUS_ILLEGAL_OBJECT 0x32000005 +#define EXPENSIVE_OBJECT 0x32000006 +#define DANGEROUS_EXPENSIVE_OBJECT 0x32000007 #endif #define NOP_OBJECT Make_Unsigned_Fixnum(TRAP_NOP) #define DANGEROUS_OBJECT Make_Unsigned_Fixnum(TRAP_DANGEROUS) #define REQUEST_RECACHE_OBJECT DANGEROUS_ILLEGAL_OBJECT +#define EXPENSIVE_ASSIGNMENT_OBJECT EXPENSIVE_OBJECT #if (TC_REFERENCE_TRAP != 0x32) #include "error: trap.h and types.h are inconsistent" diff --git a/v7/src/microcode/types.h b/v7/src/microcode/types.h index 8c12828ee..2889655cb 100644 --- a/v7/src/microcode/types.h +++ b/v7/src/microcode/types.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/types.h,v 9.23 1987/06/05 17:23:11 cph Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/types.h,v 9.24 1987/10/05 18:37:00 jinx Exp $ * * Type code definitions, numerical order * @@ -69,11 +69,11 @@ MIT in each case. */ #define TC_INTERNED_SYMBOL 0x1D #define TC_CHARACTER_STRING 0x1E #define TC_ACCESS 0x1F -/* UNUSED 0x20 */ /* Used to be EXTENDED_FIXNUM. */ +#define TC_HUNK3_A 0x20 /* Used to be EXTENDED_FIXNUM. */ #define TC_DEFINITION 0x21 #define TC_BROKEN_HEART 0x22 #define TC_ASSIGNMENT 0x23 -#define TC_HUNK3 0x24 +#define TC_HUNK3_B 0x24 #define TC_IN_PACKAGE 0x25 #define TC_COMBINATION 0x26 #define TC_MANIFEST_NM_VECTOR 0x27 @@ -110,3 +110,4 @@ MIT in each case. */ #define TC_BIT_STRING TC_VECTOR_1B #define TC_VECTOR_8B TC_CHARACTER_STRING #define TC_ADDRESS TC_FIXNUM +#define TC_HUNK3 TC_HUNK3_B diff --git a/v7/src/microcode/version.h b/v7/src/microcode/version.h index 2ba45acd0..7c32a2b1a 100644 --- a/v7/src/microcode/version.h +++ b/v7/src/microcode/version.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 9.101 1987/09/21 21:56:14 jinx Exp $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 9.102 1987/10/05 18:37:10 jinx Exp $ This file contains version information for the microcode. */ @@ -46,7 +46,7 @@ This file contains version information for the microcode. */ #define VERSION 9 #endif #ifndef SUBVERSION -#define SUBVERSION 101 +#define SUBVERSION 102 #endif #ifndef UCODE_TABLES_FILENAME diff --git a/v8/src/microcode/gctype.c b/v8/src/microcode/gctype.c index 2758e8f17..907a05069 100644 --- a/v8/src/microcode/gctype.c +++ b/v8/src/microcode/gctype.c @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/gctype.c,v 9.23 1987/06/05 20:56:37 cph Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/gctype.c,v 9.24 1987/10/05 18:32:37 jinx Exp $ * * This file contains the table which maps between Types and * GC Types. @@ -74,11 +74,11 @@ int GC_Type_Map[MAX_SAFE_TYPE + 1] = { GC_Pair, /* TC_INTERNED_SYMBOL */ GC_Vector, /* TC_CHARACTER_STRING,TC_VECTOR_8B */ GC_Pair, /* TC_ACCESS */ - GC_Undefined, /* 0x20 */ + GC_Triple, /* TC_HUNK3_A */ GC_Pair, /* TC_DEFINITION */ GC_Special, /* TC_BROKEN_HEART */ GC_Pair, /* TC_ASSIGNMENT */ - GC_Triple, /* TC_HUNK3 */ + GC_Triple, /* TC_HUNK3_B */ GC_Pair, /* TC_IN_PACKAGE */ /* GC_Type_Map continues on next page */ diff --git a/v8/src/microcode/interp.c b/v8/src/microcode/interp.c index fa3d86eda..845434930 100644 --- a/v8/src/microcode/interp.c +++ b/v8/src/microcode/interp.c @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/interp.c,v 9.31 1987/07/15 22:08:05 cph Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/interp.c,v 9.32 1987/10/05 18:32:48 jinx Exp $ * * This file contains the heart of the Scheme Scode * interpreter @@ -411,7 +411,8 @@ Do_Expression: Eval_Non_Trapping: Eval_Ucode_Hook(); switch (Type_Code(Fetch_Expression())) - { case TC_BIG_FIXNUM: /* The self evaluating items */ + { + case TC_BIG_FIXNUM: /* The self evaluating items */ case TC_BIG_FLONUM: case TC_CHARACTER_STRING: case TC_CHARACTER: @@ -422,7 +423,8 @@ Eval_Non_Trapping: case TC_ENVIRONMENT: case TC_EXTENDED_PROCEDURE: case TC_FIXNUM: - case TC_HUNK3: + case TC_HUNK3_A: + case TC_HUNK3_B: case TC_INTERNED_SYMBOL: case TC_LIST: case TC_NON_MARKED_VECTOR: @@ -700,11 +702,6 @@ lookup_end_restart: /* Interpret(), continued */ - case TRAP_NOP: - Val = Vector_Ref(Val, TRAP_EXTRA); - Set_Time_Zone(Zone_Working); - goto Pop_Return; - case TRAP_UNBOUND: temp = ERR_UNBOUND_VARIABLE; break; @@ -714,7 +711,7 @@ lookup_end_restart: break; default: - temp = ERR_BROKEN_COMPILED_VARIABLE; + temp = ERR_ILLEGAL_REFERENCE_TRAP; break; } @@ -871,20 +868,23 @@ Pop_Return: define_compiler_restart (RC_COMP_SAFE_REFERENCE_RESTART, comp_safe_reference_restart) - define_compiler_restart (RC_COMP_CACHE_VARIABLE_RESTART, - comp_cache_variable_restart) + define_compiler_restart (RC_COMP_CACHE_LOOKUP_RESTART, + comp_cache_lookup_restart) - define_compiler_restart (RC_COMP_REFERENCE_TRAP_RESTART, - comp_reference_trap_restart) + define_compiler_restart (RC_COMP_LOOKUP_TRAP_RESTART, + comp_lookup_trap_restart) + + define_compiler_restart (RC_COMP_CACHE_ASSIGNMENT_RESTART, + comp_cache_assignment_restart) define_compiler_restart (RC_COMP_ASSIGNMENT_TRAP_RESTART, comp_assignment_trap_restart) - define_compiler_restart (RC_COMP_UUO_LINK_RESTART, - comp_uuo_link_restart) + define_compiler_restart (RC_COMP_CACHE_OPERATOR_RESTART, + comp_cache_operator_restart) - define_compiler_restart (RC_COMP_UUO_LINK_TRAP_RESTART, - comp_uuo_link_trap_restart) + define_compiler_restart (RC_COMP_OP_REF_TRAP_RESTART, + comp_op_ref_trap_restart) define_compiler_restart (RC_COMP_CACHE_REF_APPLY_RESTART, comp_cache_ref_apply_restart) @@ -1029,12 +1029,18 @@ external_assignment_return: case TRAP_COMPILER_CACHED: { - Pointer extension; + Pointer extension, references; extension = Fast_Vector_Ref(Val, TRAP_EXTRA); - if (Fast_Vector_Ref(extension, TRAP_EXTENSION_UUO_LIST) != NIL) + references = Fast_Vector_Ref(extension, TRAP_EXTENSION_REFERENCES); + + if (Fast_Vector_Ref(references, TRAP_REFERENCES_OPERATOR) != NIL) { - /* No need to recompile, pass the fake variable. */ + + /* There are uuo links. + wimp out and let deep_assignment_end handle it. + */ + remove_lock(set_serializer); temp = deep_assignment_end(cell, fake_variable_object, @@ -1043,6 +1049,7 @@ external_assignment_return: goto external_assignment_return; } cell = Nth_Vector_Loc(extension, TRAP_EXTENSION_CELL); + update_lock(set_serializer, cell); goto assignment_end_after_lock; } @@ -1064,14 +1071,9 @@ external_assignment_return: Val = bogus_unassigned; goto normal_assignment_done; - case TRAP_NOP: - remove_lock(set_serializer); - temp = ERR_BAD_FRAME; - break; - default: remove_lock(set_serializer); - temp = ERR_BROKEN_COMPILED_VARIABLE; + temp = ERR_ILLEGAL_REFERENCE_TRAP; break; } diff --git a/v8/src/microcode/lookup.h b/v8/src/microcode/lookup.h index a5db3fad3..41f02ce38 100644 --- a/v8/src/microcode/lookup.h +++ b/v8/src/microcode/lookup.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/lookup.h,v 9.38 1987/07/07 02:40:24 jinx Rel $ */ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/lookup.h,v 9.39 1987/10/05 18:35:30 jinx Rel $ */ /* Macros and declarations for the variable lookup code. */ @@ -130,6 +130,16 @@ extern Pointer #endif +/* This is provided as a separate macro so that it can be made + atomic if necessary. + */ + +#define update_lock(handle, cell) \ +{ \ + remove_lock(handle); \ + setup_lock(handle, cell); \ +} + #ifndef Future_Variable_Splice #define Future_Variable_Splice(Vbl, Ofs, Val) #endif diff --git a/v8/src/microcode/object.h b/v8/src/microcode/object.h index 3006677a5..cdd213dd7 100644 --- a/v8/src/microcode/object.h +++ b/v8/src/microcode/object.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/object.h,v 9.24 1987/07/23 21:49:17 cph Exp $ */ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/object.h,v 9.25 1987/10/05 18:35:46 jinx Exp $ */ /* This file contains definitions pertaining to the C view of Scheme pointers: widths of fields, extraction macros, pre-computed @@ -185,6 +185,7 @@ typedef long relocation_type; /* Used to relocate pointers on fasload */ #define PAIR_P(object) ((OBJECT_TYPE (object)) == TC_LIST) #define WEAK_PAIR_P(object) ((OBJECT_TYPE (object)) == TC_WEAK_CONS) #define VECTOR_P(object) ((OBJECT_TYPE (object)) == TC_VECTOR) +#define REFERENCE_TRAP_P(object) ((OBJECT_TYPE (object)) == TC_REFERENCE_TRAP) #define NON_MARKED_VECTOR_P(object) \ ((OBJECT_TYPE (object)) == TC_NON_MARKED_VECTOR) diff --git a/v8/src/microcode/ppband.c b/v8/src/microcode/ppband.c index 7e2255d53..3763a4aa6 100644 --- a/v8/src/microcode/ppband.c +++ b/v8/src/microcode/ppband.c @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/ppband.c,v 9.26 1987/07/01 17:55:37 jinx Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/ppband.c,v 9.27 1987/10/05 18:30:44 jinx Exp $ * * Dumps Scheme FASL in user-readable form . */ @@ -221,7 +221,8 @@ Display(Location, Type, The_Datum) case TC_ACCESS: printf("[ACCESS "); break; case TC_DEFINITION: printf("[DEFINITION "); break; case TC_ASSIGNMENT: printf("[ASSIGNMENT "); break; - case TC_HUNK3: printf("[HUNK3 "); break; + case TC_HUNK3_A: printf("[HUNK3_A "); break; + case TC_HUNK3_B: printf("[HUNK3_B "); break; case TC_IN_PACKAGE: printf("[IN-PACKAGE "); break; case TC_COMBINATION: printf("[COMBINATION "); break; case TC_COMPILED_EXPRESSION: printf("[COMPILED-EXPRESSION "); break; diff --git a/v8/src/microcode/returns.h b/v8/src/microcode/returns.h index e7b07ffed..2d522215a 100644 --- a/v8/src/microcode/returns.h +++ b/v8/src/microcode/returns.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/returns.h,v 9.26 1987/06/19 15:54:29 jinx Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/returns.h,v 9.27 1987/10/05 18:36:01 jinx Exp $ * * Return codes. These are placed in Return when an * interpreter operation needs to operate in several @@ -42,86 +42,87 @@ MIT in each case. */ * Please maintain consistency. */ -#define RC_END_OF_COMPUTATION 0x00 -/* formerly RC_RESTORE_CONTROL_POINT 0x01 */ -#define RC_JOIN_STACKLETS 0x01 -#define RC_RESTORE_CONTINUATION 0x02 /* Used for 68000 */ -#define RC_INTERNAL_APPLY 0x03 -#define RC_BAD_INTERRUPT_CONTINUE 0x04 /* Used for 68000 */ -#define RC_RESTORE_HISTORY 0x05 -#define RC_INVOKE_STACK_THREAD 0x06 -#define RC_RESTART_EXECUTION 0x07 /* Used for 68000 */ -#define RC_EXECUTE_ASSIGNMENT_FINISH 0x08 -#define RC_EXECUTE_DEFINITION_FINISH 0x09 -#define RC_EXECUTE_ACCESS_FINISH 0x0A -#define RC_EXECUTE_IN_PACKAGE_CONTINUE 0x0B -#define RC_SEQ_2_DO_2 0x0C -#define RC_SEQ_3_DO_2 0x0D -#define RC_SEQ_3_DO_3 0x0E -#define RC_CONDITIONAL_DECIDE 0x0F -#define RC_DISJUNCTION_DECIDE 0x10 -#define RC_COMB_1_PROCEDURE 0x11 -#define RC_COMB_APPLY_FUNCTION 0x12 -#define RC_COMB_2_FIRST_OPERAND 0x13 -#define RC_COMB_2_PROCEDURE 0x14 -#define RC_COMB_SAVE_VALUE 0x15 -#define RC_PCOMB1_APPLY 0x16 -#define RC_PCOMB2_DO_1 0x17 -#define RC_PCOMB2_APPLY 0x18 -#define RC_PCOMB3_DO_2 0x19 -#define RC_PCOMB3_DO_1 0x1A -#define RC_PCOMB3_APPLY 0x1B +#define RC_END_OF_COMPUTATION 0x00 +/* formerly RC_RESTORE_CONTROL_POINT 0x01 */ +#define RC_JOIN_STACKLETS 0x01 +#define RC_RESTORE_CONTINUATION 0x02 /* Used for 68000 */ +#define RC_INTERNAL_APPLY 0x03 +#define RC_BAD_INTERRUPT_CONTINUE 0x04 /* Used for 68000 */ +#define RC_RESTORE_HISTORY 0x05 +#define RC_INVOKE_STACK_THREAD 0x06 +#define RC_RESTART_EXECUTION 0x07 /* Used for 68000 */ +#define RC_EXECUTE_ASSIGNMENT_FINISH 0x08 +#define RC_EXECUTE_DEFINITION_FINISH 0x09 +#define RC_EXECUTE_ACCESS_FINISH 0x0A +#define RC_EXECUTE_IN_PACKAGE_CONTINUE 0x0B +#define RC_SEQ_2_DO_2 0x0C +#define RC_SEQ_3_DO_2 0x0D +#define RC_SEQ_3_DO_3 0x0E +#define RC_CONDITIONAL_DECIDE 0x0F +#define RC_DISJUNCTION_DECIDE 0x10 +#define RC_COMB_1_PROCEDURE 0x11 +#define RC_COMB_APPLY_FUNCTION 0x12 +#define RC_COMB_2_FIRST_OPERAND 0x13 +#define RC_COMB_2_PROCEDURE 0x14 +#define RC_COMB_SAVE_VALUE 0x15 +#define RC_PCOMB1_APPLY 0x16 +#define RC_PCOMB2_DO_1 0x17 +#define RC_PCOMB2_APPLY 0x18 +#define RC_PCOMB3_DO_2 0x19 +#define RC_PCOMB3_DO_1 0x1A +#define RC_PCOMB3_APPLY 0x1B -#define RC_SNAP_NEED_THUNK 0x1C -#define RC_REENTER_COMPILED_CODE 0x1D -/* formerly RC_GET_CHAR_REPEAT 0x1E */ -#define RC_COMP_REFERENCE_RESTART 0x1F -#define RC_NORMAL_GC_DONE 0x20 -#define RC_COMPLETE_GC_DONE 0x21 /* Used for 68000 */ -#define RC_PURIFY_GC_1 0x22 -#define RC_PURIFY_GC_2 0x23 -#define RC_AFTER_MEMORY_UPDATE 0x24 /* Used for 68000 */ -#define RC_RESTARTABLE_EXIT 0x25 /* Used for 68000 */ -/* formerly RC_GET_CHAR 0x26 */ -/* formerly RC_GET_CHAR_IMMEDIATE 0x27 */ -#define RC_COMP_ASSIGNMENT_RESTART 0x28 -#define RC_POP_FROM_COMPILED_CODE 0x29 -#define RC_RETURN_TRAP_POINT 0x2A -#define RC_RESTORE_STEPPER 0x2B /* Used for 68000 */ -#define RC_RESTORE_TO_STATE_POINT 0x2C -#define RC_MOVE_TO_ADJACENT_POINT 0x2D -#define RC_RESTORE_VALUE 0x2E -#define RC_RESTORE_DONT_COPY_HISTORY 0x2F +#define RC_SNAP_NEED_THUNK 0x1C +#define RC_REENTER_COMPILED_CODE 0x1D +/* formerly RC_GET_CHAR_REPEAT 0x1E */ +#define RC_COMP_REFERENCE_RESTART 0x1F +#define RC_NORMAL_GC_DONE 0x20 +#define RC_COMPLETE_GC_DONE 0x21 /* Used for 68000 */ +#define RC_PURIFY_GC_1 0x22 +#define RC_PURIFY_GC_2 0x23 +#define RC_AFTER_MEMORY_UPDATE 0x24 /* Used for 68000 */ +#define RC_RESTARTABLE_EXIT 0x25 /* Used for 68000 */ +/* formerly RC_GET_CHAR 0x26 */ +/* formerly RC_GET_CHAR_IMMEDIATE 0x27 */ +#define RC_COMP_ASSIGNMENT_RESTART 0x28 +#define RC_POP_FROM_COMPILED_CODE 0x29 +#define RC_RETURN_TRAP_POINT 0x2A +#define RC_RESTORE_STEPPER 0x2B /* Used for 68000 */ +#define RC_RESTORE_TO_STATE_POINT 0x2C +#define RC_MOVE_TO_ADJACENT_POINT 0x2D +#define RC_RESTORE_VALUE 0x2E +#define RC_RESTORE_DONT_COPY_HISTORY 0x2F /* The following are not used in the 68000 implementation */ -#define RC_POP_RETURN_ERROR 0x40 -#define RC_EVAL_ERROR 0x41 -#define RC_REPEAT_PRIMITIVE 0x42 -#define RC_COMP_INTERRUPT_RESTART 0x43 -/* formerly RC_COMP_RECURSION_GC 0x44 */ -#define RC_RESTORE_INT_MASK 0x45 -#define RC_HALT 0x46 -#define RC_FINISH_GLOBAL_INT 0x47 /* Multiprocessor */ -#define RC_REPEAT_DISPATCH 0x48 -#define RC_GC_CHECK 0x49 -#define RC_RESTORE_FLUIDS 0x4A -#define RC_COMP_LOOKUP_APPLY_RESTART 0x4B -#define RC_COMP_ACCESS_RESTART 0x4C -#define RC_COMP_UNASSIGNED_P_RESTART 0x4D -#define RC_COMP_UNBOUND_P_RESTART 0x4E -#define RC_COMP_DEFINITION_RESTART 0x4F -#define RC_COMP_LEXPR_INTERRUPT_RESTART 0x50 -#define RC_COMP_SAFE_REFERENCE_RESTART 0x51 -#define RC_COMP_CACHE_VARIABLE_RESTART 0x52 -#define RC_COMP_REFERENCE_TRAP_RESTART 0x53 -#define RC_COMP_ASSIGNMENT_TRAP_RESTART 0x54 -#define RC_COMP_UUO_LINK_RESTART 0x55 -#define RC_COMP_UUO_LINK_TRAP_RESTART 0x56 -#define RC_COMP_CACHE_REF_APPLY_RESTART 0x57 -#define RC_COMP_SAFE_REF_TRAP_RESTART 0x58 -#define RC_COMP_UNASSIGNED_TRAP_RESTART 0x59 +#define RC_POP_RETURN_ERROR 0x40 +#define RC_EVAL_ERROR 0x41 +#define RC_REPEAT_PRIMITIVE 0x42 +#define RC_COMP_INTERRUPT_RESTART 0x43 +/* formerly RC_COMP_RECURSION_GC 0x44 */ +#define RC_RESTORE_INT_MASK 0x45 +#define RC_HALT 0x46 +#define RC_FINISH_GLOBAL_INT 0x47 /* Multiprocessor */ +#define RC_REPEAT_DISPATCH 0x48 +#define RC_GC_CHECK 0x49 +#define RC_RESTORE_FLUIDS 0x4A +#define RC_COMP_LOOKUP_APPLY_RESTART 0x4B +#define RC_COMP_ACCESS_RESTART 0x4C +#define RC_COMP_UNASSIGNED_P_RESTART 0x4D +#define RC_COMP_UNBOUND_P_RESTART 0x4E +#define RC_COMP_DEFINITION_RESTART 0x4F +#define RC_COMP_LEXPR_INTERRUPT_RESTART 0x50 +#define RC_COMP_SAFE_REFERENCE_RESTART 0x51 +#define RC_COMP_CACHE_LOOKUP_RESTART 0x52 +#define RC_COMP_LOOKUP_TRAP_RESTART 0x53 +#define RC_COMP_ASSIGNMENT_TRAP_RESTART 0x54 +#define RC_COMP_CACHE_OPERATOR_RESTART 0x55 +#define RC_COMP_OP_REF_TRAP_RESTART 0x56 +#define RC_COMP_CACHE_REF_APPLY_RESTART 0x57 +#define RC_COMP_SAFE_REF_TRAP_RESTART 0x58 +#define RC_COMP_UNASSIGNED_TRAP_RESTART 0x59 +#define RC_COMP_CACHE_ASSIGNMENT_RESTART 0x60 -#define MAX_RETURN_CODE 0x59 +#define MAX_RETURN_CODE 0x60 /* When adding return codes, don't forget to update storage.c too. */ diff --git a/v8/src/microcode/trap.h b/v8/src/microcode/trap.h index 61e9ff221..93a796cb2 100644 --- a/v8/src/microcode/trap.h +++ b/v8/src/microcode/trap.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/trap.h,v 9.38 1987/05/29 02:24:53 jinx Rel $ */ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/trap.h,v 9.39 1987/10/05 18:36:52 jinx Rel $ */ /* Kinds of traps: @@ -51,6 +51,8 @@ MIT in each case. */ #define TRAP_UNBOUND_DANGEROUS 3 #define TRAP_ILLEGAL 4 #define TRAP_ILLEGAL_DANGEROUS 5 +#define TRAP_EXPENSIVE 6 +#define TRAP_EXPENSIVE_DANGEROUS 7 /* TRAP_MAX_IMMEDIATE is defined in const.h */ @@ -63,15 +65,18 @@ MIT in each case. */ #define TRAP_COMPILER_CACHED 14 #define TRAP_COMPILER_CACHED_DANGEROUS 15 +/* These MUST be distinct */ + #define TRAP_EXTENSION_TYPE TC_QUAD +#define TRAP_REFERENCES_TYPE TC_HUNK3 /* Trap utilities */ #define get_trap_kind(variable, what) \ { \ - variable = Datum(what); \ + variable = OBJECT_DATUM(what); \ if (variable > TRAP_MAX_IMMEDIATE) \ - variable = Datum(Vector_Ref(what, TRAP_TAG)); \ + variable = OBJECT_DATUM(Vector_Ref(what, TRAP_TAG)); \ } /* Common constants */ @@ -83,6 +88,8 @@ MIT in each case. */ #define DANGEROUS_UNBOUND_OBJECT Make_Non_Pointer(TC_REFERENCE_TRAP, TRAP_UNBOUND_DANGEROUS) #define ILLEGAL_OBJECT Make_Non_Pointer(TC_REFERENCE_TRAP, TRAP_ILLEGAL) #define DANGEROUS_ILLEGAL_OBJECT Make_Non_Pointer(TC_REFERENCE_TRAP, TRAP_ILLEGAL_DANGEROUS) +#define EXPENSIVE_OBJECT Make_Non_Pointer(TC_REFERENCE_TRAP, TRAP_EXPENSIVE) +#define DANGEROUS_EXPENSIVE_OBJECT Make_Non_Pointer(TC_REFERENCE_TRAP, TRAP_EXPENSIVE_DANGEROUS) #else #define UNASSIGNED_OBJECT 0x32000000 #define DANGEROUS_UNASSIGNED_OBJECT 0x32000001 @@ -90,11 +97,14 @@ MIT in each case. */ #define DANGEROUS_UNBOUND_OBJECT 0x32000003 #define ILLEGAL_OBJECT 0x32000004 #define DANGEROUS_ILLEGAL_OBJECT 0x32000005 +#define EXPENSIVE_OBJECT 0x32000006 +#define DANGEROUS_EXPENSIVE_OBJECT 0x32000007 #endif #define NOP_OBJECT Make_Unsigned_Fixnum(TRAP_NOP) #define DANGEROUS_OBJECT Make_Unsigned_Fixnum(TRAP_DANGEROUS) #define REQUEST_RECACHE_OBJECT DANGEROUS_ILLEGAL_OBJECT +#define EXPENSIVE_ASSIGNMENT_OBJECT EXPENSIVE_OBJECT #if (TC_REFERENCE_TRAP != 0x32) #include "error: trap.h and types.h are inconsistent" diff --git a/v8/src/microcode/types.h b/v8/src/microcode/types.h index 9ffb12636..52aa4207b 100644 --- a/v8/src/microcode/types.h +++ b/v8/src/microcode/types.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/types.h,v 9.23 1987/06/05 17:23:11 cph Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/types.h,v 9.24 1987/10/05 18:37:00 jinx Exp $ * * Type code definitions, numerical order * @@ -69,11 +69,11 @@ MIT in each case. */ #define TC_INTERNED_SYMBOL 0x1D #define TC_CHARACTER_STRING 0x1E #define TC_ACCESS 0x1F -/* UNUSED 0x20 */ /* Used to be EXTENDED_FIXNUM. */ +#define TC_HUNK3_A 0x20 /* Used to be EXTENDED_FIXNUM. */ #define TC_DEFINITION 0x21 #define TC_BROKEN_HEART 0x22 #define TC_ASSIGNMENT 0x23 -#define TC_HUNK3 0x24 +#define TC_HUNK3_B 0x24 #define TC_IN_PACKAGE 0x25 #define TC_COMBINATION 0x26 #define TC_MANIFEST_NM_VECTOR 0x27 @@ -110,3 +110,4 @@ MIT in each case. */ #define TC_BIT_STRING TC_VECTOR_1B #define TC_VECTOR_8B TC_CHARACTER_STRING #define TC_ADDRESS TC_FIXNUM +#define TC_HUNK3 TC_HUNK3_B diff --git a/v8/src/microcode/version.h b/v8/src/microcode/version.h index 89fbd100e..e708145b2 100644 --- a/v8/src/microcode/version.h +++ b/v8/src/microcode/version.h @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 9.101 1987/09/21 21:56:14 jinx Exp $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 9.102 1987/10/05 18:37:10 jinx Exp $ This file contains version information for the microcode. */ @@ -46,7 +46,7 @@ This file contains version information for the microcode. */ #define VERSION 9 #endif #ifndef SUBVERSION -#define SUBVERSION 101 +#define SUBVERSION 102 #endif #ifndef UCODE_TABLES_FILENAME -- 2.25.1