-USING: accessors classes.tuple compiler.tree stack-checker.backend tools.test
-kernel namespaces stack-checker.state stack-checker.values
-stack-checker.visitor sequences assocs ;
+USING: accessors assocs classes.tuple compiler.tree kernel namespaces
+sequences stack-checker.backend stack-checker.recursive-state
+stack-checker.state stack-checker.values stack-checker.visitor
+tools.test ;
IN: stack-checker.backend.tests
{ } [
V{ 3 9 8 }
H{ { 8 input-parameter } { 9 input-parameter } { 3 input-parameter } }
} [
- init-known-values
+ H{ } clone known-values set
V{ } clone stack-visitor set
V{ 3 9 8 } introduce-values
stack-visitor get first out-d>>
: with-infer ( quot -- effect visitor )
[
init-inference
- init-known-values
+ H{ } clone known-values set
stack-visitor off
call
end-infer
V{ 1 2 3 }
} [
0 \ <value> set-global
- init-inference init-known-values
+ init-inference
+ H{ } clone known-values set
V{ 1 2 3 } literals set commit-literals
(meta-d) get
] unit-test
-USING: kernel namespaces stack-checker.backend stack-checker.values
-tools.test ;
+USING: accessors kernel namespaces stack-checker.state
+stack-checker.values tools.test ;
IN: stack-checker.values.tests
+TUPLE: foo-tup a b ;
+
+! known
+{ T{ foo-tup f 10 20 } } [
+ H{ } clone known-values set
+ 0 \ <value> set-global
+ V{ } clone literals set
+ 10 20 foo-tup boa 23 set-known
+ 23 known
+] unit-test
+
+! literal
+{ T{ foo-tup f 10 20 } } [
+ H{ } clone known-values set
+ 0 \ <value> set-global
+ V{ } clone literals set
+ 10 20 foo-tup boa <literal> make-known
+ literal value>>
+] unit-test
+
+! set-known
{ H{ { 3 input-parameter } } } [
- init-known-values
+ H{ } clone known-values set
input-parameter 3 set-known
known-values get
] unit-test
SYMBOL: known-values
-: init-known-values ( -- )
- H{ } clone known-values set ;
-
: known ( value -- known )
known-values get at ;