Workaround optimizer limitation exposed by new optimizer.allot rewrites

db4
Slava Pestov 2008-07-14 03:18:24 -05:00
parent 6ab000cc52
commit bfa89708ae
2 changed files with 18 additions and 7 deletions

View File

@ -36,11 +36,13 @@ IN: optimizer.allot
} define-optimizers
: tuple-boa-quot ( layout -- quot )
[ (tuple) ]
swap size>> 1 - [ 3 + ] map <reversed>
[ [ set-slot ] curry [ keep ] curry ] map concat
[ f over 2 set-slot ]
3append ;
[
dup ,
[ nip (tuple) ] %
size>> 1 - [ 3 + ] map <reversed>
[ [ set-slot ] curry [ keep ] curry % ] each
[ f over 2 set-slot ] %
] [ ] make ;
: expand-tuple-boa ( #call -- node )
dup in-d>> peek value-literal tuple-boa-quot f splice-quot ;
@ -56,7 +58,8 @@ IN: optimizer.allot
: <array>-quot ( n -- quot )
[
[ swap (array) ] %
dup ,
[ nip (array) ] %
[ \ 2dup , , [ swap set-array-nth ] % ] each
\ nip ,
] [ ] make ;
@ -80,7 +83,8 @@ IN: optimizer.allot
: <byte-array>-quot ( n -- quot )
[
\ (byte-array) ,
dup ,
[ nip (byte-array) ] %
bytes>cells [ cell * ] map
[ [ 0 over ] % , [ set-alien-unsigned-cell ] % ] each
] [ ] make ;

View File

@ -384,3 +384,10 @@ PREDICATE: list < improper-list
[ 1 [ "hi" + drop ] compile-call ] must-fail
[ "hi" f [ <array> drop ] compile-call ] must-fail
TUPLE: some-tuple x ;
: allot-regression ( a -- b )
[ ] curry some-tuple boa ;
[ T{ some-tuple f [ 3 ] } ] [ 3 allot-regression ] unit-test