]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: add def for the segment struct, it's useful for testing
authorBjörn Lindqvist <bjourne@gmail.com>
Fri, 14 Aug 2015 21:20:21 +0000 (23:20 +0200)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 15 Aug 2015 03:19:56 +0000 (20:19 -0700)
basis/vm/vm-tests.factor [new file with mode: 0644]
basis/vm/vm.factor

diff --git a/basis/vm/vm-tests.factor b/basis/vm/vm-tests.factor
new file mode 100644 (file)
index 0000000..185b041
--- /dev/null
@@ -0,0 +1,18 @@
+USING: accessors classes.struct kernel math math.order threads.private
+tools.test ;
+QUALIFIED: vm
+IN: vm.tests
+
+: get-ctx ( -- ctx )
+    context vm:context memory>struct ;
+
+{ t } [
+    get-ctx [ callstack-bottom>> ] [ callstack-top>> ] bi - 0 >
+] unit-test
+
+{ t } [
+    ! Callstack is in the callstack segment
+    get-ctx [ callstack-top>> ] [
+        callstack-seg>> [ start>> ] [ end>> ] bi
+    ] bi between?
+] unit-test
index f3f22923559fd61c6b650635912dc95c35c6838f..0d2540b7e00948797ea126bb3d550f63a163d534 100644 (file)
@@ -5,34 +5,43 @@ IN: vm
 
 TYPEDEF: uintptr_t cell_t
 
+STRUCT: segment
+    { start cell_t }
+    { size cell_t }
+    { end cell_t } ;
+
 STRUCT: context
-{ callstack-top void* }
-{ callstack-bottom void* }
-{ datastack cell_t }
-{ retainstack cell_t }
-{ callstack-save cell_t }
-{ datastack-region void* }
-{ retainstack-region void* }
-{ callstack-region void* }
-{ context-objects cell_t[context-object-count] } ;
+    { callstack-top cell_t }
+    { callstack-bottom cell_t }
+    { datastack cell_t }
+    { retainstack cell_t }
+    { callstack-save cell_t }
+    { datastack-seg segment* }
+    { retainstack-seg segment* }
+    { callstack-seg segment* }
+    { context-objects cell_t[context-object-count] } ;
 
 : context-field-offset ( field -- offset ) context offset-of ; inline
 
 STRUCT: zone
-{ here cell_t }
-{ start cell_t }
-{ end cell_t }
-{ size cell_t } ;
+    { here cell_t }
+    { start cell_t }
+    { end cell_t }
+    { size cell_t } ;
 
 STRUCT: vm
-{ ctx context* }
-{ spare-ctx context* }
-{ nursery zone }
-{ cards-offset cell_t }
-{ decks-offset cell_t }
-{ signal-handler-addr cell_t }
-{ faulting? cell_t }
-{ special-objects cell_t[special-object-count] } ;
+    { ctx context* }
+    { spare-ctx context* }
+    { nursery zone }
+    { cards-offset cell_t }
+    { decks-offset cell_t }
+    { signal-handler-addr cell_t }
+    { faulting? cell_t }
+    { special-objects cell_t[special-object-count] }
+    { thread void* }
+    { datastack-size cell_t }
+    { retainstack-size cell_t }
+    { callstack-size cell_t } ;
 
 : vm-field-offset ( field -- offset ) vm offset-of ; inline