Fixing failing unit tests in compiler.tree.propagation due to constraints
parent
699695ba14
commit
6e936bdb05
|
@ -2,7 +2,7 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: fry kernel sequences assocs accessors namespaces
|
||||
math.intervals arrays classes.algebra combinators columns
|
||||
stack-checker.branches
|
||||
stack-checker.branches locals
|
||||
compiler.utilities
|
||||
compiler.tree
|
||||
compiler.tree.combinators
|
||||
|
@ -82,6 +82,13 @@ M: #phi propagate-before ( #phi -- )
|
|||
[ [ phi-info-d>> flip ] [ out-d>> ] bi merge-value-infos ]
|
||||
bi ;
|
||||
|
||||
:: update-constraints ( new old -- )
|
||||
new [| key value | key old [ value append ] change-at ] assoc-each ;
|
||||
|
||||
: include-child-constraints ( i -- )
|
||||
infer-children-data get nth constraints swap at last
|
||||
constraints get last update-constraints ;
|
||||
|
||||
: branch-phi-constraints ( output values booleans -- )
|
||||
{
|
||||
{
|
||||
|
@ -116,22 +123,24 @@ M: #phi propagate-before ( #phi -- )
|
|||
swap t-->
|
||||
]
|
||||
}
|
||||
! {
|
||||
! { { t f } { } }
|
||||
! [ B
|
||||
! first
|
||||
! [ [ =t ] bi@ <--> ]
|
||||
! [ [ =f ] bi@ <--> ] 2bi /\
|
||||
! ]
|
||||
! }
|
||||
! {
|
||||
! { { } { t f } }
|
||||
! [
|
||||
! second
|
||||
! [ [ =t ] bi@ <--> ]
|
||||
! [ [ =f ] bi@ <--> ] 2bi /\
|
||||
! ]
|
||||
! }
|
||||
{
|
||||
{ { t f } { } }
|
||||
[
|
||||
first
|
||||
[ [ =t ] bi@ <--> ]
|
||||
[ [ =f ] bi@ <--> ] 2bi /\
|
||||
0 include-child-constraints
|
||||
]
|
||||
}
|
||||
{
|
||||
{ { } { t f } }
|
||||
[
|
||||
second
|
||||
[ [ =t ] bi@ <--> ]
|
||||
[ [ =f ] bi@ <--> ] 2bi /\
|
||||
1 include-child-constraints
|
||||
]
|
||||
}
|
||||
[ 3drop f ]
|
||||
} case assume ;
|
||||
|
||||
|
@ -147,6 +156,7 @@ M: #phi propagate-after ( #phi -- )
|
|||
] [ drop ] if ;
|
||||
|
||||
M: #phi propagate-around ( #phi -- )
|
||||
! Is this necessary?
|
||||
[ propagate-before ] [ propagate-after ] bi ;
|
||||
|
||||
M: #branch propagate-around
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: arrays assocs math math.intervals kernel accessors
|
||||
sequences namespaces classes classes.algebra
|
||||
combinators words
|
||||
combinators words combinators.short-circuit
|
||||
compiler.tree
|
||||
compiler.tree.propagation.info
|
||||
compiler.tree.propagation.copy ;
|
||||
|
@ -28,15 +28,19 @@ M: object satisfied? drop f ;
|
|||
! Boolean constraints
|
||||
TUPLE: true-constraint value ;
|
||||
|
||||
: =t ( value -- constriant ) resolve-copy true-constraint boa ;
|
||||
: =t ( value -- constraint ) resolve-copy true-constraint boa ;
|
||||
|
||||
: follow-implications ( constraint -- )
|
||||
constraints get assoc-stack [ assume ] when* ;
|
||||
|
||||
M: true-constraint assume*
|
||||
[ \ f class-not <class-info> swap value>> refine-value-info ]
|
||||
[ constraints get assoc-stack [ assume ] when* ]
|
||||
[ follow-implications ]
|
||||
bi ;
|
||||
|
||||
M: true-constraint satisfied?
|
||||
value>> value-info class>> true-class? ;
|
||||
value>> value-info class>>
|
||||
{ [ true-class? ] [ null-class? not ] } 1&& ;
|
||||
|
||||
TUPLE: false-constraint value ;
|
||||
|
||||
|
@ -44,11 +48,12 @@ TUPLE: false-constraint value ;
|
|||
|
||||
M: false-constraint assume*
|
||||
[ \ f <class-info> swap value>> refine-value-info ]
|
||||
[ constraints get assoc-stack [ assume ] when* ]
|
||||
[ follow-implications ]
|
||||
bi ;
|
||||
|
||||
M: false-constraint satisfied?
|
||||
value>> value-info class>> false-class? ;
|
||||
value>> value-info class>>
|
||||
{ [ false-class? ] [ null-class? not ] } 1&& ;
|
||||
|
||||
! Class constraints
|
||||
TUPLE: class-constraint value class ;
|
||||
|
@ -82,7 +87,7 @@ TUPLE: implication p q ;
|
|||
|
||||
C: --> implication
|
||||
|
||||
: assume-implication ( p q -- )
|
||||
: assume-implication ( q p -- )
|
||||
[ constraints get [ assoc-stack swap suffix ] 2keep last set-at ]
|
||||
[ satisfied? [ assume ] [ drop ] if ] 2bi ;
|
||||
|
||||
|
|
|
@ -302,7 +302,7 @@ SYMBOL: value-infos
|
|||
|
||||
: refine-value-info ( info value -- )
|
||||
resolve-copy value-infos get
|
||||
[ assoc-stack value-info-intersect ] 2keep
|
||||
[ assoc-stack [ value-info-intersect ] when* ] 2keep
|
||||
last set-at ;
|
||||
|
||||
: value-literal ( value -- obj ? )
|
||||
|
|
|
@ -694,17 +694,17 @@ MIXIN: empty-mixin
|
|||
[ { word object } declare equal? ] final-classes
|
||||
] unit-test
|
||||
|
||||
! [ V{ string } ] [
|
||||
! [ dup string? t xor [ "A" throw ] [ ] if ] final-classes
|
||||
! ] unit-test
|
||||
[ V{ string } ] [
|
||||
[ dup string? t xor [ "A" throw ] [ ] if ] final-classes
|
||||
] unit-test
|
||||
|
||||
! [ t ] [ [ dup t xor or ] final-classes first true-class? ] unit-test
|
||||
[ t ] [ [ dup t xor or ] final-classes first true-class? ] unit-test
|
||||
|
||||
! [ t ] [ [ dup t xor swap or ] final-classes first true-class? ] unit-test
|
||||
[ t ] [ [ dup t xor swap or ] final-classes first true-class? ] unit-test
|
||||
|
||||
! [ t ] [ [ dup t xor and ] final-classes first false-class? ] unit-test
|
||||
[ t ] [ [ dup t xor and ] final-classes first false-class? ] unit-test
|
||||
|
||||
! [ t ] [ [ dup t xor swap and ] final-classes first false-class? ] unit-test
|
||||
[ t ] [ [ dup t xor swap and ] final-classes first false-class? ] unit-test
|
||||
|
||||
! generalize-counter-interval wasn't being called in all the right places.
|
||||
! bug found by littledan
|
||||
|
|
Loading…
Reference in New Issue