~ chicken-core (chicken-5) 77e3855c5d4328af6275b2a18b4440054638b32a
commit 77e3855c5d4328af6275b2a18b4440054638b32a Author: felix <felix@call-with-current-continuation.org> AuthorDate: Fri Jan 30 11:56:05 2015 +0100 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Fri Jan 30 11:56:05 2015 +0100 added posq/posv to mini-srfi-1.scm and fixed a few bugs, but optimizer seems to be broken. diff --git a/c-backend.scm b/c-backend.scm index d012a09d..e81ab4df 100644 --- a/c-backend.scm +++ b/c-backend.scm @@ -463,7 +463,8 @@ (let loop ((xs args)) (unless (null? xs) (unless (eq? xs args) (gen #\,)) - (expr (car xs) i) ))) + (expr (car xs) i) + (loop (cdr xs))))) (expr node temps) ) @@ -1153,7 +1154,8 @@ (let loop ((vs vlist) (ts argtypes)) (unless (null? vs) (gen (foreign-type-declaration (car ts) (car vs))) - (when (pair? (cdr vs)) (gen #\,)) )) + (when (pair? (cdr vs)) (gen #\,)) + (loop (cdr vs) (cdr ts)))) (gen #\)) ) ) diff --git a/eval.scm b/eval.scm index ff047a84..ce66ce22 100644 --- a/eval.scm +++ b/eval.scm @@ -50,6 +50,7 @@ <# (include "common-declarations.scm") +(include "mini-srfi-1.scm") (define-syntax d (syntax-rules () ((_ . _) (void)))) diff --git a/mini-srfi-1.scm b/mini-srfi-1.scm index 4534ebf7..1b20c441 100644 --- a/mini-srfi-1.scm +++ b/mini-srfi-1.scm @@ -30,7 +30,7 @@ first second third fourth alist-cons delete-duplicates fifth filter filter-map unzip1 last list-index lset-adjoin lset-difference lset-union lset-intersection list-tabulate lset<= lset= length+ find find-tail - iota make-list)) + iota make-list posq posv)) (define (partition pred lst) @@ -47,7 +47,7 @@ (define (take lst n) (if (fx<= n 0) - lst + '() (cons (car lst) (take lst (fx- n 1))))) (define (drop lst n) @@ -216,3 +216,16 @@ (define (make-list n x) (list-tabulate n (lambda _ x))) + +(define (posq x lst) + (let loop ((i 0) (lst lst)) + (cond ((null? lst) #f) + ((eq? (car lst) x) i) + (else (loop (fx+ i 1) (cdr lst)))))) + +(define (posv x lst) + (let loop ((i 0) (lst lst)) + (cond ((null? lst) #f) + ((eqv? (car lst) x) i) + (else (loop (fx+ i 1) (cdr lst)))))) + diff --git a/optimizer.scm b/optimizer.scm index 5c480819..d0d1d55d 100644 --- a/optimizer.scm +++ b/optimizer.scm @@ -1072,8 +1072,8 @@ vars) ) ) ) (make-node 'let (list (car names)) - (list (car callargs)) - (loop (cdr callargs) (cdr names)))))))))) + (list (car callargs) + (loop (cdr callargs) (cdr names))))))))))) ;; (<op> a [b]) -> (<primitiveop> a (quote <i>) b) ((10) ; classargs = (<primitiveop> <i> <bvar> <safe>) diff --git a/rules.make b/rules.make index 5a61887d..0eef0c99 100644 --- a/rules.make +++ b/rules.make @@ -541,7 +541,7 @@ bootstrap-lib = $(CHICKEN) $(call profile-flags, $@) $< $(CHICKEN_LIBRARY_OPTION library.c: $(SRCDIR)library.scm $(SRCDIR)banner.scm $(SRCDIR)common-declarations.scm $(bootstrap-lib) -eval.c: $(SRCDIR)eval.scm $(SRCDIR)common-declarations.scm +eval.c: $(SRCDIR)eval.scm $(SRCDIR)common-declarations.scm $(SRCDIR)mini-srfi-1.scm $(bootstrap-lib) expand.c: $(SRCDIR)expand.scm $(SRCDIR)synrules.scm $(SRCDIR)common-declarations.scm $(bootstrap-lib) diff --git a/support.scm b/support.scm index 678575b5..bffedf43 100644 --- a/support.scm +++ b/support.scm @@ -32,7 +32,7 @@ (module chicken.compiler.support (compiler-cleanup-hook bomb collected-debugging-output debugging debugging-chicken with-debugging-output quit-compiling - emit-syntax-trace-info check-signature posq posv stringify symbolify + emit-syntax-trace-info check-signature stringify symbolify build-lambda-list string->c-identifier c-ify-string valid-c-identifier? bytes->words words->bytes check-and-open-input-file close-checked-input-file fold-inner @@ -196,19 +196,6 @@ ;;; Generic utility routines: -;; XXX: Don't posq and posv belong better in library or data-structures? -(define (posq x lst) - (let loop ([lst lst] [i 0]) - (cond [(null? lst) #f] - [(eq? x (car lst)) i] - [else (loop (cdr lst) (add1 i))] ) ) ) - -(define (posv x lst) - (let loop ([lst lst] [i 0]) - (cond [(null? lst) #f] - [(eqv? x (car lst)) i] - [else (loop (cdr lst) (add1 i))] ) ) ) - (define (stringify x) (cond ((string? x) x) ((symbol? x) (symbol->string x))Trap