 
 M: object specializer-declaration class ;
 
-: specialized? ( types -- ? )
-    [ object = ] all? not ;
-
 : specializer ( word -- specializer )
-    [ "specializer" word-prop ]
-    [ stack-effect effect-in-types ] bi
-    dup specialized? [ suffix ] [ drop ] if ;
+    "specializer" word-prop ;
 
 : make-specializer ( specs -- quot )
     dup length <reversed>

        "method-generic" word-prop standard-generic?
    ] [ drop f ] if ;

: specialized-def ( word -- quot )
    [ def>> ] keep
    dup generic? [ drop ] [
        [ dup standard-method? [ specialize-method ] [ drop ] if ]
        [ dup specializer [ specialize-quot ] [ drop ] if* ]
        bi
    ] if ;

: specialized-length ( specializer -- n )
    dup [ array? ] all? [ first ] when length ;

    ] with { } map>assoc ;

: specialize-quot ( quot word specializer -- quot' )
    [ drop nip def>> ] [ nip specializer-cases ] 3bi alist>quot ;

! compiler.tree.propagation.inlining sets this to f
SYMBOL: specialize-method?
