~ chicken-core (chicken-5) c54824f75f025038c8f367fc9568da450d4ea68a
commit c54824f75f025038c8f367fc9568da450d4ea68a Author: felix <felix@call-with-current-continuation.org> AuthorDate: Sat Jan 31 00:44:09 2015 +0100 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Sat Jan 31 00:44:09 2015 +0100 More fixing for mini-srfi-1 diff --git a/chicken-syntax.scm b/chicken-syntax.scm index 31608bcd..b58ae106 100644 --- a/chicken-syntax.scm +++ b/chicken-syntax.scm @@ -784,7 +784,7 @@ (##core#let ((,lvar (,%length ,rvar))) ,(foldr - (lambda (body c) + (lambda (c body) (##sys#decompose-lambda-list (car c) (lambda (vars argc rest) diff --git a/core.scm b/core.scm index 4cd4d9e0..afe0f49e 100644 --- a/core.scm +++ b/core.scm @@ -2384,7 +2384,7 @@ (lambda (vars argc rest) (let ((id (if here (first params) 'toplevel))) (fluid-let ((lexicals (append locals lexicals))) - (let ((c (delete-duplicates (gather (first subs) id vars)))) + (let ((c (delete-duplicates (gather (first subs) id vars) eq?))) (db-put! db id 'closure-size (length c)) (db-put! db id 'captured-variables c) (lset-difference c locals vars))))))) diff --git a/mini-srfi-1.scm b/mini-srfi-1.scm index 1b20c441..155ce79a 100644 --- a/mini-srfi-1.scm +++ b/mini-srfi-1.scm @@ -48,7 +48,7 @@ (define (take lst n) (if (fx<= n 0) '() - (cons (car lst) (take lst (fx- n 1))))) + (cons (car lst) (take (cdr lst) (fx- n 1))))) (define (drop lst n) (let loop ((lst lst) (n n)) diff --git a/optimizer.scm b/optimizer.scm index d0d1d55d..7df97da7 100644 --- a/optimizer.scm +++ b/optimizer.scm @@ -214,7 +214,7 @@ (cond ((not ok) (unless odirty (set! dirty #f)) (set! broken-constant-nodes - (lset-adjoin eq? broken-constant-nodes n1)) + (lset-adjoin broken-constant-nodes n1)) n1) (else (touch) diff --git a/scrutinizer.scm b/scrutinizer.scm index bd043808..d4c808b4 100644 --- a/scrutinizer.scm +++ b/scrutinizer.scm @@ -1252,7 +1252,7 @@ (if (any (cut eq? 'procedure <>) ts) 'procedure (foldl - (lambda (t pt) + (lambda (pt t) (let* ((name1 (procedure-name t)) (atypes1 (procedure-arguments t)) (rtypes1 (procedure-results t)) @@ -2076,7 +2076,7 @@ ,(map (lambda (tv) (cond ((assq tv constraints) => identity) (else tv))) - (delete-duplicates typevars)) + (delete-duplicates typevars eq?)) ,type))) (let ((type2 (simplify-type type))) (values @@ -2335,7 +2335,7 @@ ;; collect candidates for each typevar (define (collect) - (let* ((vars (delete-duplicates (concatenate (map unzip1 insts)))) + (let* ((vars (delete-duplicates (concatenate (map unzip1 insts)) eq?)) (all (map (lambda (var) (cons var @@ -2352,7 +2352,7 @@ (ddd " over-all-instantiations: ~s exact=~a" tlist exact) ;; process all tlist elements - (let loop ((ts (delete-duplicates tlist)) + (let loop ((ts (delete-duplicates tlist eq?)) (ok #f)) (cond ((null? ts) (cond ((or ok (null? tlist)) diff --git a/support.scm b/support.scm index bffedf43..db1e5fc3 100644 --- a/support.scm +++ b/support.scm @@ -646,10 +646,10 @@ llist (lambda (vars argc rest) (receive (largs rargs) (split-at args argc) - (let* ([rlist (if copy? (map gensym vars) vars)] - [body (if copy? + (let* ((rlist (if copy? (map gensym vars) vars)) + (body (if copy? (copy-node-tree-and-rename body vars rlist db cfk) - body) ] ) + body) ) ) (let loop ((vars (take rlist argc)) (vals largs)) (if (null? vars) diff --git a/tests/apply-test.scm b/tests/apply-test.scm index 568b9678..b5c1da32 100644 --- a/tests/apply-test.scm +++ b/tests/apply-test.scm @@ -6,7 +6,17 @@ '() (cons (proc i) (loop (fx+ i 1)))))) -(define (iota n) (list-tabulate n (lambda (i) i))) +(define-for-syntax (list-tabulate n proc) + (let loop ((i 0)) + (if (fx>= i n) + '() + (cons (proc i) (loop (fx+ i 1)))))) + +(define (last lst) + (let loop ((lst lst)) + (if (null? (cdr lst)) + (car lst) + (loop (cdr lst))))) (define max-argcount ##sys#apply-argument-limit) @@ -30,7 +40,7 @@ (printf "testing 'apply' with 0..~A (maximum apply argument count)...\n" max-argcount) (do ((i 0 (add1 i))) ((>= i max-argcount)) - (apply foo (iota i 1))) + (apply foo (list-tabulate i add1))) (let-syntax ((invoke-directly @@ -39,13 +49,13 @@ `(begin (print "invoking directly with 0..50...") ;; Lowest edge cases - ,@(list-tabulate 50 (lambda (i) `(foo ,@(iota i 1)))) + ,@(list-tabulate 50 (lambda (i) `(foo ,@(list-tabulate i add1)))) (printf "invoking directly with ~A..~A (maximum ~A direct argument count)...\n" ,(- max-direct-argcount 50) ,max-direct-argcount (cond-expand (compiling "compiled") (else "interpreted"))) ;; Highest edge cases ,@(list-tabulate - 50 (lambda (i) `(foo ,@(iota (- max-direct-argcount i) 1))))))))) + 50 (lambda (i) `(foo ,@(list-tabulate (- max-direct-argcount i) add1))))))))) (print "If this segfaults on x86-64, try updating GCC (4.5 has a code-generation bug):") (invoke-directly)) @@ -56,11 +66,11 @@ ((exn runtime limit) 'a-okay)))))) (print "testing 'apply' can detect calls of too many arguments...") -(assert-argcount-error (apply foo (iota (add1 max-argcount) 1))) +(assert-argcount-error (apply foo (list-tabulate (add1 max-argcount) add1))) (print "testing direct invocation can detect calls of too many arguments...") (let-syntax ((invoke-directly-with-too-many-args (ir-macro-transformer (lambda (i r c) - `(assert-argcount-error (foo ,@(iota (add1 max-direct-argcount) 1))))))) + `(assert-argcount-error (foo ,@(list-tabulate (add1 max-direct-argcount) add1))))))) (invoke-directly-with-too-many-args)) diff --git a/tests/environment-tests.scm b/tests/environment-tests.scm index 86cb598b..b6680d41 100644 --- a/tests/environment-tests.scm +++ b/tests/environment-tests.scm @@ -40,11 +40,11 @@ (define (bar) 99)) (define foo-env (module-environment 'foo)) -(define srfi-4-env (module-environment 'srfi-4)) +(define ds-env (module-environment 'data-structures)) (test-equal (eval '(bar) foo-env) 99) (test-error (eval 'baz foo-env)) -(test-equal (eval '(u8vector 1 2) srfi-4-env) '#u8(1 2)) -(test-error (eval 'baz srf-4-env)) +(test-equal (eval '(conc 1 2) ds-env) "12") +(test-error (eval 'baz ds-env)) (test-end) diff --git a/tests/functor-tests.scm b/tests/functor-tests.scm index b7975849..1c71ddf2 100644 --- a/tests/functor-tests.scm +++ b/tests/functor-tests.scm @@ -13,6 +13,11 @@ (include "test-queue") (include "breadth-first") +(define (take lst n) + (if (fx<= n 0) + '() + (cons (car lst) (take (cdr lst) (fx- n 1))))) + (module queue1 QUEUE (import (rename scheme diff --git a/tests/library-tests.scm b/tests/library-tests.scm index 0a20acd4..bdf74fbf 100644 --- a/tests/library-tests.scm +++ b/tests/library-tests.scm @@ -7,6 +7,18 @@ ((_ exp) (assert (handle-exceptions ex #t exp #f))))) +(define (list-tabulate n proc) + (let loop ((i 0)) + (if (fx>= i n) + '() + (cons (proc i) (loop (fx+ i 1)))))) + +(define (every pred lst) + (let loop ((lst lst)) + (cond ((null? lst)) + ((not (pred (car lst))) #f) + (else (loop (cdr lst)))))) + ;; numbers (assert (not (not 3))) @@ -226,7 +238,7 @@ ;; by Christian Kellermann (assert (equal? - (map (lambda (n) (number->string 32 n)) (iota 15 2)) + (map (lambda (n) (number->string 32 n)) (list-tabulate 15 (cut + 2 <>))) '("100000" "1012" "200" "112" "52" "44" "40" "35" "32" "2A" "28" "26" "24" "22" "20"))) diff --git a/tests/reexport-m2.scm b/tests/reexport-m2.scm index daee95f8..923491a9 100644 --- a/tests/reexport-m2.scm +++ b/tests/reexport-m2.scm @@ -3,4 +3,4 @@ (module foo () (import scheme chicken) (use reexport-m1) - (print (cons* 1 2 3))) + (print (cons 1 2))) diff --git a/tests/srfi-4-tests.scm b/tests/srfi-4-tests.scm index 59e265d7..addbf56d 100644 --- a/tests/srfi-4-tests.scm +++ b/tests/srfi-4-tests.scm @@ -20,9 +20,9 @@ (assert (= 99 (,(conc "vector-ref") x 1))) (assert (= 2 (,(conc "vector-length") x))) (assert - (every = - '(100 99) - (,(conc "vector->list") x)))))))) + (let ((result (,(conc "vector->list") x))) + (and (= 100 (car result)) + (= 99 (cadr result)))))))))) (test1 u8) (test1 u16) diff --git a/tests/test-finalizers-2.scm b/tests/test-finalizers-2.scm index 156d3a5a..09efe02d 100644 --- a/tests/test-finalizers-2.scm +++ b/tests/test-finalizers-2.scm @@ -7,6 +7,14 @@ '() (cons (proc i) (loop (fx+ i 1)))))) +(define (circular-list x1 . lst) + (let ((lst1 (cons x1 lst))) + (let loop ((lst lst1)) + (if (null? (cdr lst)) + (set-cdr! lst lst1) + (loop (cdr lst)))) + lst1)) + (define *n* 1000) (define *count* 0) diff --git a/tests/test-queue.scm b/tests/test-queue.scm index 00e53242..278a3e2d 100644 --- a/tests/test-queue.scm +++ b/tests/test-queue.scm @@ -6,10 +6,9 @@ (functor (test-queue (Q QUEUE)) * (import scheme chicken Q) - (use srfi-1) (define (list->queue lst) - (fold (lambda (x q) (enqueue q x)) empty-queue lst)) + (foldl (lambda (q x) (enqueue q x)) empty-queue lst)) (define (queue->list q) (if (empty? q) diff --git a/tests/typematch-tests.scm b/tests/typematch-tests.scm index 71fe84fa..1e254cd1 100644 --- a/tests/typematch-tests.scm +++ b/tests/typematch-tests.scm @@ -274,9 +274,6 @@ (mx fixnum (##sys#vector-ref '#(1 2 3.4) 0)) (mx (vector fixnum float) (vector 1 2.3)) (mx (list fixnum float) (list 1 2.3)) -(mx (list fixnum float) (list-copy (list 1 2.3))) -(mx (pair fixnum float) (list-copy (cons 1 2.3))) -(mx fixnum (list-copy 1)) (mx fixnum (list-ref (list 1 2.3) 0)) (mx fixnum (list-ref (cons 1 2.3) 0)) (mx float (list-ref (list 1 2.3) 1)) @@ -285,18 +282,6 @@ (mx (list float) (list-tail (list 1 2.3) 1)) (mx float (list-tail (cons 1 2.3) 1)) (mx null (list-tail (list 1 2.3) 2)) -(mx (list fixnum float) (drop (list 1 2.3) 0)) -(mx (pair fixnum float) (drop (cons 1 2.3) 0)) -(mx (list float) (drop (list 1 2.3) 1)) -(mx float (drop (cons 1 2.3) 1)) -(mx null (drop (list 1 2.3) 2)) -(mx null (take (list 1 2.3) 0)) -(mx null (take (cons 1 2.3) 0)) -(mx (list fixnum) (take (list 1 2.3) 1)) -(mx (list fixnum) (take (cons 1 2.3) 1)) -(mx (list fixnum float) (take (list 1 2.3) 2)) -(mx (list * *) (make-list 2)) -(mx (list string string) (make-list 2 "a")) (mx (vector * *) (make-vector 2)) (mx (vector string string) (make-vector 2 "a")) (mx null (reverse '()))Trap