From 78ac092a49eeadaab90b6ff14f719e0c3b4b7c0e Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Mon, 20 Sep 2010 23:06:21 +0900 Subject: [PATCH] adding (gc) to (chibi ast) module --- lib/chibi/ast.c | 15 +++++++++++++++ lib/chibi/ast.module | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/chibi/ast.c b/lib/chibi/ast.c index 2455b8a6..cfc45b1b 100644 --- a/lib/chibi/ast.c +++ b/lib/chibi/ast.c @@ -4,6 +4,10 @@ #include +#if ! SEXP_USE_BOEHM +extern sexp sexp_gc (sexp ctx, size_t *sum_freed); +#endif + static void sexp_define_type_predicate (sexp ctx, sexp env, char *cname, sexp_uint_t type) { sexp_gc_var2(name, op); sexp_gc_preserve2(ctx, name, op); @@ -181,6 +185,16 @@ static sexp sexp_optimize (sexp ctx sexp_api_params(self, n), sexp x) { return res; } +static sexp sexp_gc_op (sexp ctx sexp_api_params(self, n)) { + size_t sum_freed=0; +#if SEXP_USE_BOEHM + GC_gcollect(); +#else + sexp_gc(ctx, &sum_freed); +#endif + return sexp_make_unsigned_integer(ctx, sum_freed); +} + #define sexp_define_type(ctx, name, tag) \ sexp_env_define(ctx, env, sexp_intern(ctx, name, -1), sexp_type_by_index(ctx, tag)); @@ -270,6 +284,7 @@ sexp sexp_init_library (sexp ctx sexp_api_params(self, n), sexp env) { sexp_define_foreign(ctx, env, "type-cpl", 1, sexp_type_cpl_op); sexp_define_foreign(ctx, env, "type-slots", 1, sexp_type_slots_op); sexp_define_foreign(ctx, env, "object-size", 1, sexp_object_size); + sexp_define_foreign(ctx, env, "gc", 0, sexp_gc_op); return SEXP_VOID; } diff --git a/lib/chibi/ast.module b/lib/chibi/ast.module index 5a590489..a3e3ce15 100644 --- a/lib/chibi/ast.module +++ b/lib/chibi/ast.module @@ -28,7 +28,7 @@ opcode-variadic? procedure-code procedure-vars procedure-name bytecode-name type? type-name type-cpl type-parent type-slots - object-size) + object-size gc) (import-immutable (scheme)) (include-shared "ast") (include "ast.scm"))