classes.union/maybe: Check the members of the maybe{} in a different way.
parent
8ec8cdfffa
commit
f66c9cc206
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2011 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors classes classes.algebra
|
||||
USING: accessors arrays classes classes.algebra
|
||||
classes.algebra.private classes.private classes.union.private
|
||||
kernel words ;
|
||||
IN: classes.maybe
|
||||
|
@ -41,3 +41,6 @@ M: maybe class-name
|
|||
|
||||
M: maybe predicate-def
|
||||
class>> predicate-def [ [ t ] if* ] curry ;
|
||||
|
||||
M: maybe classes-contained-by
|
||||
class>> 1array ;
|
||||
|
|
|
@ -56,12 +56,17 @@ M: union-class update-class define-union-predicate ;
|
|||
|
||||
ERROR: cannot-reference-self class members ;
|
||||
|
||||
: union-members ( union -- members )
|
||||
GENERIC: classes-contained-by ( obj -- members )
|
||||
|
||||
M: union-class classes-contained-by ( union -- members )
|
||||
"members" word-prop [ f ] when-empty ;
|
||||
|
||||
M: object classes-contained-by
|
||||
"members" word-prop [ f ] when-empty ;
|
||||
|
||||
: check-self-reference ( class members -- class members )
|
||||
2dup [
|
||||
dup dup [ union-members ] map concat sift append
|
||||
dup dup [ classes-contained-by ] map concat sift append
|
||||
2dup set= [ 2drop f ] [ nip ] if
|
||||
] follow concat
|
||||
member-eq? [ cannot-reference-self ] when ;
|
||||
|
|
Loading…
Reference in New Issue