different caches. This allows uuo links to be turned on by default.
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
*/
#include "trap.h"
#include "lookup.h"
\f
-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);
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
}
}
/* 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:
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
#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
\f
/* Termination codes: the interpreter halts on these */
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.
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);
}
}
\f
get_trap_kind(trap_kind, trap);
switch(trap_kind)
{
- case TRAP_NOP:
case TRAP_DANGEROUS:
Vector_Set(trap,
TRAP_TAG,
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);
}
}
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
#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
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.
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 */
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
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:
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:
\f
/* 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;
break;
default:
- temp = ERR_BROKEN_COMPILED_VARIABLE;
+ temp = ERR_ILLEGAL_REFERENCE_TRAP;
break;
}
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)
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,
goto external_assignment_return;
}
cell = Nth_Vector_Loc(extension, TRAP_EXTENSION_CELL);
+ update_lock(set_serializer, cell);
goto assignment_end_after_lock;
}
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;
}
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. */
#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
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
#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)
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 .
*/
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;
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
* 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
\f
-#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. */
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.
/* 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
*/
#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
\f
/* RETURN_CODE
* Represents an address where computation is to continue. These can be
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. */
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 */
\f
long IntCode, /* Interrupts requesting */
/* 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
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 $ */
\f
/* Kinds of traps:
#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 */
#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)); \
}
\f
/* Common constants */
#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
#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"
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
*
#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
#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
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. */
\f
#define VERSION 9
#endif
#ifndef SUBVERSION
-#define SUBVERSION 101
+#define SUBVERSION 102
#endif
#ifndef UCODE_TABLES_FILENAME
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.
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 */
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
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:
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:
\f
/* 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;
break;
default:
- temp = ERR_BROKEN_COMPILED_VARIABLE;
+ temp = ERR_ILLEGAL_REFERENCE_TRAP;
break;
}
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)
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,
goto external_assignment_return;
}
cell = Nth_Vector_Loc(extension, TRAP_EXTENSION_CELL);
+ update_lock(set_serializer, cell);
goto assignment_end_after_lock;
}
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;
}
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. */
#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
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
#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)
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 .
*/
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;
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
* 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
\f
-#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. */
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 $ */
\f
/* Kinds of traps:
#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 */
#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)); \
}
\f
/* Common constants */
#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
#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"
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
*
#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
#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
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. */
\f
#define VERSION 9
#endif
#ifndef SUBVERSION
-#define SUBVERSION 101
+#define SUBVERSION 102
#endif
#ifndef UCODE_TABLES_FILENAME