~ chicken-core (chicken-5) abbffb094fa940dfa2145d043e5e6048bec5c021
commit abbffb094fa940dfa2145d043e5e6048bec5c021 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Wed Mar 9 09:35:47 2011 -0500 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Wed Mar 9 09:35:47 2011 -0500 resolution bugs, load type files in correct order, types.db fixes diff --git a/batch-driver.scm b/batch-driver.scm index 04fa37bf..18a363b8 100644 --- a/batch-driver.scm +++ b/batch-driver.scm @@ -508,38 +508,7 @@ (print-node "initial node tree" '|T| node0) (initialize-analysis-database) - (when (or do-scrutinize do-specialize) - ;;;XXX hardcoded database file name - (unless (memq 'ignore-repository options) - (load-type-database "types.db")) - (for-each (cut load-type-database <> #f) (collect-options 'types)) - (begin-time) - (set! first-analysis #f) - (set! db (analyze 'scrutiny node0)) - (print-db "analysis" '|0| db 0) - (end-time "pre-analysis (scrutiny)") - (begin-time) - (debugging 'p "performing scrutiny") - (scrutinize node0 db do-scrutinize do-specialize) - (end-time "scrutiny") - (when do-specialize - (print-node "specialization" '|P| node0)) - (set! first-analysis #t) ) - - (when do-lambda-lifting - (begin-time) - (unless do-scrutinize ; no need to do analysis if already done - (set! first-analysis #f) ; (and not specialized) - (set! db (analyze 'lift node0)) - (print-db "analysis" '|0| db 0) - (end-time "pre-analysis (lambda-lift)")) - (begin-time) - (perform-lambda-lifting! node0 db) - (end-time "lambda lifting") - (print-node "lambda lifted" '|L| node0) - (set! first-analysis #t) ) - - ;; collect requirements and load inline and types files + ;; collect requirements and load inline files (let* ((req (concatenate (vector->list file-requirements))) (mreq (concatenate (map cdr req)))) (when (debugging 'M "; requirements:") @@ -561,8 +530,43 @@ (lambda (ilf) (dribble "Loading inline file ~a ..." ilf) (load-inline-file ilf) ) - ifs)))) + ifs))) + (when (or do-scrutinize do-specialize) + ;;XXX hardcoded database file name + (unless (memq 'ignore-repository options) + (load-type-database "types.db")) + (for-each (cut load-type-database <> #f) (collect-options 'types)) + (for-each + (lambda (id) + (load-type-database (make-pathname #f (symbol->string id) "types"))) + mreq) + (begin-time) + (set! first-analysis #f) + (set! db (analyze 'scrutiny node0)) + (print-db "analysis" '|0| db 0) + (end-time "pre-analysis (scrutiny)") + (begin-time) + (debugging 'p "performing scrutiny") + (scrutinize node0 db do-scrutinize do-specialize) + (end-time "scrutiny") + (when do-specialize + (print-node "specialization" '|P| node0)) + (set! first-analysis #t) ) ) + + (when do-lambda-lifting + (begin-time) + (unless do-scrutinize ; no need to do analysis if already done + (set! first-analysis #f) ; (and not specialized) + (set! db (analyze 'lift node0)) + (print-db "analysis" '|0| db 0) + (end-time "pre-analysis (lambda-lift)")) + (begin-time) + (perform-lambda-lifting! node0 db) + (end-time "lambda lifting") + (print-node "lambda lifted" '|L| node0) + (set! first-analysis #t) ) + ;; lambda-lifting (when do-lambda-lifting (begin-time) diff --git a/types.db b/types.db index bfb8f1ad..8c96576b 100644 --- a/types.db +++ b/types.db @@ -158,11 +158,9 @@ (+ (procedure + (#!rest number) number) (((or fixnum flonum number)) #(1)) - ((fixnum fixnum) (##core#inline "C_u_fixnum_plus" #(1) #(2))) ((float float) (##core#inline_allocate ("C_a_i_flonum_plus" 4) #(1) #(2)))) (- (procedure - (number #!rest number) number) - ((fixnum fixnum) (##core#inline "C_i_fixnum_difference" #(1) #(2))) ((fixnum) (##core#inline "C_u_fixnum_negate" #(1))) ((float float) (##core#inline_allocate ("C_a_i_flonum_difference" 4) #(1) #(2))) @@ -170,14 +168,10 @@ (* (procedure * (#!rest number) number) (((or fixnum float number)) #(1)) - ((fixnum fixnum) (##core#inline "C_fixnum_times" #(1) #(2))) - ((float float) (##core#inline_allocate ("C_a_i_flonum_times" 4) - #(1) #(2)))) + ((float float) (##core#inline_allocate ("C_a_i_flonum_times" 4) #(1) #(2)))) (/ (procedure / (number #!rest number) number) - ((fixnum fixnum) (##core#inline "C_fixnum_divide" #(1) #(2))) - ((float float) (##core#inline_allocate ("C_a_i_flonum_quotient" 4) - #(1) #(2)))) + ((float float) (##core#inline_allocate ("C_a_i_flonum_quotient" 4) #(1) #(2)))) (= (procedure = (#!rest number) boolean) ((fixnum fixnum) (eq? #(1) #(2)))Trap