From e4017c8935aaa34c5edd84556e9b1d2d6051444d Mon Sep 17 00:00:00 2001 From: wlott <wlott> Date: Wed, 15 Apr 1992 00:45:48 +0000 Subject: [PATCH] Added support for type_ByteCodeFunction and type_ByteCodeClosure, two additional closure types. --- ldb/gc.c | 54 ++++++++++-------------------------------------------- 1 file changed, 10 insertions(+), 44 deletions(-) diff --git a/ldb/gc.c b/ldb/gc.c index 02592d336..536770710 100644 --- a/ldb/gc.c +++ b/ldb/gc.c @@ -1,7 +1,7 @@ /* * 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. */ @@ -607,7 +607,6 @@ lispobj *from_space, *from_space_free_pointer; /* Code and Code-Related Objects */ static lispobj trans_function_header(); -static lispobj trans_closure_function_header(); static lispobj trans_boxed(); static @@ -635,20 +634,12 @@ lispobj *where, object; type = TypeOf(first); switch (type) { case type_FunctionHeader: - copy = trans_function_header(object); - break; case type_ClosureFunctionHeader: - copy = trans_closure_function_header(object); + copy = trans_function_header(object); break; - case type_ClosureHeader: - case type_FuncallableInstanceHeader: + default: copy = trans_boxed(object); 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; @@ -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 */ @@ -1799,10 +1761,12 @@ gc_init() scavtab[type_ComplexArray] = scav_boxed; scavtab[type_CodeHeader] = scav_code_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_ClosureHeader] = scav_boxed; scavtab[type_FuncallableInstanceHeader] = scav_boxed; + scavtab[type_ByteCodeFunction] = scav_boxed; + scavtab[type_ByteCodeClosure] = scav_boxed; scavtab[type_ValueCellHeader] = scav_boxed; scavtab[type_SymbolHeader] = scav_boxed; scavtab[type_BaseChar] = scav_immediate; @@ -1842,10 +1806,12 @@ gc_init() transother[type_ComplexArray] = trans_boxed; transother[type_CodeHeader] = trans_code_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_ClosureHeader] = trans_boxed; transother[type_FuncallableInstanceHeader] = trans_boxed; + transother[type_ByteCodeFunction] = trans_boxed; + transother[type_ByteCodeClosure] = trans_boxed; transother[type_ValueCellHeader] = trans_boxed; transother[type_SymbolHeader] = trans_boxed; transother[type_BaseChar] = trans_immediate; @@ -1895,7 +1861,7 @@ gc_init() #if 0 /* Shouldn't see these so just lose if it happens */ 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; #endif sizetab[type_ClosureHeader] = size_boxed; -- GitLab