[ drop 1/0. ]
} case ;
-! : 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 -- )