/* -*-C-*-
-Copyright (c) 1987, 1988 Massachusetts Institute of Technology
+Copyright (c) 1987, 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
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/bchmmg.c,v 9.43 1989/03/27 23:13:56 jinx Exp $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchmmg.c,v 9.44 1989/05/31 01:49:41 jinx Exp $ */
\f
/* Memory management top level. Garbage collection to disk.
Pointer GC_Daemon_Proc;
Primitive_1_Arg();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Arg_1_Type(TC_FIXNUM);
if (Free > Heap_Top)
{
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchpur.c,v 9.42 1989/03/27 23:14:03 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchpur.c,v 9.43 1989/05/31 01:49:47 jinx Exp $
-Copyright (c) 1987, 1988 Massachusetts Institute of Technology
+Copyright (c) 1987, 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
Pointer result;
Primitive_3_Args();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
if ((Arg2 != SHARP_T) && (Arg2 != SHARP_F))
Primitive_Error(ERR_ARG_2_WRONG_TYPE);
Arg_3_Type(TC_FIXNUM);
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/const.h,v 9.31 1989/05/24 05:32:23 jinx Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/const.h,v 9.32 1989/05/31 01:49:52 jinx Exp $
*
* Named constants used throughout the interpreter
*
#define PRIM_POP_RETURN -7
#define PRIM_TOUCH -8
#define PRIM_APPLY_INTERRUPT -9
+#define PRIM_REENTER -10
#define ABORT_NAME_TABLE \
{ \
/* -6 */ "NO-TRAP_APPLY", \
/* -7 */ "POP-RETURN", \
/* -8 */ "TOUCH", \
- /* -9 */ "APPLY-INTERRUPT" \
+ /* -9 */ "APPLY-INTERRUPT", \
+ /* -10 */ "REENTER" \
}
/* Some numbers of parameters which mean something special */
/* -*-C-*-
-Copyright (c) 1987, 1988 Massachusetts Institute of Technology
+Copyright (c) 1987, 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
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/dmpwrld.c,v 9.28 1988/10/21 00:12:33 cph Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/dmpwrld.c,v 9.29 1989/05/31 01:49:57 jinx Rel $
*
* This file contains a primitive to dump an executable version of Scheme.
* It uses unexec.c from GNU Emacs.
long Buflen;
Primitive_1_Arg();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Arg_1_Type(TC_CHARACTER_STRING);
if (there_are_open_files())
/* -*-C-*-
-Copyright (c) 1987, 1988 Massachusetts Institute of Technology
+Copyright (c) 1987, 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
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/fasload.c,v 9.39 1989/03/27 23:14:58 jinx Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/fasload.c,v 9.40 1989/05/31 01:50:02 jinx Exp $
The "fast loader" which reads in and relocates binary files and then
interns symbols. It is called with one argument: the (character
Boolean load_file_failed;
Primitive_1_Arg();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
saved_free = Free;
Free = Heap_Bottom;
saved_memtop = MemTop;
/* -*-C-*-
-Copyright (c) 1988 Massachusetts Institute of Technology
+Copyright (c) 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
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.29 1988/09/29 04:58:22 jinx Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/fhooks.c,v 9.30 1989/05/31 01:50:09 jinx Rel $
*
* This file contains hooks and handles for the new fluid bindings
* scheme for multiprocessors.
{
Primitive_1_Arg();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Pop_Primitive_Frame(1);
/* Save previous fluid bindings for later restore */
Push(STACK_FRAME_HEADER);
Pushed();
PRIMITIVE_ABORT(PRIM_APPLY);
+ /*NOTREACHED*/
}
\f
/* Utilities for the primitives below. */
/* -*-C-*-
-Copyright (c) 1987, 1988 Massachusetts Institute of Technology
+Copyright (c) 1987, 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
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/futures.h,v 9.24 1988/08/15 20:47:48 cph Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/futures.h,v 9.25 1989/05/31 01:50:14 jinx Rel $
*
* This file contains macros useful for dealing with futures
*/
ASSUMPTION: The SYMBOL slot of a VARIABLE does NOT contain a future, nor
do the cached lexical address slots.
+ ASSUMPTION: Environment structure, which is created only by the
+ interpreter, never contains FUTUREs on its spine.
+
ASSUMPTION: History objects are never created using futures.
ASSUMPTION: State points, which are created only by the interpreter,
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/hooks.c,v 9.35 1989/03/27 23:15:12 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/hooks.c,v 9.36 1989/05/31 01:50:19 jinx Rel $
Copyright (c) 1988, 1989 Massachusetts Institute of Technology
{
fast Pointer scan_list, *scan_stack;
fast long number_of_args, i;
-#ifdef butterfly
+#ifdef PARALLEL_PROCESSOR
Pointer *saved_stack_pointer;
#endif
Primitive_2_Args();
list into a linear (vector-like) form, so as to avoid the
overhead of traversing the list twice. Unfortunately, the
overhead of maintaining this other form (e.g. PRIMITIVE_GC_If_Needed)
- is sufficiently high that it probably makes up for the time saved. */
+ is sufficiently high that it probably makes up for the time saved.
+ */
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Touch_In_Primitive( Arg2, scan_list);
number_of_args = 0;
- while (Type_Code( scan_list) == TC_LIST)
+ while (OBJECT_TYPE( scan_list) == TC_LIST)
{
number_of_args += 1;
Touch_In_Primitive( Vector_Ref( scan_list, CONS_CDR), scan_list);
Pop_Primitive_Frame( 2);
\f
Will_Push( (number_of_args + STACK_ENV_EXTRA_SLOTS + 1));
-#ifdef butterfly
+#ifdef PARALLEL_PROCESSOR
saved_stack_pointer = Stack_Pointer;
#endif
scan_stack = Simulate_Pushing (number_of_args);
Touch_In_Primitive (Arg2, scan_list);
while (i > 0)
{
-#ifdef butterfly
+#ifdef PARALLEL_PROCESSOR
/* Check for abominable case of someone bashing the arg list. */
- if (Type_Code( scan_list) != TC_LIST)
+ if (OBJECT_TYPE( scan_list) != TC_LIST)
{
Stack_Pointer = saved_stack_pointer;
signal_error_from_primitive (ERR_ARG_2_BAD_RANGE);
Pointer Control_Point;
Primitive_1_Arg ();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
CWCC (RC_RESTORE_HISTORY);
Vector_Set (Control_Point, STACKLET_REUSE_FLAG, NIL);
PRIMITIVE_ABORT (PRIM_APPLY);
Pointer Control_Point;
Primitive_1_Arg ();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
+
#ifdef USE_STACKLETS
CWCC (RC_RESTORE_DONT_COPY_HISTORY);
{
Primitive_3_Args();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
/*
This is done outside the Will_Push because the space for it
is guaranteed by the interpreter before it gets here.
case FIXNUM_ZERO:
{
/* New-style thunk used by compiled code. */
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Pop_Primitive_Frame (1);
Will_Push (CONTINUATION_SIZE + STACK_ENV_EXTRA_SLOTS + 1);
Store_Return (RC_SNAP_NEED_THUNK);
default:
{
/* Old-style thunk used by interpreted code. */
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Pop_Primitive_Frame (1);
Will_Push (CONTINUATION_SIZE);
Store_Return (RC_SNAP_NEED_THUNK);
Pointer New_Point, Old_Point;
Primitive_4_Args();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
guarantee_state_point();
if (Arg1 == NIL)
Old_Point = Current_State_Point;
{
Primitive_2_Args();
- if (Type_Code(Arg2) != GLOBAL_ENV)
+ PRIMITIVE_CANONICALIZE_CONTEXT();
+ if (OBJECT_TYPE(Arg2) != GLOBAL_ENV)
Arg_2_Type(TC_ENVIRONMENT);
Pop_Primitive_Frame(2);
Store_Env(Arg2);
{
Primitive_1_Arg();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
if (!(HUNK3_P(Arg1)))
error_wrong_type_arg (1);
{
Primitive_1_Arg();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Arg_1_Type(TC_VECTOR);
if (Vector_Ref(Arg1, STATE_POINT_TAG) != Get_Fixed_Obj_Slot(State_Point_Tag))
signal_error_from_primitive(ERR_ARG_1_WRONG_TYPE);
Pointer *First_Rib, *Rib, *Second_Rib;
Primitive_1_Arg();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
/* Remove one reduction from the history before saving it */
First_Rib = Get_Pointer(History[HIST_RIB]);
Second_Rib = Get_Pointer(First_Rib[RIB_NEXT_REDUCTION]);
Pointer mask;
Primitive_2_Args();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Arg_1_Type(TC_FIXNUM);
Pop_Primitive_Frame(2);
mask = MAKE_SIGNED_FIXNUM(FETCH_INTERRUPT_MASK());
long new_interrupt_mask, old_interrupt_mask;
Primitive_2_Args();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Arg_1_Type(TC_FIXNUM);
Pop_Primitive_Frame(2);
mask = MAKE_SIGNED_FIXNUM(FETCH_INTERRUPT_MASK());
{
Primitive_2_Args();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Arg_1_Type(TC_CONTROL_POINT);
Our_Throw(false, Arg1);
Within_Stacklet_Backout();
/* -*-C-*-
-Copyright (c) 1987, 1988 Massachusetts Institute of Technology
+Copyright (c) 1987, 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
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/intercom.c,v 9.25 1988/08/15 20:49:47 cph Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/intercom.c,v 9.26 1989/05/31 01:50:26 jinx Rel $
*
* Single-processor simulation of locking, propagating, and
* communicating stuff.
DEFINE_PRIMITIVE ("GLOBAL-INTERRUPT", Prim_send_global_interrupt, 3, 3, 0)
{
long Saved_Zone, Which_Level;
-
Primitive_3_Args();
+
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Arg_1_Type(TC_FIXNUM);
Range_Check(Which_Level, Arg1, 0, 3, ERR_ARG_1_BAD_RANGE);
Save_Time_Zone(Zone_Global_Int);
DEFINE_PRIMITIVE ("GET-WORK", Prim_get_work, 1, 1, 0)
{
Pointer Get_Work();
+ Pointer result;
Primitive_1_Arg();
- PRIMITIVE_RETURN(Get_Work(Arg1));
+ result = Get_Work(Arg1);
+ PRIMITIVE_RETURN(result);
}
Pointer Get_Work(Arg1)
Pointer The_Queue, Queue_Head, Result, The_Prim;
/* This gets this primitive's code which is in the expression register. */
- The_Prim = Fetch_Expression();
+ The_Prim = Regs[REGBLOCK_PRIMITIVE];
The_Queue = Get_Fixed_Obj_Slot(The_Work_Queue);
if (The_Queue != NIL)
{
Queue_Head = Vector_Ref(The_Queue, CONS_CAR);
}
if ((The_Queue == NIL) || (Queue_Head == NIL))
+ {
if (Arg1 == NIL)
{
printf("\nNo work available, but some has been requested!\n");
}
else
{
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Pop_Primitive_Frame(1);
Will_Push(2 * (STACK_ENV_EXTRA_SLOTS + 1) + 1 + CONTINUATION_SIZE);
Push(NIL); /* Upon return, no hope if there is no work */
Push(STACK_FRAME_HEADER);
Pushed();
PRIMITIVE_ABORT(PRIM_APPLY);
+ }
}
Result = Vector_Ref(Queue_Head, CONS_CAR);
Queue_Head = Vector_Ref(Queue_Head, CONS_CDR);
extern Pointer make_primitive();
Primitive_1_Arg();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
if (gc_prim == NIL)
{
gc_prim = make_primitive("GARBAGE-COLLECT");
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.49 1989/03/28 20:39:19 jinx Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/interp.c,v 9.50 1989/05/31 01:50:31 jinx Exp $
*
* This file contains the heart of the Scheme Scode
* interpreter
PROCEED_AFTER_PRIMITIVE();
case CODE_MAP(PRIM_POP_RETURN):
goto Pop_Return;
+
+ case PRIM_REENTER:
+ BACK_OUT_AFTER_PRIMITIVE();
+ LOG_FUTURES();
+ case CODE_MAP(PRIM_REENTER):
+ goto Perform_Application;
\f
case PRIM_TOUCH:
{
BACK_OUT_AFTER_PRIMITIVE();
Val = temp;
LOG_FUTURES();
- /* fall through */
}
-
+ /* fall through */
case CODE_MAP(PRIM_TOUCH):
TOUCH_SETUP(Val);
goto Internal_Apply;
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.41 1988/09/29 05:02:21 jinx Exp $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/lookup.h,v 9.42 1989/05/31 01:50:41 jinx Rel $ */
/* Macros and declarations for the variable lookup code. */
extern long extend_frame();
+/* Definition recaches eagerly by default. */
+
+#ifndef DEFINITION_RECACHES_LAZILY
+#ifndef DEFINITION_RECACHES_EAGERLY
+#define DEFINITION_RECACHES_EAGERLY
+#endif
+#endif
+
#ifndef DEFINITION_RECACHES_EAGERLY
extern long compiler_uncache();
/* -*-C-*-
-Copyright (c) 1987, 1988 Massachusetts Institute of Technology
+Copyright (c) 1987, 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
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/memmag.c,v 9.36 1989/03/27 23:15:41 jinx Exp $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/memmag.c,v 9.37 1989/05/31 01:50:46 jinx Exp $ */
/* Memory management top level.
Pointer GC_Daemon_Proc;
Primitive_1_Arg();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Arg_1_Type(TC_FIXNUM);
if (Free > Heap_Top)
{
/* -*-C-*-
-Copyright (c) 1987 Massachusetts Institute of Technology
+Copyright (c) 1987, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
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/prims.h,v 9.33 1988/08/15 20:53:04 cph Exp $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prims.h,v 9.34 1989/05/31 01:50:51 jinx Rel $ */
/* This file contains some macros for defining primitives,
for argument type or value checking, and for accessing
#define PRIMITIVE_RETURN(value) return (value)
#define PRIMITIVE_ABORT(action) longjmp(*Back_To_Eval, (action))
+
+extern void canonicalize_primitive_context();
+
+#define PRIMITIVE_CANONICALIZE_CONTEXT() \
+{ \
+ canonicalize_primitive_context(); \
+}
\f
/* Preambles for primitive procedures. These store the arguments into
* local variables for fast access.
/* -*-C-*-
-Copyright (c) 1988 Massachusetts Institute of Technology
+Copyright (c) 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
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/purify.c,v 9.37 1989/03/27 23:15:46 jinx Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/purify.c,v 9.38 1989/05/31 01:50:57 jinx Exp $
*
* This file contains the code that copies objects into pure
* and constant space.
Pointer Object, Lost_Objects, Purify_Result, Daemon;
Primitive_3_Args();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Save_Time_Zone(Zone_Purify);
if ((Arg2 != SHARP_T) && (Arg2 != NIL))
Primitive_Error(ERR_ARG_2_WRONG_TYPE);
/* -*-C-*-
-Copyright (c) 1987, 1988 Massachusetts Institute of Technology
+Copyright (c) 1987, 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
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/step.c,v 9.25 1988/08/15 20:55:24 cph Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/step.c,v 9.26 1989/05/31 01:51:02 jinx Rel $
*
* Support for the stepper
*/
{
Primitive_3_Args();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Install_Traps(Arg3, false);
Pop_Primitive_Frame(3);
Store_Expression(Arg1);
long Number_Of_Args, i;
Primitive_3_Args();
+ PRIMITIVE_CANONICALIZE_CONTEXT();
Arg_3_Type(TC_HUNK3);
Number_Of_Args = 0;
Next_From_Slot = Arg2;
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/utils.c,v 9.41 1989/05/24 15:11:28 jinx Exp $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/utils.c,v 9.42 1989/05/31 01:51:07 jinx Rel $ */
/* This file contains utilities for interrupts, errors, etc. */
return;
}
\f
+/*
+ canonicalize_primitive_context should be used by "unsafe" primitives
+ to guarantee that their execution context is the expected one, ie.
+ they are called from the interpreter.
+ If they are called from compiled code, they should abort to the
+ interpreter and reenter.
+ Note: This is called only from the macro PRIMITIVE_CANONICALIZE_CONTEXT,
+ so that the work can be divided between them if it is an issue.
+ */
+
+extern void canonicalize_primitive_context();
+
+void
+canonicalize_primitive_context()
+{
+ long nargs;
+ Pointer primitive;
+
+ primitive = Regs[REGBLOCK_PRIMITIVE];
+ if (OBJECT_TYPE(primitive) != TC_PRIMITIVE)
+ {
+ fprintf(stderr,
+ "\ncanonicalize_primitive_context invoked when not in primitive!\n");
+ Microcode_Termination(TERM_BAD_BACK_OUT);
+ }
+ nargs = PRIMITIVE_N_ARGUMENTS(primitive);
+ if ((OBJECT_TYPE(Stack_Ref(nargs))) != TC_COMPILED_ENTRY)
+ {
+ return;
+ }
+ /* The primitive has been invoked from compiled code. */
+ PRIMITIVE_ABORT(PRIM_REENTER);
+ /*NOTREACHED*/
+}
+\f
/* Useful error procedures */
/* Note that backing out of the primitives happens after aborting,
at the root, indicating that the microcode variable rather
than the state space contains the current state space
location.
+
+ NOTE: This procedure is invoked both by primitives and the interpreter
+ itself. As such, it is using the pun that PRIMITIVE_ABORT is just a
+ (non-local) return to the interpreter. This should be cleaned up.
+ NOTE: Any primitive that invokes this procedure must do a
+ PRIMITIVE_CANONICALIZE_CONTEXT() first!
*/
\f
void
Compiler_Get_Fixed_Objects()
{
if (Valid_Fixed_Obj_Vector())
+ {
return (Get_Fixed_Obj_Slot(Me_Myself));
+ }
else
+ {
return (NIL);
+ }
}
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 10.78 1989/05/26 20:22:19 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 10.79 1989/05/31 01:51:15 jinx Exp $
Copyright (c) 1988, 1989 Massachusetts Institute of Technology
#define VERSION 10
#endif
#ifndef SUBVERSION
-#define SUBVERSION 78
+#define SUBVERSION 79
#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/const.h,v 9.31 1989/05/24 05:32:23 jinx Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/const.h,v 9.32 1989/05/31 01:49:52 jinx Exp $
*
* Named constants used throughout the interpreter
*
#define PRIM_POP_RETURN -7
#define PRIM_TOUCH -8
#define PRIM_APPLY_INTERRUPT -9
+#define PRIM_REENTER -10
#define ABORT_NAME_TABLE \
{ \
/* -6 */ "NO-TRAP_APPLY", \
/* -7 */ "POP-RETURN", \
/* -8 */ "TOUCH", \
- /* -9 */ "APPLY-INTERRUPT" \
+ /* -9 */ "APPLY-INTERRUPT", \
+ /* -10 */ "REENTER" \
}
/* Some numbers of parameters which mean something special */
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.49 1989/03/28 20:39:19 jinx Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/interp.c,v 9.50 1989/05/31 01:50:31 jinx Exp $
*
* This file contains the heart of the Scheme Scode
* interpreter
PROCEED_AFTER_PRIMITIVE();
case CODE_MAP(PRIM_POP_RETURN):
goto Pop_Return;
+
+ case PRIM_REENTER:
+ BACK_OUT_AFTER_PRIMITIVE();
+ LOG_FUTURES();
+ case CODE_MAP(PRIM_REENTER):
+ goto Perform_Application;
\f
case PRIM_TOUCH:
{
BACK_OUT_AFTER_PRIMITIVE();
Val = temp;
LOG_FUTURES();
- /* fall through */
}
-
+ /* fall through */
case CODE_MAP(PRIM_TOUCH):
TOUCH_SETUP(Val);
goto Internal_Apply;
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.41 1988/09/29 05:02:21 jinx Exp $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/lookup.h,v 9.42 1989/05/31 01:50:41 jinx Rel $ */
/* Macros and declarations for the variable lookup code. */
extern long extend_frame();
+/* Definition recaches eagerly by default. */
+
+#ifndef DEFINITION_RECACHES_LAZILY
+#ifndef DEFINITION_RECACHES_EAGERLY
+#define DEFINITION_RECACHES_EAGERLY
+#endif
+#endif
+
#ifndef DEFINITION_RECACHES_EAGERLY
extern long compiler_uncache();
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 10.78 1989/05/26 20:22:19 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 10.79 1989/05/31 01:51:15 jinx Exp $
Copyright (c) 1988, 1989 Massachusetts Institute of Technology
#define VERSION 10
#endif
#ifndef SUBVERSION
-#define SUBVERSION 78
+#define SUBVERSION 79
#endif
#ifndef UCODE_TABLES_FILENAME