~ chicken-core (chicken-5) 9d1495e09d6decd57119872bb47b2976d4896642
commit 9d1495e09d6decd57119872bb47b2976d4896642
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Fri Jun 24 14:23:20 2011 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Fri Jun 24 14:23:20 2011 +0200
rest-list access in speciialization-templates; fixed specialization-syntax specification; show walk-depth in debug output
diff --git a/scrutinizer.scm b/scrutinizer.scm
index 72a3e77b..6ce2190b 100755
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -41,7 +41,7 @@
(define (d fstr . args)
(when (##sys#fudge 13)
- (printf "[debug] ~a~?~%" (make-string d-depth #\space) fstr args)) )
+ (printf "[debug|~a] ~a~?~%" d-depth (make-string d-depth #\space) fstr args)) )
(define dd d)
@@ -78,9 +78,11 @@
;
; specialization specifiers:
;
-; SPECIALIZATION = ((MVAL ... [#!rest MVAL]) TEMPLATE)
+; SPECIALIZATION = ((MVAL ... [#!rest MVAL]) [RESULTS] TEMPLATE)
; MVAL = VAL | (not VAL) | (or VAL ...) | (and VAL ...)
-; TEMPLATE = #(INDEX [...])
+; TEMPLATE = #(INDEX)
+; | #(-INDEX)
+; | #(SYMBOL)
; | INTEGER | SYMBOL | STRING
; | (quote CONSTANT)
; | (TEMPLATE . TEMPLATE)
@@ -1161,7 +1163,10 @@
(cond ((and (vector? x)
(= 1 (vector-length x)) )
(let ((y (vector-ref x 0)))
- (cond ((integer? y) (list-ref args (sub1 y)))
+ (cond ((integer? y)
+ (if (negative? y)
+ (list-tail args (sub1 (- y)))
+ (list-ref args (sub1 y))))
((symbol? y)
(cond ((assq y env) => cdr)
(else
diff --git a/types.db b/types.db
index 5041696e..7c6d1179 100644
--- a/types.db
+++ b/types.db
@@ -96,7 +96,6 @@
(set-cdr! (procedure! set-cdr! (pair *) undefined) ((pair *) (##sys#setslot #(1) '1 #(2))))
(null? (procedure? null null? (*) boolean))
-
(list? (procedure? list list? (*) boolean))
(list (procedure list (#!rest) list))
@@ -158,10 +157,6 @@
((float float) (##core#inline "C_i_flonum_min" #(1) #(2))))
(+ (procedure! + (#!rest number) number)
-;XXX add these, also for other multi-arity, possibly fast operations:
-;
-; ((* * * *) (+ (+ (+ #(1) #(2)) #(3)) #(4)))
-; ((* * *) (+ (+ #(1) #(2)) #(3)))
((fixnum) (fixnum) #(1))
((float) (float) #(1))
((number) #(1))
Trap