From 17afe65125b8eea05d98d0cb4faa3830eaacea24 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Sun, 3 Apr 2011 17:46:55 +0900 Subject: [PATCH] adding integer->immediate utility --- lib/chibi/ast.c | 9 +++++++++ lib/chibi/ast.module | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/chibi/ast.c b/lib/chibi/ast.c index 62d950d4..32786719 100644 --- a/lib/chibi/ast.c +++ b/lib/chibi/ast.c @@ -164,6 +164,14 @@ static sexp sexp_object_size (sexp ctx sexp_api_params(self, n), sexp x) { return sexp_make_fixnum(sexp_type_size_of_object(t, x)); } +static sexp sexp_integer_to_immediate (sexp ctx sexp_api_params(self, n), sexp i, sexp dflt) { + sexp x = (sexp)sexp_unbox_fixnum(i); + sexp_assert_type(ctx, sexp_fixnump, SEXP_FIXNUM, i); + if (sexp_pointerp(x)) + return dflt; + return x; +} + static sexp sexp_analyze_op (sexp ctx sexp_api_params(self, n), sexp x, sexp e) { sexp ctx2 = ctx; if (sexp_envp(e)) { @@ -285,6 +293,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_opt(ctx, env, "integer->immediate", 2, sexp_integer_to_immediate, SEXP_FALSE); 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 a04fa01a..373e12f4 100644 --- a/lib/chibi/ast.module +++ b/lib/chibi/ast.module @@ -29,7 +29,7 @@ procedure-code procedure-vars procedure-name bytecode-name bytecode-literals type? type-name type-cpl type-parent type-slots - object-size gc) + object-size integer->immediate gc) (import-immutable (scheme)) (include-shared "ast") (include "ast.scm"))