~ 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