From f3f30f59b64eabb5705a2c89c0260bfb1f88a9da Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Mon, 3 Apr 2017 23:15:46 +0900 Subject: [PATCH] add immutable? to (chibi ast) --- lib/chibi/ast.c | 5 +++++ lib/chibi/ast.sld | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/chibi/ast.c b/lib/chibi/ast.c index ab403cbd..f61a292b 100644 --- a/lib/chibi/ast.c +++ b/lib/chibi/ast.c @@ -326,6 +326,10 @@ sexp sexp_object_size (sexp ctx, sexp self, sexp_sint_t n, sexp x) { return sexp_make_fixnum(sexp_type_size_of_object(t, x)); } +sexp sexp_immutablep_op (sexp ctx, sexp self, sexp_sint_t n, sexp x) { + return sexp_pointerp(x) ? sexp_make_boolean(sexp_immutablep(x)) : SEXP_TRUE; +} + sexp sexp_integer_to_immediate (sexp ctx, sexp self, sexp_sint_t n, sexp i, sexp dflt) { sexp x = (sexp)sexp_unbox_fixnum(i); sexp_assert_type(ctx, sexp_fixnump, SEXP_FIXNUM, i); @@ -694,6 +698,7 @@ sexp sexp_init_library (sexp ctx, sexp self, sexp_sint_t n, sexp env, const char sexp_define_foreign(ctx, env, "env-push!", 3, sexp_env_push_op); sexp_define_foreign(ctx, env, "core-code", 1, sexp_core_code_op); sexp_define_foreign(ctx, env, "object-size", 1, sexp_object_size); + sexp_define_foreign(ctx, env, "immutable?", 1, sexp_immutablep_op); sexp_define_foreign_opt(ctx, env, "integer->immediate", 2, sexp_integer_to_immediate, SEXP_FALSE); sexp_define_foreign_opt(ctx, env, "object->integer", 1, sexp_object_to_integer, SEXP_FALSE); sexp_define_foreign(ctx, env, "gc", 0, sexp_gc_op); diff --git a/lib/chibi/ast.sld b/lib/chibi/ast.sld index 05460b8e..603ed313 100644 --- a/lib/chibi/ast.sld +++ b/lib/chibi/ast.sld @@ -38,7 +38,8 @@ object-size object->integer integer->immediate gc gc-usecs gc-count atomically thread-list abort string-contains string-cursor-copy! errno integer->error-string - flatten-dot update-free-vars! setenv unsetenv safe-setenv) + flatten-dot update-free-vars! setenv unsetenv safe-setenv + immutable?) (import (chibi)) (include-shared "ast") (include "ast.scm"))