(make-joinish-memoizer tag-is-top?))
(define-compound-operator 'conjoin
- (make-joinish-memoizer tag-is-bottom?))))
-
-(define any-object?)
-(define no-object?)
-(add-boot-init!
- (lambda ()
- (set! any-object? (conjoin))
- (set! no-object? (disjoin))
- (set! the-top-tag (predicate->tag any-object?))
- (set! the-bottom-tag (predicate->tag no-object?))
- unspecific))
\ No newline at end of file
+ (make-joinish-memoizer tag-is-bottom?))))
\ No newline at end of file
(cons (vector test1 test2 handler)
tag<=-overrides))
unspecific)
+\f
+(define (any-object? object)
+ (declare (ignore object))
+ #t)
+
+(define (no-object? object)
+ (declare (ignore object))
+ #f)
(define (top-tag) the-top-tag)
(define (bottom-tag) the-bottom-tag)
(define-integrable (tag-is-top? tag) (eq? the-top-tag tag))
(define-integrable (tag-is-bottom? tag) (eq? the-bottom-tag tag))
-;; These definitions will be overwritten when the tags are created:
-(define the-top-tag #f)
-(define the-bottom-tag #f)
+(define-deferred the-top-tag
+ (make-compound-tag any-object? 'conjoin '()))
+
+(define-deferred the-bottom-tag
+ (make-compound-tag no-object? 'disjoin '()))
(define tag<=-cache)
(define tag<=-overrides)
(files "predicate-lattice")
(parent (runtime))
(export ()
+ any-object?
predicate<=
- predicate>=)
+ predicate>=
+ no-object?)
(export (runtime)
bottom-tag
define-tag<=
tag<=
tag=
tag>=
- top-tag)
- (export (runtime compound-predicate)
- the-bottom-tag
- the-top-tag))
+ top-tag))
(define-package (runtime compound-predicate)
(files "compound-predicate")
(parent (runtime))
(export ()
- any-object?
compound-predicate-operands
compound-predicate-operator
compound-predicate?
conjoin
conjoin*
disjoin
- disjoin*
- no-object?)
+ disjoin*)
(export (runtime)
compound-tag-operands
compound-tag-operator
- tag-is-compound?))
+ tag-is-compound?)
+ (export (runtime predicate-lattice)
+ make-compound-tag))
(define-package (runtime parametric-predicate)
(files "parametric-predicate")