[ 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 )
[ 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
[ 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