From 2fb924f64f6cf47a9b4d6e8a22433ac2c5739379 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 20 Aug 2009 14:27:38 +0200 Subject: programs have their own tc7 now * libguile/tags.h (scm_tc7_program): * libguile/programs.h: Programs now have their own tc7 code. Fix up the macros appropriately. * libguile/programs.c: Remove smobby bits, leaving marking, printing, and application for other parts of Guile. * libguile/debug.c (scm_procedure_source): * libguile/eval.c (scm_trampoline_0, scm_trampoline_1) (scm_trampoline_2): Add cases for tc7_program. * libguile/eval.i.c (CEVAL, SCM_APPLY): * libguile/evalext.c (scm_self_evaluating_p): * libguile/gc-card.c (scm_i_sweep_card, scm_i_tag_name): * libguile/gc-mark.c (1): * libguile/print.c (iprin1): * libguile/procs.c (scm_procedure_p, scm_thunk_p) * libguile/vm-i-system.c (make-closure): Adapt to new procedure representation. * libguile/procprop.c (scm_i_procedure_arity): Do the right thing for programs. * test-suite/tests/procprop.test ("procedure-arity"): Arity test now succeeds. * libguile/goops.c (scm_class_of): Programs now belong to the class , not a smob class. * libguile/vm.h (struct vm, struct vm_cont): * libguile/vm-engine.c (vm_engine): * libguile/frames.h (SCM_FRAME_BYTE_CAST, struct vm_frame): * libguile/frames.c (scm_c_make_vm_frame): Fix usages of scm_byte_t, changing them to scm_t_uint8. --- libguile/gc-mark.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'libguile/gc-mark.c') diff --git a/libguile/gc-mark.c b/libguile/gc-mark.c index 84714507b..ccbcdcc2f 100644 --- a/libguile/gc-mark.c +++ b/libguile/gc-mark.c @@ -40,6 +40,7 @@ extern unsigned long * __libc_ia64_register_backing_store_base; #include "libguile/smob.h" #include "libguile/unif.h" #include "libguile/async.h" +#include "libguile/programs.h" #include "libguile/ports.h" #include "libguile/root.h" #include "libguile/strings.h" @@ -285,6 +286,13 @@ scm_gc_mark_dependencies (SCM p) scm_gc_mark (SCM_CLOSCAR (ptr)); ptr = SCM_ENV (ptr); goto gc_mark_nimp; + case scm_tc7_program: + if (SCM_PROGRAM_FREE_VARIABLES (ptr) != SCM_BOOL_F) + scm_gc_mark (SCM_PROGRAM_FREE_VARIABLES (ptr)); + if (SCM_PROGRAM_OBJTABLE (ptr) != SCM_BOOL_F) + scm_gc_mark (SCM_PROGRAM_OBJTABLE (ptr)); + ptr = SCM_PROGRAM_OBJCODE (ptr); + goto gc_mark_nimp; case scm_tc7_vector: i = SCM_SIMPLE_VECTOR_LENGTH (ptr); if (i == 0) -- cgit v1.2.3