]> gitweb.factorcode.org Git - factor.git/commitdiff
Add callstack-bounds primitive to vm/ for use with javascriptcore library
authorDoug Coleman <doug.coleman@gmail.com>
Tue, 20 Apr 2010 01:08:15 +0000 (20:08 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Tue, 20 Apr 2010 01:08:15 +0000 (20:08 -0500)
basis/stack-checker/known-words/known-words.factor
core/bootstrap/primitives.factor
vm/callstack.cpp
vm/primitives.hpp
vm/vm.hpp

index 1fa9a94677e378fa7859be3e7026d73a80e3f2fb..c0d4b6c543f639cf47cfa798873e136fba345a35 100644 (file)
@@ -349,6 +349,7 @@ M: bad-executable summary
 \ both-fixnums? { object object } { object } define-primitive
 \ byte-array>bignum { byte-array } { bignum } define-primitive \ byte-array>bignum make-foldable
 \ callstack { } { callstack } define-primitive \ callstack make-flushable
+\ callstack-bounds { } { alien alien } define-primitive \ callstack-bounds make-flushable
 \ callstack-for { c-ptr } { callstack } define-primitive \ callstack make-flushable
 \ callstack>array { callstack } { array } define-primitive \ callstack>array make-flushable
 \ check-datastack { array integer integer } { object } define-primitive \ check-datastack make-flushable
index c466b0c1f84fe6dea7648a58c0a6fe920032c099..27699725f1438f6e07fd97e590b4cd3334586be2 100644 (file)
@@ -451,6 +451,7 @@ tuple
     { "retainstack" "kernel" "primitive_retainstack" (( -- array )) }
     { "(identity-hashcode)" "kernel.private" "primitive_identity_hashcode" (( obj -- code )) }
     { "become" "kernel.private" "primitive_become" (( old new -- )) }
+    { "callstack-bounds" "kernel.private" "primitive_callstack_bounds" (( -- start end )) }
     { "check-datastack" "kernel.private" "primitive_check_datastack" (( array in# out# -- ? )) }
     { "compute-identity-hashcode" "kernel.private" "primitive_compute_identity_hashcode" (( obj -- )) }
     { "context-object" "kernel.private" "primitive_context_object" (( n -- obj )) }
index eae976219f505d29511e8c1eb161962a7780c691..bb716cbc6dd3ad7bb9465eb588b07329a74843ca 100755 (executable)
@@ -214,4 +214,10 @@ void factor_vm::primitive_set_innermost_stack_frame_quot()
        FRAME_RETURN_ADDRESS(inner,this) = (char *)quot->entry_point + offset;
 }
 
+void factor_vm::primitive_callstack_bounds()
+{
+       ctx->push(allot_alien((void*)ctx->callstack_seg->start));
+       ctx->push(allot_alien((void*)ctx->callstack_seg->end));
+}
+
 }
index e98cf508b6bb0be67db8d2caa3ba3b0c602b02d1..a2bf912749fa6520fe07f4f738b76b3630f0853b 100644 (file)
@@ -35,6 +35,7 @@ namespace factor
        _(byte_array_to_bignum) \
        _(callback) \
        _(callstack) \
+       _(callstack_bounds) \
        _(callstack_for) \
        _(callstack_to_array) \
        _(check_datastack) \
index dd1d48cf0388184f631b63f14a99dee9efcaa1c3..d9bd17fa51de90f91ef3cfac838307e72bf7a59e 100755 (executable)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -606,6 +606,7 @@ struct factor_vm
        void primitive_innermost_stack_frame_executing();
        void primitive_innermost_stack_frame_scan();
        void primitive_set_innermost_stack_frame_quot();
+       void primitive_callstack_bounds();
        template<typename Iterator> void iterate_callstack(context *ctx, Iterator &iterator);
 
        // alien