From f90bc5cdb6b87205e002ff4cbd61ab614affbb63 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 22 Nov 2011 20:38:07 -0800 Subject: [PATCH] classes: optimize instance? for classoids --- .../tree/propagation/known-words/known-words.factor | 6 +++--- .../compiler/tree/propagation/transforms/transforms.factor | 2 +- core/classes/maybe/maybe.factor | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/basis/compiler/tree/propagation/known-words/known-words.factor b/basis/compiler/tree/propagation/known-words/known-words.factor index 78307887b7..617bd1ceab 100644 --- a/basis/compiler/tree/propagation/known-words/known-words.factor +++ b/basis/compiler/tree/propagation/known-words/known-words.factor @@ -302,7 +302,7 @@ generic-comparison-ops [ ] "outputs" set-word-prop \ instance? [ - [ value-info ] dip over literal>> class? [ + [ value-info ] dip over literal>> classoid? [ [ literal>> ] dip predicate-constraints ] [ 3drop f ] if ] "constraints" set-word-prop @@ -311,10 +311,10 @@ generic-comparison-ops [ ! We need to force the caller word to recompile when the class ! is redefined, since now we're making assumptions but the ! class definition itself. - dup literal>> class? + dup literal>> classoid? [ literal>> - [ depends-on-conditionally ] + [ depends-on-class ] [ predicate-output-infos ] bi ] [ 2drop object-info ] if diff --git a/basis/compiler/tree/propagation/transforms/transforms.factor b/basis/compiler/tree/propagation/transforms/transforms.factor index d1a5fa9a1f..3b387a2254 100644 --- a/basis/compiler/tree/propagation/transforms/transforms.factor +++ b/basis/compiler/tree/propagation/transforms/transforms.factor @@ -177,7 +177,7 @@ ERROR: bad-partial-eval quot word ; \ new [ inline-new ] 1 define-partial-eval \ instance? [ - dup class? + dup classoid? [ predicate-def ] [ drop f ] if ] 1 define-partial-eval diff --git a/core/classes/maybe/maybe.factor b/core/classes/maybe/maybe.factor index 30c09e9237..37adf2331d 100644 --- a/core/classes/maybe/maybe.factor +++ b/core/classes/maybe/maybe.factor @@ -32,3 +32,6 @@ M: maybe union-of-builtins? M: maybe class-name class>> name>> ; + +M: maybe predicate-def + class>> predicate-def [ [ t ] if* ] curry ;