factor: superclass -> superclass-of, superclasses -> superclasses-of
parent
2adeed9cb3
commit
e4c39bcf3c
|
@ -373,13 +373,13 @@ TUPLE: a-subclass < will-become-struct ;
|
|||
|
||||
{ f } [ will-become-struct struct-class? ] unit-test
|
||||
|
||||
{ will-become-struct } [ a-subclass superclass ] unit-test
|
||||
{ will-become-struct } [ a-subclass superclass-of ] unit-test
|
||||
|
||||
{ } [ "IN: classes.struct.tests USING: classes.struct alien.c-types ; STRUCT: will-become-struct { x int } ;" eval( -- ) ] unit-test
|
||||
|
||||
{ t } [ will-become-struct struct-class? ] unit-test
|
||||
|
||||
{ tuple } [ a-subclass superclass ] unit-test
|
||||
{ tuple } [ a-subclass superclass-of ] unit-test
|
||||
|
||||
STRUCT: bit-field-test
|
||||
{ a uint bits: 12 }
|
||||
|
|
|
@ -35,7 +35,7 @@ TUPLE: struct-bit-slot-spec < struct-slot-spec
|
|||
bits signed? ;
|
||||
|
||||
PREDICATE: struct-class < tuple-class
|
||||
superclass \ struct eq? ;
|
||||
superclass-of \ struct eq? ;
|
||||
|
||||
SLOT: fields
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ ERROR: not-persistent class ;
|
|||
dup "db-table" word-prop [ ] [ not-persistent ] ?if ;
|
||||
|
||||
: db-columns ( class -- object )
|
||||
superclasses [ "db-columns" word-prop ] map concat ;
|
||||
superclasses-of [ "db-columns" word-prop ] map concat ;
|
||||
|
||||
: db-relations ( class -- object )
|
||||
"db-relations" word-prop ;
|
||||
|
|
|
@ -31,7 +31,7 @@ ERROR: no-such-responder responder ;
|
|||
|
||||
: base-path ( string -- seq )
|
||||
dup responder-nesting get
|
||||
[ second class-of superclasses [ name>> = ] with any? ] with find nip
|
||||
[ second class-of superclasses-of [ name>> = ] with any? ] with find nip
|
||||
[ first ] [ no-such-responder ] ?if ;
|
||||
|
||||
: resolve-base-path ( string -- string' )
|
||||
|
|
|
@ -82,7 +82,7 @@ C: <vocab-author> vocab-author
|
|||
"Tuple classes" $subheading
|
||||
[
|
||||
[ <$pretty-link> ]
|
||||
[ superclass <$pretty-link> ]
|
||||
[ superclass-of <$pretty-link> ]
|
||||
[ "slots" word-prop [ name>> ] map " " join <$snippet> ]
|
||||
tri 3array
|
||||
] map
|
||||
|
@ -95,7 +95,7 @@ C: <vocab-author> vocab-author
|
|||
"Predicate classes" $subheading
|
||||
[
|
||||
[ <$pretty-link> ]
|
||||
[ superclass <$pretty-link> ]
|
||||
[ superclass-of <$pretty-link> ]
|
||||
bi 2array
|
||||
] map
|
||||
{ { $strong "Class" } { $strong "Superclass" } } prefix
|
||||
|
|
|
@ -159,7 +159,7 @@ M: predicate-class see-class*
|
|||
<colon \ PREDICATE: pprint-word
|
||||
dup pprint-word
|
||||
"<" text
|
||||
dup superclass pprint-word
|
||||
dup superclass-of pprint-word
|
||||
<block
|
||||
"predicate-definition" word-prop pprint-elements
|
||||
pprint-; block> block> ;
|
||||
|
@ -201,7 +201,7 @@ M: array pprint-slot-name
|
|||
\ final declaration. ;
|
||||
|
||||
: superclass. ( class -- )
|
||||
superclass dup tuple eq? [ drop ] [ "<" text pprint-word ] if ;
|
||||
superclass-of dup tuple eq? [ drop ] [ "<" text pprint-word ] if ;
|
||||
|
||||
M: tuple-class see-class*
|
||||
<colon \ TUPLE: pprint-word
|
||||
|
|
|
@ -9,7 +9,7 @@ FROM: namespaces => set ;
|
|||
IN: ui.gestures
|
||||
|
||||
: get-gesture-handler ( gesture gadget -- quot )
|
||||
class-of superclasses [ "gestures" word-prop ] map assoc-stack ;
|
||||
class-of superclasses-of [ "gestures" word-prop ] map assoc-stack ;
|
||||
|
||||
GENERIC: handle-gesture ( gesture gadget -- ? )
|
||||
|
||||
|
|
|
@ -132,7 +132,7 @@ SYMBOL: +incomparable+
|
|||
<PRIVATE
|
||||
|
||||
: superclass<= ( first second -- ? )
|
||||
swap superclass dup [ swap class<= ] [ 2drop f ] if ;
|
||||
swap superclass-of dup [ swap class<= ] [ 2drop f ] if ;
|
||||
|
||||
: left-anonymous-union<= ( first second -- ? )
|
||||
[ members>> ] dip [ class<= ] curry all? ;
|
||||
|
|
|
@ -36,8 +36,8 @@ $nl
|
|||
{ $subsections instance? }
|
||||
"You can ask a class for its superclass:"
|
||||
{ $subsections
|
||||
superclass
|
||||
superclasses
|
||||
superclass-of
|
||||
superclasses-of
|
||||
subclass-of?
|
||||
}
|
||||
"Class predicates can be used to test instances directly:"
|
||||
|
@ -104,24 +104,24 @@ HELP: define-predicate
|
|||
{ $description "Defines a predicate word for a class." }
|
||||
$low-level-note ;
|
||||
|
||||
HELP: superclass
|
||||
HELP: superclass-of
|
||||
{ $values { "class" class } { "super" class } }
|
||||
{ $description "Outputs the superclass of a class. All instances of this class are also instances of the superclass." }
|
||||
{ $examples
|
||||
{ $example "USING: classes prettyprint ;"
|
||||
"t superclass ."
|
||||
"t superclass-of ."
|
||||
"word"
|
||||
}
|
||||
} ;
|
||||
|
||||
HELP: superclasses
|
||||
HELP: superclasses-of
|
||||
{ $values
|
||||
{ "class" class }
|
||||
{ "supers" sequence } }
|
||||
{ $description "Outputs a sequence of superclasses of a class along with the class itself." }
|
||||
{ $examples
|
||||
{ $example "USING: classes prettyprint ;"
|
||||
"t superclasses ."
|
||||
"t superclasses-of ."
|
||||
"{ word t }"
|
||||
}
|
||||
} ;
|
||||
|
@ -140,13 +140,13 @@ HELP: subclass-of?
|
|||
}
|
||||
} ;
|
||||
|
||||
{ superclass superclasses subclass-of? } related-words
|
||||
{ superclass-of superclasses-of subclass-of? } related-words
|
||||
|
||||
HELP: members
|
||||
HELP: class-members
|
||||
{ $values { "class" class } { "seq" "a sequence of union members, or " { $link f } } }
|
||||
{ $description "If " { $snippet "class" } " is a union class, outputs a sequence of its member classes, otherwise outputs " { $link f } "." } ;
|
||||
|
||||
HELP: participants
|
||||
HELP: class-participants
|
||||
{ $values { "class" class } { "seq" "a sequence of intersection participants, or " { $link f } } }
|
||||
{ $description "If " { $snippet "class" } " is an intersection class, outputs a sequence of its participant classes, otherwise outputs " { $link f } "." } ;
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
USING: accessors assocs combinators definitions kernel
|
||||
make namespaces quotations sequences sets words words.symbol ;
|
||||
FROM: namespaces => set ;
|
||||
QUALIFIED: sets
|
||||
IN: classes
|
||||
|
||||
ERROR: bad-inheritance class superclass ;
|
||||
|
@ -102,15 +101,15 @@ M: predicate reset-word
|
|||
: define-predicate ( class quot -- )
|
||||
[ predicate-word ] dip ( object -- ? ) define-declared ;
|
||||
|
||||
: superclass ( class -- super )
|
||||
#! Output f for non-classes to work with algebra code
|
||||
: superclass-of ( class -- super )
|
||||
! Output f for non-classes to work with algebra code
|
||||
dup class? [ "superclass" word-prop ] [ drop f ] if ;
|
||||
|
||||
: superclasses ( class -- supers )
|
||||
[ superclass ] follow reverse! ;
|
||||
: superclasses-of ( class -- supers )
|
||||
[ superclass-of ] follow reverse! ;
|
||||
|
||||
: superclass-of? ( class superclass -- ? )
|
||||
superclasses member-eq? ;
|
||||
superclasses-of member-eq? ;
|
||||
|
||||
: subclass-of? ( class superclass -- ? )
|
||||
swap superclass-of? ;
|
||||
|
@ -130,12 +129,12 @@ GENERIC: implementors ( class/classes -- seq )
|
|||
[
|
||||
[ class-members % ]
|
||||
[ class-participants % ]
|
||||
[ superclass [ , ] when* ]
|
||||
[ superclass-of [ , ] when* ]
|
||||
tri
|
||||
] { } make ;
|
||||
|
||||
: class-usage ( class -- seq )
|
||||
update-map get at sets:members ;
|
||||
update-map get at members ;
|
||||
|
||||
<PRIVATE
|
||||
|
||||
|
@ -150,9 +149,9 @@ GENERIC: implementors ( class/classes -- seq )
|
|||
PRIVATE>
|
||||
|
||||
: class-usages ( class -- seq )
|
||||
[ class-usage ] closure sets:members ;
|
||||
[ class-usage ] closure members ;
|
||||
|
||||
M: class implementors implementors-map get at sets:members ;
|
||||
M: class implementors implementors-map get at members ;
|
||||
|
||||
M: sequence implementors [ implementors ] gather ;
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ GENERIC: predicate-quot ( class -- quot )
|
|||
M: predicate-class predicate-quot
|
||||
[
|
||||
\ dup ,
|
||||
[ superclass predicate-def % ]
|
||||
[ superclass-of predicate-def % ]
|
||||
[ "predicate-definition" word-prop , ] bi
|
||||
[ drop f ] , \ if ,
|
||||
] [ ] make ;
|
||||
|
@ -37,12 +37,12 @@ M: predicate-class reset-class
|
|||
M: predicate-class rank-class drop 2 ;
|
||||
|
||||
M: predicate-class instance?
|
||||
2dup superclass instance? [
|
||||
2dup superclass-of instance? [
|
||||
"predicate-definition" word-prop call( object -- ? )
|
||||
] [ 2drop f ] if ;
|
||||
|
||||
M: predicate-class (flatten-class)
|
||||
superclass (flatten-class) ;
|
||||
superclass-of (flatten-class) ;
|
||||
|
||||
M: predicate-class (classes-intersect?)
|
||||
superclass classes-intersect? ;
|
||||
superclass-of classes-intersect? ;
|
||||
|
|
|
@ -236,7 +236,7 @@ test-laptop-slot-values
|
|||
[ \ laptop see ] with-string-writer string-lines second
|
||||
] unit-test
|
||||
|
||||
{ { tuple computer laptop } } [ laptop superclasses ] unit-test
|
||||
{ { tuple computer laptop } } [ laptop superclasses-of ] unit-test
|
||||
|
||||
TUPLE: server < computer rackmount ;
|
||||
C: <server> server
|
||||
|
@ -755,12 +755,12 @@ TUPLE: code-heap-ref ;
|
|||
TUPLE: metaclass-change ;
|
||||
TUPLE: metaclass-change-subclass < metaclass-change ;
|
||||
|
||||
{ metaclass-change } [ metaclass-change-subclass superclass ] unit-test
|
||||
{ metaclass-change } [ metaclass-change-subclass superclass-of ] unit-test
|
||||
|
||||
{ } [ "IN: classes.tuple.tests MIXIN: metaclass-change" eval( -- ) ] unit-test
|
||||
|
||||
{ t } [ metaclass-change-subclass tuple-class? ] unit-test
|
||||
{ tuple } [ metaclass-change-subclass superclass ] unit-test
|
||||
{ tuple } [ metaclass-change-subclass superclass-of ] unit-test
|
||||
|
||||
! Reshaping bug related to the above
|
||||
TUPLE: a-g ;
|
||||
|
@ -800,12 +800,12 @@ TUPLE: tuple-predicate-redefine-test ;
|
|||
TUPLE: final-superclass ;
|
||||
TUPLE: final-subclass < final-superclass ;
|
||||
|
||||
{ final-superclass } [ final-subclass superclass ] unit-test
|
||||
{ final-superclass } [ final-subclass superclass-of ] unit-test
|
||||
|
||||
! Making the superclass final should change the superclass of the subclass
|
||||
{ } [ "IN: classes.tuple.tests TUPLE: final-superclass ; final" eval( -- ) ] unit-test
|
||||
|
||||
{ tuple } [ final-subclass superclass ] unit-test
|
||||
{ tuple } [ final-subclass superclass-of ] unit-test
|
||||
|
||||
{ f } [ \ final-subclass final-class? ] unit-test
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ PREDICATE: tuple-class < class
|
|||
ERROR: not-a-tuple object ;
|
||||
|
||||
: all-slots ( class -- slots )
|
||||
superclasses [ "slots" word-prop ] map concat ;
|
||||
superclasses-of [ "slots" word-prop ] map concat ;
|
||||
|
||||
ERROR: no-slot name tuple ;
|
||||
|
||||
|
@ -153,7 +153,7 @@ M: object final-class? drop f ;
|
|||
} case define-predicate ;
|
||||
|
||||
: class-size ( class -- n )
|
||||
superclasses [ "slots" word-prop length ] map-sum ;
|
||||
superclasses-of [ "slots" word-prop length ] map-sum ;
|
||||
|
||||
: boa-check-quot ( class -- quot )
|
||||
all-slots [ class>> instance-check-quot ] map shallow-spread>quot
|
||||
|
@ -173,16 +173,16 @@ M: object final-class? drop f ;
|
|||
[ make-slots ] [ class-size 2 + ] bi* finalize-slots ;
|
||||
|
||||
: define-tuple-slots ( class -- )
|
||||
dup "slots" word-prop over superclass prepare-slots
|
||||
dup "slots" word-prop over superclass-of prepare-slots
|
||||
define-accessors ;
|
||||
|
||||
: make-tuple-layout ( class -- layout )
|
||||
[
|
||||
{
|
||||
[ , ]
|
||||
[ [ superclass class-size ] [ "slots" word-prop length ] bi + , ]
|
||||
[ superclasses length 1 - , ]
|
||||
[ superclasses [ [ , ] [ hashcode , ] bi ] each ]
|
||||
[ [ superclass-of class-size ] [ "slots" word-prop length ] bi + , ]
|
||||
[ superclasses-of length 1 - , ]
|
||||
[ superclasses-of [ [ , ] [ hashcode , ] bi ] each ]
|
||||
} cleave
|
||||
] { } make ;
|
||||
|
||||
|
@ -269,7 +269,7 @@ M: tuple-class update-class
|
|||
[ define-new-tuple-class ] 3bi ;
|
||||
|
||||
: tuple-class-unchanged? ( class superclass slots -- ? )
|
||||
[ [ superclass ] [ bootstrap-word ] bi* = ]
|
||||
[ [ superclass-of ] [ bootstrap-word ] bi* = ]
|
||||
[ [ "slots" word-prop ] dip = ]
|
||||
bi-curry* bi and ;
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ TUPLE: tuple-dispatch-engine echelons ;
|
|||
at* [ [ methods>> ] bi@ assoc-union! drop ] [ 2drop ] if ;
|
||||
|
||||
: copy-superclasses-methods ( class engine assoc -- )
|
||||
[ superclasses ] 2dip
|
||||
[ superclasses-of ] 2dip
|
||||
[ swapd copy-superclass-methods ] 2curry each ;
|
||||
|
||||
: convert-tuple-inheritance ( assoc -- assoc' )
|
||||
|
@ -202,7 +202,7 @@ SYMBOL: predicate-engines
|
|||
predicate-engines get [ at ] curry map-find drop ;
|
||||
|
||||
: next-predicate-engine ( engine -- word )
|
||||
class>> superclasses
|
||||
class>> superclasses-of
|
||||
find-predicate-engine
|
||||
default get or ;
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ words alien.parser ;
|
|||
IN: constructors
|
||||
|
||||
: all-slots-assoc ( class -- slots )
|
||||
superclasses [
|
||||
superclasses-of [
|
||||
[ "slots" word-prop ] keep '[ _ ] { } map>assoc
|
||||
] map concat ;
|
||||
|
||||
|
|
|
@ -217,7 +217,7 @@ M: uniform-tuple (bind-uniforms)
|
|||
|
||||
: all-uniform-tuple-slots ( class -- slots )
|
||||
dup "uniform-tuple-slots" word-prop
|
||||
[ [ superclass all-uniform-tuple-slots ] dip append ] [ drop { } ] if* ;
|
||||
[ [ superclass-of all-uniform-tuple-slots ] dip append ] [ drop { } ] if* ;
|
||||
|
||||
DEFER: uniform-texture-accessors
|
||||
|
||||
|
@ -486,8 +486,8 @@ DEFER: [bind-uniform-tuple]
|
|||
{ uniforms-cleave 2cleave } >quotation ;
|
||||
|
||||
:: [bind-uniforms] ( superclass uniforms -- quot )
|
||||
superclass "uniform-tuple-texture-units" word-prop 0 or :> first-texture-unit
|
||||
superclass \ (bind-uniforms) lookup-method :> next-method
|
||||
superclass-of "uniform-tuple-texture-units" word-prop 0 or :> first-texture-unit
|
||||
superclass-of \ (bind-uniforms) lookup-method :> next-method
|
||||
first-texture-unit uniforms "" [bind-uniform-tuple] nip :> bind-quot
|
||||
|
||||
{ 2dup next-method } bind-quot [ ] append-as ;
|
||||
|
|
|
@ -63,13 +63,13 @@ GENERIC: mdb-index-map ( tuple -- sequence )
|
|||
: (mdb-collection) ( class -- mdb-collection )
|
||||
dup MDB_COLLECTION word-prop
|
||||
[ nip ]
|
||||
[ superclass [ (mdb-collection) ] [ f ] if* ] if* ; inline recursive
|
||||
[ superclass-of [ (mdb-collection) ] [ f ] if* ] if* ; inline recursive
|
||||
|
||||
: (mdb-slot-map) ( class -- slot-map )
|
||||
superclasses [ MDB_SLOTDEF_MAP word-prop ] map assoc-combine ; inline
|
||||
superclasses-of [ MDB_SLOTDEF_MAP word-prop ] map assoc-combine ; inline
|
||||
|
||||
: (mdb-index-map) ( class -- index-map )
|
||||
superclasses [ MDB_INDEX_MAP word-prop ] map assoc-combine ; inline
|
||||
superclasses-of [ MDB_INDEX_MAP word-prop ] map assoc-combine ; inline
|
||||
|
||||
: split-optl ( seq -- key options )
|
||||
[ first ] [ rest ] bi ; inline
|
||||
|
|
Loading…
Reference in New Issue