~ chicken-core (chicken-5) 523cdeae141e59d7afe9d6fabeebafc135513f52
commit 523cdeae141e59d7afe9d6fabeebafc135513f52
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Tue Mar 29 12:40:35 2011 -0400
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Tue Mar 29 12:40:35 2011 -0400
only assume if enforcing
diff --git a/scrutinizer.scm b/scrutinizer.scm
index 24d5b6e4..d43d3ac6 100755
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -63,6 +63,7 @@
; ##compiler#declared-type -> BOOL
; ##compiler#predicate -> TYPESPEC
; ##compiler#specializations -> (SPECIALIZATION ...)
+; ##compiler#enforce-argument-types -> BOOL
;
; specialization specifiers:
;
@@ -713,6 +714,7 @@
(iota len)))
(fn (car args))
(pn (procedure-name fn))
+ (enforces (and pn (##sys#get pn '##compiler#enforce-argument-types)))
(pt (and pn (##sys#get pn '##compiler#predicate))))
(let ((r (call-result n args e loc params)))
(invalidate-blist)
@@ -728,13 +730,13 @@
(set! blist
(alist-cons (cons var (car ctags)) pt blist)))
(a
- ;;XXX do this only if declared "enforce-argument-types"
- (let ((ar (cond ((get db var 'assigned) '*)
- ((eq? '* argr) (cdr a))
- (else argr))))
- (d "assuming: ~a -> ~a (flow: ~a)" var ar (car flow))
- (set! blist
- (alist-cons (cons var (car flow)) ar blist))))))))
+ (when enforces
+ (let ((ar (cond ((get db var 'assigned) '*)
+ ((eq? '* argr) (cdr a))
+ (else argr))))
+ (d "assuming: ~a -> ~a (flow: ~a)" var ar (car flow))
+ (set! blist
+ (alist-cons (cons var (car flow)) ar blist)))))))))
subs
(cons fn (procedure-argument-types fn (sub1 len))))
r)))
Trap