* module/language/tree-il/compile-cps.scm (convert): Remove "not"
primcalls.
* module/language/cps/effects-analysis.scm (values):
* module/language/cps/types.scm: Remove special cases for the "not"
primcall.
;; Miscellaneous.
(define-primitive-effects
- ((values . _))
- ((not arg)))
+ ((values . _)))
;; Generic effect-free predicates.
(define-primitive-effects
\f
-;;;
-;;; Miscellaneous.
-;;;
-
-(define-simple-type-checker (not &all-types))
-(define-type-inferrer (not val result)
- (cond
- ((and (eqv? (&type val) &boolean)
- (eqv? (&min val) (&max val)))
- (let ((val (if (zero? (&min val)) 1 0)))
- (define! result &boolean val val)))
- (else
- (define! result &boolean 0 1))))
-
-
-\f
-
;;;
;;; Generic effect-free predicates.
;;;
(kf ($kargs () () ($continue k src ($const #f)))))
($continue kf src
($branch kt ($primcall name args)))))))))
+ ((and (eq? name 'not) (match args ((_) #t) (_ #f)))
+ (convert-args args
+ (lambda (args)
+ (let-fresh (kt kf) ()
+ (build-cps-term
+ ($letk ((kt ($kargs () () ($continue k src ($const #f))))
+ (kf ($kargs () () ($continue k src ($const #t)))))
+ ($continue kf src
+ ($branch kt ($values args)))))))))
((and (eq? name 'list)
(and-map (match-lambda
((or ($ <const>)