[ drop 1/0. ]
} case ;
-GENERIC: declared-class-interval ( classoid -- int/f )
+! : maybe-declared-interval ( classoid -- int )
+! dup word?
+! [ "declared-interval" word-prop full-interval or ]
+! [ drop full-interval ] if ;
+GENERIC: declared-class-interval ( classoid -- int/f )
M: object declared-class-interval drop full-interval ;
-
-M: class declared-class-interval
- "declared-interval" word-prop full-interval or ;
-
+M: class declared-class-interval "declared-interval" word-prop full-interval or ;
M: union-class declared-class-interval
- class-members [ empty-interval ] [
+ class-members [ empty-interval ]
+ [
[ declared-class-interval ] [ interval-union ] map-reduce
] if-empty ;
-
M: intersection-class declared-class-interval
- class-participants [ full-interval ] [
+ class-participants [ full-interval ]
+ [
[ declared-class-interval ] [ interval-intersect ] map-reduce
] if-empty ;
: set-value-infos ( infos values -- )
[ set-value-info ] 2each ;
+
M: #declare propagate-before
! We need to force the caller word to recompile when the
! classes mentioned in the declaration are redefined, since
ERROR: invalid-interval-definition stack ;
<PRIVATE
-
PREDICATE: empty-interval-class < word empty-interval eq? ;
-
UNION: valid-interval interval full-interval empty-interval-class ;
: evaluate-interval ( quot -- interval )
: interval>predicate ( interval -- quot )
[ interval-contains? ] curry ;
-
PRIVATE>
: define-interval-predicate-class ( class superclass interval -- )