Fixing optimization for improved method inlining
parent
02bd3d7142
commit
416707f327
|
@ -55,18 +55,23 @@ M: callable splicing-nodes splicing-body ;
|
|||
[ generic no-method ] if
|
||||
] and ;
|
||||
|
||||
: class-min ( class1 class2 -- class/f ? )
|
||||
2dup class<= [ drop t ] [
|
||||
2dup swap class<=
|
||||
[ nip t ] [ 2drop f f ] if
|
||||
] if ;
|
||||
|
||||
:: split-method-call ( class generic -- quot/f )
|
||||
class object = [ f ] [
|
||||
object generic method-classes
|
||||
[| last-class new-class |
|
||||
class new-class classes-intersect? [
|
||||
new-class class class<= [
|
||||
last-class new-class class<=
|
||||
last-class new-class ? f
|
||||
] [ object t ] if
|
||||
] [ last-class f ] if
|
||||
] any?
|
||||
[ drop f ] [ generic split-code ] if
|
||||
last-class new-class class-min
|
||||
] [ object f ] if
|
||||
] [ last-class t ] if
|
||||
] all?
|
||||
[ generic split-code ] [ drop f ] if
|
||||
] if ;
|
||||
|
||||
: inlining-standard-method ( #call word -- class/f method/f )
|
||||
|
|
|
@ -693,7 +693,7 @@ M: fixnum bad-generic 1 fixnum+fast ; inline
|
|||
|
||||
[ V{ fixnum } ] [ [ bad-behavior ] final-classes ] unit-test
|
||||
|
||||
[ V{ number } ] [
|
||||
[ V{ integer } ] [
|
||||
[
|
||||
0 10 [ bad-generic dup 123 bitand drop bad-generic 1 + ] times
|
||||
] final-classes
|
||||
|
@ -994,3 +994,6 @@ UNION: ?fixnum fixnum POSTPONE: f ;
|
|||
[ t ] [ 1 instance-test-2 ] unit-test
|
||||
[ f ] [ 1.1 instance-test-2 ] unit-test
|
||||
[ t ] [ f instance-test-3 ] unit-test
|
||||
|
||||
[ t ] [ [ { ?fixnum } declare >fixnum ] { >fixnum } inlined? ] unit-test
|
||||
[ f ] [ [ { integer } declare >fixnum ] { >fixnum } inlined? ] unit-test
|
||||
|
|
Loading…
Reference in New Issue