compiler.tree.propagation.info: better code for wrap-interval
parent
7301da0314
commit
a3be724f5a
|
@ -46,6 +46,10 @@ HELP: value-info-state
|
||||||
HELP: value-infos
|
HELP: value-infos
|
||||||
{ $var-description "Assoc stack of current value --> info mapping" } ;
|
{ $var-description "Assoc stack of current value --> info mapping" } ;
|
||||||
|
|
||||||
|
HELP: wrap-interval
|
||||||
|
{ $values { "interval" interval } { "class" class } { "interval'" interval } }
|
||||||
|
{ $description "Wraps an interval to the given numeric types interval." } ;
|
||||||
|
|
||||||
ARTICLE: "compiler.tree.propagation.info" "Value info data type and operations"
|
ARTICLE: "compiler.tree.propagation.info" "Value info data type and operations"
|
||||||
"Querying words:"
|
"Querying words:"
|
||||||
{ $subsections
|
{ $subsections
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
USING: accessors alien byte-arrays classes.struct math math.intervals sequences
|
USING: accessors alien arrays byte-arrays classes.algebra
|
||||||
classes.algebra kernel tools.test compiler.tree.propagation.info arrays ;
|
classes.struct compiler.tree.propagation.info kernel literals math
|
||||||
|
math.intervals sequences sequences.private tools.test ;
|
||||||
IN: compiler.tree.propagation.info.tests
|
IN: compiler.tree.propagation.info.tests
|
||||||
|
|
||||||
{ f } [ 0.0 -0.0 eql? ] unit-test
|
{ f } [ 0.0 -0.0 eql? ] unit-test
|
||||||
|
@ -191,3 +192,31 @@ TUPLE: tup2 < tup1 bar ;
|
||||||
tup2 <class-info> tup1 <class-info> value-info<=
|
tup2 <class-info> tup1 <class-info> value-info<=
|
||||||
tup1 <class-info> tup2 <class-info> value-info<=
|
tup1 <class-info> tup2 <class-info> value-info<=
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
! init-interval
|
||||||
|
{
|
||||||
|
T{ value-info-state
|
||||||
|
{ class array-capacity }
|
||||||
|
{ interval $[ array-capacity-interval ] }
|
||||||
|
}
|
||||||
|
} [
|
||||||
|
<value-info> -100 100 [a,b] >>interval array-capacity >>class
|
||||||
|
init-interval
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
! wrap-interval
|
||||||
|
${
|
||||||
|
full-interval
|
||||||
|
empty-interval
|
||||||
|
fixnum-interval
|
||||||
|
array-capacity-interval
|
||||||
|
array-capacity-interval
|
||||||
|
-100 100 [a,b]
|
||||||
|
} [
|
||||||
|
full-interval integer wrap-interval
|
||||||
|
empty-interval integer wrap-interval
|
||||||
|
full-interval fixnum wrap-interval
|
||||||
|
fixnum-interval array-capacity wrap-interval
|
||||||
|
-100 100 [a,b] array-capacity wrap-interval
|
||||||
|
-100 100 [a,b] integer wrap-interval
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -108,12 +108,7 @@ UNION: fixed-length array byte-array string ;
|
||||||
} case ;
|
} case ;
|
||||||
|
|
||||||
: wrap-interval ( interval class -- interval' )
|
: wrap-interval ( interval class -- interval' )
|
||||||
{
|
class-interval 2dup interval-subset? [ drop ] [ nip ] if ;
|
||||||
{ [ over empty-interval eq? ] [ drop ] }
|
|
||||||
{ [ over full-interval eq? ] [ nip class-interval ] }
|
|
||||||
{ [ 2dup class-interval interval-subset? not ] [ nip class-interval ] }
|
|
||||||
[ drop ]
|
|
||||||
} cond ;
|
|
||||||
|
|
||||||
: init-interval ( info -- info )
|
: init-interval ( info -- info )
|
||||||
dup [ interval>> full-interval or ] [ class>> ] bi wrap-interval >>interval
|
dup [ interval>> full-interval or ] [ class>> ] bi wrap-interval >>interval
|
||||||
|
|
Loading…
Reference in New Issue