compiler.tree.propagation.known-words: don't want a type function on clone, all the methods are inline and it was wrong (reported by Joe Groff)

Slava Pestov 2010-07-07 17:25:32 -04:00
parent feb2c5952b
commit df9fefade5
2 changed files with 14 additions and 5 deletions

View File

@ -5,7 +5,7 @@ quotations classes classes.algebra classes.tuple.private
continuations growable namespaces hints alien.accessors continuations growable namespaces hints alien.accessors
compiler.tree.builder compiler.tree.optimizer sequences.deep compiler.tree.builder compiler.tree.optimizer sequences.deep
compiler.test definitions generic.single shuffle math.order compiler.test definitions generic.single shuffle math.order
compiler.cfg.debugger ; compiler.cfg.debugger classes.struct alien.syntax alien.data ;
IN: compiler.tests.optimizer IN: compiler.tests.optimizer
GENERIC: xyz ( obj -- obj ) GENERIC: xyz ( obj -- obj )
@ -447,3 +447,14 @@ TUPLE: grid-mesh-tuple { length read-only } { step read-only } ;
GENERIC: bad-push-test-case ( a -- b ) GENERIC: bad-push-test-case ( a -- b )
M: object bad-push-test-case "foo" throw ; inline M: object bad-push-test-case "foo" throw ; inline
[ { 1 } "bar" ] [ { 1 } [ [ [ [ bad-push-test-case ] [ "bar" throw ] recover ] attempt-all f ] [ ] recover ] compile-call ] unit-test [ { 1 } "bar" ] [ { 1 } [ [ [ [ bad-push-test-case ] [ "bar" throw ] recover ] attempt-all f ] [ ] recover ] compile-call ] unit-test
STRUCT: BitmapData { Scan0 void* } ;
[ ALIEN: 123 ] [
[
{ BitmapData }
[ BitmapData memory>struct ALIEN: 123 >>Scan0 drop ]
[ clone ]
with-out-parameters Scan0>>
] compile-call
] unit-test

View File

@ -288,14 +288,12 @@ generic-comparison-ops [
literal>> dup tuple-class? [ drop tuple ] unless <class-info> literal>> dup tuple-class? [ drop tuple ] unless <class-info>
] "outputs" set-word-prop ] "outputs" set-word-prop
! the output of clone has the same type as the input ! the output of (clone) has the same type as the input
: cloned-value-info ( value-info -- value-info' ) : cloned-value-info ( value-info -- value-info' )
clone f >>literal f >>literal? clone f >>literal f >>literal?
[ [ dup [ cloned-value-info ] when ] map ] change-slots ; [ [ dup [ cloned-value-info ] when ] map ] change-slots ;
{ clone (clone) } [ \ (clone) [ cloned-value-info ] "outputs" set-word-prop
[ cloned-value-info ] "outputs" set-word-prop
] each
\ slot [ \ slot [
dup literal?>> dup literal?>>