/* -*-C-*-
-$Id: utils.c,v 9.62 1993/08/10 16:17:44 adams Exp $
+$Id: utils.c,v 9.63 1993/08/23 04:47:15 gjr Exp $
Copyright (c) 1987-1993 Massachusetts Institute of Technology
int *From = &(local_circle[0]), *To = &(debug_circle[0]), i;
for (i = 0; i < local_nslots; i++)
- {
*To++ = *From++;
- }
debug_nslots = local_nslots;
debug_slotno = local_slotno;
}
if ((Err < 0) || (Err >= (VECTOR_LENGTH (Error_Vector))))
{
if (VECTOR_LENGTH (Error_Vector) == 0)
- {
error_death (Err, "No error handlers: Empty handlers vector");
/*NOTREACHED*/
- }
Handler = (VECTOR_REF (Error_Vector, ERR_BAD_ERROR_CODE));
}
else
STACK_PUSH (v);
}
else if ((Err >= SMALLEST_FIXNUM) && (Err <= BIGGEST_FIXNUM))
- {
STACK_PUSH (LONG_TO_FIXNUM (Err));
- }
else
- {
STACK_PUSH (LONG_TO_UNSIGNED_FIXNUM (ERR_BAD_ERROR_CODE));
- }
/* Procedure: Handler */
STACK_PUSH (Handler);
STACK_PUSH (STACK_FRAME_HEADER + 2);
new_hist = (copy_history (hist_obj));
if (new_hist == SHARP_F)
- {
return (false);
- }
else if (new_hist == SHARP_T)
{
outf_fatal ("\nBad history to restore.\n");
{
Request_GC(size);
if ((Free + size) >= Heap_Top)
- {
Microcode_Termination(TERM_STACK_OVERFLOW);
- }
}
Free[STACKLET_LENGTH] = MAKE_OBJECT (TC_MANIFEST_VECTOR, (size - 1));
SET_STACK_GUARD (& (Free[STACKLET_HEADER_SIZE]));
(UNSIGNED_FIXNUM_TO_LONG
(FAST_MEMORY_REF (Target, STATE_POINT_DISTANCE_TO_ROOT)));
if (State_Space == SHARP_F)
- {
Current_Location = Current_State_Point;
- }
else
- {
Current_Location = MEMORY_REF (State_Space, STATE_SPACE_NEAREST_POINT);
- }
if (Target == Current_Location)
{
for (Path_Point = Current_Location, Merge_Depth = From_Depth;
Merge_Depth > Distance;
Merge_Depth--)
- {
Path_Point = FAST_MEMORY_REF (Path_Point, STATE_POINT_NEARER_POINT);
- }
for (Path_Ptr = (&(Path[Merge_Depth]));
Merge_Depth >= 0;
Merge_Depth--, Path_Ptr--)
{
if (*Path_Ptr == Path_Point)
- {
break;
- }
Path_Point = FAST_MEMORY_REF (Path_Point, STATE_POINT_NEARER_POINT);
}
DEFUN_VOID (Compiler_Get_Fixed_Objects)
{
if (Valid_Fixed_Obj_Vector())
- {
return (Get_Fixed_Obj_Slot(Me_Myself));
- }
else
- {
return (SHARP_F);
- }
}
extern SCHEME_OBJECT EXFUN (Re_Enter_Interpreter, (void));
extern SCHEME_OBJECT EXFUN (C_call_scheme,
(SCHEME_OBJECT, long, SCHEME_OBJECT *));
+#ifdef WINNT
+#include <windows.h>
+#endif
SCHEME_OBJECT
DEFUN (C_call_scheme, (proc, nargs, argvec),
{
SCHEME_OBJECT primitive, prim_lexpr, * sp, result;
-#ifdef I386
- extern void *C_Frame_Pointer, *C_Stack_Pointer;
- void *cfp, *csp;
-
- cfp = C_Frame_Pointer, csp = C_Stack_Pointer;
-#endif
+#ifdef i386
+ extern void * C_Frame_Pointer, * C_Stack_Pointer;
+ void * cfp, * csp;
- primitive = (Regs [REGBLOCK_PRIMITIVE]);
- prim_lexpr = (Regs [REGBLOCK_LEXPR_ACTUALS]);
+ cfp = C_Frame_Pointer;
+ csp = C_Stack_Pointer;
+#ifdef WINNT
+ try
+#endif /* WINNT */
+#endif /* i386 */
+ {
+ primitive = (Regs [REGBLOCK_PRIMITIVE]);
+ prim_lexpr = (Regs [REGBLOCK_LEXPR_ACTUALS]);
+
+ if (! (PRIMITIVE_P (primitive)))
+ abort_to_interpreter (ERR_CANNOT_RECURSE);
+ /*NOTREACHED*/
+ sp = Stack_Pointer;
+\f
+ Will_Push ((2 * CONTINUATION_SIZE) + (nargs + STACK_ENV_EXTRA_SLOTS + 1));
+ {
+ long i;
- if (! (PRIMITIVE_P (primitive)))
- {
- abort_to_interpreter (ERR_CANNOT_RECURSE);
- /*NOTREACHED*/
- }
- sp = Stack_Pointer;
+ Store_Return (RC_END_OF_COMPUTATION);
+ Store_Expression (primitive);
+ Save_Cont ();
- Will_Push ((2 * CONTINUATION_SIZE) + (nargs + STACK_ENV_EXTRA_SLOTS + 1));
- {
- long i;
+ for (i = nargs; --i >= 0; )
+ STACK_PUSH (argvec[i]);
+ STACK_PUSH (proc);
+ STACK_PUSH (STACK_FRAME_HEADER + nargs);
- Store_Return (RC_END_OF_COMPUTATION);
- Store_Expression (primitive);
- Save_Cont ();
+ Store_Return (RC_INTERNAL_APPLY);
+ Store_Expression (SHARP_F);
+ Save_Cont ();
+ }
+ Pushed ();
+ result = (Re_Enter_Interpreter ());
- for (i = nargs; --i >= 0; )
- STACK_PUSH (argvec[i]);
- STACK_PUSH (proc);
- STACK_PUSH (STACK_FRAME_HEADER + nargs);
+ if (Stack_Pointer != sp)
+ signal_error_from_primitive (ERR_STACK_HAS_SLIPPED);
+ /*NOTREACHED*/
- Store_Return (RC_INTERNAL_APPLY);
- Store_Expression (SHARP_F);
- Save_Cont ();
+ Regs [REGBLOCK_LEXPR_ACTUALS] = prim_lexpr;
+ Regs [REGBLOCK_PRIMITIVE] = primitive;
}
- Pushed ();
- result = (Re_Enter_Interpreter ());
-
- if (Stack_Pointer != sp)
+#ifdef i386
+#ifdef WINNT
+ finally
+#endif /* WINNT */
{
- signal_error_from_primitive (ERR_STACK_HAS_SLIPPED);
- /*NOTREACHED*/
+ C_Frame_Pointer = cfp;
+ C_Stack_Pointer = csp;
}
-
- Regs [REGBLOCK_LEXPR_ACTUALS] = prim_lexpr;
- Regs [REGBLOCK_PRIMITIVE] = primitive;
-
-#ifdef I386
- C_Frame_Pointer = cfp;
- C_Stack_Pointer = csp;
-#endif
+#endif /* i386 */
return result;
}