~ chicken-core (chicken-5) e6eb2d2499182816747f9818a2d1a7195be5f659
commit e6eb2d2499182816747f9818a2d1a7195be5f659
Author: felix <bunny351@gmail.com>
AuthorDate: Mon May 31 11:46:22 2010 +0200
Commit: felix <bunny351@gmail.com>
CommitDate: Mon May 31 11:46:22 2010 +0200
added patch by Christian Kellermann to make describe handle circular lists
diff --git a/README b/README
index 0425edd0..b820b435 100644
--- a/README
+++ b/README
@@ -340,11 +340,14 @@
release tarball, unpack it, change into the extracted
directory and enter
- make PLATFORM=<platform> boot-chicken
+ make PLATFORM=<platform> CHICKEN=<path-to-existing-chicken> \
+ boot-chicken
This will produce a statically linked binary with the name
"chicken-boot[.exe]" that can be given as the value of the
- "CHICKEN" argument when invoking make(1).
+ "CHICKEN" argument when invoking make(1). Note that the path
+ to an existing `chicken' binary must be given to use it for
+ compiling the Scheme code of the runtime-system and compiler.
7. Emacs support
diff --git a/chicken-install.scm b/chicken-install.scm
index faca7081..adc118b0 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -397,7 +397,7 @@
(not (yes-or-no?
(string-append
"You specified `-no-install', but this extension has dependencies"
- " that are required for building. Do you still want to install them?")
+ " that are required for building.\nDo you still want to install them?")
abort: abort-setup)))
(print "aborting installation.")
(cleanup)
diff --git a/csi.scm b/csi.scm
index 4cd15990..bcb10222 100644
--- a/csi.scm
+++ b/csi.scm
@@ -53,7 +53,7 @@ EOF
(always-bound
##sys#windows-platform)
(hide parse-option-string bytevector-data member* canonicalize-args
- describer-table dirseparator?
+ describer-table dirseparator? circular-list?
findall command-table) )
@@ -448,6 +448,15 @@ EOF
(f32vector "vector of 32-bit floats" f32vector-length f32vector-ref)
(f64vector "vector of 64-bit floats" f64vector-length f64vector-ref) ) )
+(define (circular-list? x)
+ (let lp ((x x) (lag x))
+ (and (pair? x)
+ (let ((x (cdr x)))
+ (and (pair? x)
+ (let ((x (cdr x))
+ (lag (cdr lag)))
+ (or (eq? x lag) (lp x lag))))))))
+
(define-constant max-describe-lines 40)
(define describer-table (make-vector 37 '()))
@@ -524,6 +533,15 @@ EOF
(lambda ()
(write (cadr plist) out) ) )
(newline out) ) ) ) ]
+ [(circular-list? x)
+ (fprintf out "circular list: ")
+ (let loop-print ((x x)
+ (parsed '()))
+ (if (not (memq (car x) parsed))
+ (begin
+ (fprintf out "~S -> " (car x))
+ (loop-print (cdr x) (cons (car x) parsed)))
+ (fprintf out " ~S (circle)~%" (car (memq (car x) parsed)))))]
[(list? x) (descseq "list" length list-ref 0)]
[(pair? x) (fprintf out "pair with car ~S and cdr ~S~%" (car x) (cdr x))]
[(procedure? x)
diff --git a/defaults.make b/defaults.make
index 703e2af1..1f7b92d9 100644
--- a/defaults.make
+++ b/defaults.make
@@ -292,7 +292,7 @@ CSI ?= csi$(EXE)
# Scheme compiler flags
-CHICKEN_OPTIONS = -optimize-level 2 -include-path . -include-path $(SRCDIR) -inline
+CHICKEN_OPTIONS = -optimize-level 2 -include-path . -include-path $(SRCDIR) -inline -ignore-repository
ifdef DEBUGBUILD
CHICKEN_OPTIONS += -feature debugbuild -scrutinize -types $(SRCDIR)types.db
else
diff --git a/support.scm b/support.scm
index f0e62bc2..ac6c8a05 100644
--- a/support.scm
+++ b/support.scm
@@ -1091,9 +1091,9 @@
`(let ((,tmp ,body))
(and ,tmp
(not (##sys#null-pointer? ,tmp))
- (make ,(caddr type) 'this ,tmp) ) ) ) ]
+ (make-instance ,(caddr type) 'this ,tmp) ) ) ) ]
[(and (list? type) (= 3 (length type)) (eq? 'nonnull-instance (car type)))
- `(make ,(caddr type) 'this ,body) ]
+ `(make-instance ,(caddr type) 'this ,body) ]
[else body] ) ] ) )
Trap