classes.union/maybe: Check the members of the maybe{} in a different way.

db4
Doug Coleman 2013-03-24 01:10:54 -07:00
parent 8ec8cdfffa
commit f66c9cc206
2 changed files with 11 additions and 3 deletions

View File

@ -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 ;

View File

@ -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 ;