Skip to content
Snippets Groups Projects
Commit e4017c89 authored by wlott's avatar wlott
Browse files

Added support for type_ByteCodeFunction and type_ByteCodeClosure, two

additional closure types.
parent 5741aafc
No related branches found
No related tags found
No related merge requests found
/* /*
* Stop and Copy GC based on Cheney's algorithm. * Stop and Copy GC based on Cheney's algorithm.
* *
* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/gc.c,v 1.33 1992/03/08 18:39:38 wlott Exp $ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/gc.c,v 1.34 1992/04/15 00:45:48 wlott Exp $
* *
* Written by Christopher Hoover. * Written by Christopher Hoover.
*/ */
...@@ -607,7 +607,6 @@ lispobj *from_space, *from_space_free_pointer; ...@@ -607,7 +607,6 @@ lispobj *from_space, *from_space_free_pointer;
/* Code and Code-Related Objects */ /* Code and Code-Related Objects */
static lispobj trans_function_header(); static lispobj trans_function_header();
static lispobj trans_closure_function_header();
static lispobj trans_boxed(); static lispobj trans_boxed();
static static
...@@ -635,20 +634,12 @@ lispobj *where, object; ...@@ -635,20 +634,12 @@ lispobj *where, object;
type = TypeOf(first); type = TypeOf(first);
switch (type) { switch (type) {
case type_FunctionHeader: case type_FunctionHeader:
copy = trans_function_header(object);
break;
case type_ClosureFunctionHeader: case type_ClosureFunctionHeader:
copy = trans_closure_function_header(object); copy = trans_function_header(object);
break; break;
case type_ClosureHeader: default:
case type_FuncallableInstanceHeader:
copy = trans_boxed(object); copy = trans_boxed(object);
break; break;
default:
fprintf(stderr, "GC lossage. Bogus function pointer.\n");
fprintf(stderr, "Pointer: 0x%08x, Header: 0x%08x\n",
(unsigned long) object, (unsigned long) first);
gc_lose();
} }
first = *first_pointer = copy; first = *first_pointer = copy;
...@@ -874,35 +865,6 @@ lispobj object; ...@@ -874,35 +865,6 @@ lispobj object;
} }
static
scav_closure_function_header(where, object)
lispobj *where, object;
{
fprintf(stderr, "GC lossage. Should not be scavenging a ");
fprintf(stderr, "Closure Function Header.\n");
fprintf(stderr, "where = 0x%08x, object = 0x%08x",
(unsigned long) where, (unsigned long) object);
gc_lose();
}
static lispobj
trans_closure_function_header(object)
lispobj object;
{
struct function_header *fheader;
unsigned long offset;
struct code *code, *ncode;
fheader = (struct function_header *) PTR(object);
offset = HeaderValue(fheader->header) * 4;
/* Transport the whole code object */
code = (struct code *) ((unsigned long) fheader - offset);
ncode = trans_code(code);
return ((lispobj) ncode + offset) | type_FunctionPointer;
}
/* Structures */ /* Structures */
...@@ -1799,10 +1761,12 @@ gc_init() ...@@ -1799,10 +1761,12 @@ gc_init()
scavtab[type_ComplexArray] = scav_boxed; scavtab[type_ComplexArray] = scav_boxed;
scavtab[type_CodeHeader] = scav_code_header; scavtab[type_CodeHeader] = scav_code_header;
scavtab[type_FunctionHeader] = scav_function_header; scavtab[type_FunctionHeader] = scav_function_header;
scavtab[type_ClosureFunctionHeader] = scav_closure_function_header; scavtab[type_ClosureFunctionHeader] = scav_function_header;
scavtab[type_ReturnPcHeader] = scav_return_pc_header; scavtab[type_ReturnPcHeader] = scav_return_pc_header;
scavtab[type_ClosureHeader] = scav_boxed; scavtab[type_ClosureHeader] = scav_boxed;
scavtab[type_FuncallableInstanceHeader] = scav_boxed; scavtab[type_FuncallableInstanceHeader] = scav_boxed;
scavtab[type_ByteCodeFunction] = scav_boxed;
scavtab[type_ByteCodeClosure] = scav_boxed;
scavtab[type_ValueCellHeader] = scav_boxed; scavtab[type_ValueCellHeader] = scav_boxed;
scavtab[type_SymbolHeader] = scav_boxed; scavtab[type_SymbolHeader] = scav_boxed;
scavtab[type_BaseChar] = scav_immediate; scavtab[type_BaseChar] = scav_immediate;
...@@ -1842,10 +1806,12 @@ gc_init() ...@@ -1842,10 +1806,12 @@ gc_init()
transother[type_ComplexArray] = trans_boxed; transother[type_ComplexArray] = trans_boxed;
transother[type_CodeHeader] = trans_code_header; transother[type_CodeHeader] = trans_code_header;
transother[type_FunctionHeader] = trans_function_header; transother[type_FunctionHeader] = trans_function_header;
transother[type_ClosureFunctionHeader] = trans_closure_function_header; transother[type_ClosureFunctionHeader] = trans_function_header;
transother[type_ReturnPcHeader] = trans_return_pc_header; transother[type_ReturnPcHeader] = trans_return_pc_header;
transother[type_ClosureHeader] = trans_boxed; transother[type_ClosureHeader] = trans_boxed;
transother[type_FuncallableInstanceHeader] = trans_boxed; transother[type_FuncallableInstanceHeader] = trans_boxed;
transother[type_ByteCodeFunction] = trans_boxed;
transother[type_ByteCodeClosure] = trans_boxed;
transother[type_ValueCellHeader] = trans_boxed; transother[type_ValueCellHeader] = trans_boxed;
transother[type_SymbolHeader] = trans_boxed; transother[type_SymbolHeader] = trans_boxed;
transother[type_BaseChar] = trans_immediate; transother[type_BaseChar] = trans_immediate;
...@@ -1895,7 +1861,7 @@ gc_init() ...@@ -1895,7 +1861,7 @@ gc_init()
#if 0 #if 0
/* Shouldn't see these so just lose if it happens */ /* Shouldn't see these so just lose if it happens */
sizetab[type_FunctionHeader] = size_function_header; sizetab[type_FunctionHeader] = size_function_header;
sizetab[type_ClosureFunctionHeader] = size_closure_function_header; sizetab[type_ClosureFunctionHeader] = size_function_header;
sizetab[type_ReturnPcHeader] = size_return_pc_header; sizetab[type_ReturnPcHeader] = size_return_pc_header;
#endif #endif
sizetab[type_ClosureHeader] = size_boxed; sizetab[type_ClosureHeader] = size_boxed;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment