~ chicken-core (chicken-5) 99929b98c4e9824eb08a924d4253ea73b897240d
commit 99929b98c4e9824eb08a924d4253ea73b897240d Author: felix <felix@call-with-current-continuation.org> AuthorDate: Thu Mar 31 10:24:54 2011 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Thu Mar 31 10:24:54 2011 +0200 types.db fix; disabled scrutiny for debugbuild temporarily; scrutiny fixes, predicate-specialization reports diff --git a/defaults.make b/defaults.make index b19cca82..5b8e1d9f 100644 --- a/defaults.make +++ b/defaults.make @@ -275,7 +275,8 @@ CSI ?= csi$(EXE) CHICKEN_OPTIONS = -optimize-level 2 -include-path . -include-path $(SRCDIR) -inline -ignore-repository -feature chicken-bootstrap ifdef DEBUGBUILD -CHICKEN_OPTIONS += -feature debugbuild -scrutinize -types $(SRCDIR)types.db +#CHICKEN_OPTIONS += -feature debugbuild -scrutinize -types $(SRCDIR)types.db +CHICKEN_OPTIONS += -feature debugbuild else CHICKEN_OPTIONS += -no-warnings endif diff --git a/scrutinizer.scm b/scrutinizer.scm index df2f244c..9abb2edd 100755 --- a/scrutinizer.scm +++ b/scrutinizer.scm @@ -37,7 +37,10 @@ (when (##sys#fudge 13) (printf "[debug] ~?~%" fstr args)) ) +(define dd d) + ;(define-syntax d (syntax-rules () ((_ . _) (void)))) +(define-syntax dd (syntax-rules () ((_ . _) (void)))) ;;; Walk node tree, keeping type and binding information @@ -138,7 +141,7 @@ => (o list cdr)) (else #f))) (define (variable-result id e loc flow) - (cond ((vblist-type id flow)) + (cond ((blist-type id flow)) ((and (get db id 'assigned) (not (##sys#get id '##compiler#declared-type))) '(*)) @@ -211,7 +214,7 @@ (map typename results)))))) (define (simplify t) (let ((t2 (simplify1 t))) - (d "simplify: ~a -> ~a" t t2) + (dd "simplify: ~a -> ~a" t t2) t2)) (define (simplify1 t) (call/cc @@ -258,7 +261,7 @@ (else (loop (cdr ts) (cons (car ts) done))))))) (cond ((equal? ts2 (cdr t)) t) (else - (d " or-simplify: ~a" ts2) + (dd " or-simplify: ~a" ts2) (simplify `(or ,@(if (any (cut eq? <> '*) ts2) '(*) ts2)))))))) ) ((procedure) (let* ((name (and (named? t) (cadr t))) @@ -308,7 +311,7 @@ (merge-result-types (cdr ts1) (cdr ts2)))))) (define (match t1 t2) (let ((m (match1 t1 t2))) - (d "match ~a <-> ~a -> ~a" t1 t2 m) + (dd "match ~a <-> ~a -> ~a" t1 t2 m) m)) (define (match1 t1 t2) (cond ((eq? t1 t2)) @@ -471,7 +474,7 @@ "")) "") (fragment (first (node-subexpressions node))))) - (d "call-result: ~a " args) + (d " call-result: ~a " args) (let* ((ptype (car args)) (nargs (length (cdr args))) (xptype `(procedure ,(make-list nargs '*) *))) @@ -625,7 +628,7 @@ (for-each (lambda (b) (when (get db (caar b) 'assigned) - (d "invalidating: ~a" b) + (dd "invalidating: ~a" b) (set-cdr! b '*))) blist)) (define (walk n e loc dest tail flow ctags) ; returns result specifier @@ -740,7 +743,7 @@ (a (assq var e)) (pred (and pt ctags (not (eq? arg (car subs)))))) (cond (pred - (d "predicate `~a' indicates `~a' is ~a in flow ~a" pn var pt + (d " predicate `~a' indicates `~a' is ~a in flow ~a" pn var pt (car ctags)) (set! blist (alist-cons (cons var (car ctags)) pt blist))) @@ -755,7 +758,7 @@ ((get db var 'assigned) '*) ((type<=? (cdr a) argr) (cdr a)) (else argr)))) - (d "assuming: ~a -> ~a (flow: ~a)" var ar (car flow)) + (d " assuming: ~a -> ~a (flow: ~a)" var ar (car flow)) (set! blist (alist-cons (cons var (car flow)) ar blist))))))))) subs @@ -766,7 +769,7 @@ (else (for-each (lambda (n) (walk n e loc #f #f flow #f)) subs) '*)))) - (d " -> ~a" results) + (dd " -> ~a" results) results))) (let ((rn (walk (first (node-subexpressions node)) '() '() #f #f (list (tag)) #f))) (when (and (pair? specialization-statistics) @@ -790,14 +793,14 @@ (old (##sys#get name '##compiler#type)) (new (cadr e)) (specs (and (pair? (cddr e)) (cddr e)))) + (when (and (pair? new) (eq? 'procedure! (car new))) + (##sys#put! name '##compiler#enforce-argument-types #t) + (set-car! new 'procedure)) (when (and old (not (equal? old new))) (##sys#notice (sprintf "type-definition `~a' for toplevel binding `~a' conflicts with previously loaded type `~a'" name new old))) - (when (and (pair? new) (eq? 'procedure! (car new))) - (##sys#put! name '##compiler#enforce-argument-types #t) - (set-car! new 'procedure)) (##sys#put! name '##compiler#type new) (when specs (##sys#put! name '##compiler#specializations specs)))))) diff --git a/types.db b/types.db index c00f127e..38e11bec 100644 --- a/types.db +++ b/types.db @@ -1155,7 +1155,6 @@ (with-input-from-string (procedure! with-input-from-string (string (procedure () . *)) . *)) (with-output-to-port (procedure! with-output-to-port (port (procedure () . *)) . *)) (with-output-to-string (procedure! with-output-to-string ((procedure () . *)) . *)) -(with-error-output-to-port (procedure! with-error-output-to-port (port (procedure () . *)) . *)) ;; posixTrap