~ chicken-core (chicken-5) 5aab750e2388fde60b5fd0c07f1157c23fb254a7
commit 5aab750e2388fde60b5fd0c07f1157c23fb254a7 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Fri Jul 15 15:05:48 2011 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Fri Jul 15 15:05:48 2011 +0200 compiler-syntax fixes; removed uses of define-syntax with implicit lambda diff --git a/chicken-syntax.scm b/chicken-syntax.scm index e57148dd..aea116fd 100644 --- a/chicken-syntax.scm +++ b/chicken-syntax.scm @@ -141,22 +141,22 @@ (##sys#extend-macro-environment 'time '() (##sys#er-transformer - (lambda (form r c) - (let ((rvar (r 't))) - `(##core#begin - (##sys#start-timer) - (##sys#call-with-values - (##core#lambda () ,@(cdr form)) - (##core#lambda - ,rvar - (##sys#display-times (##sys#stop-timer)) - (##sys#apply ##sys#values ,rvar) ) ) ) ) ) ) ) + (lambda (form r c) + (let ((rvar (r 't))) + `(##core#begin + (##sys#start-timer) + (##sys#call-with-values + (##core#lambda () ,@(cdr form)) + (##core#lambda + ,rvar + (##sys#display-times (##sys#stop-timer)) + (##sys#apply ##sys#values ,rvar) ) ) ) ) ) ) ) (##sys#extend-macro-environment 'declare '() (##sys#er-transformer - (lambda (form r c) - `(##core#declare ,@(cdr form))))) + (lambda (form r c) + `(##core#declare ,@(cdr form))))) (##sys#extend-macro-environment 'include '() @@ -1093,21 +1093,20 @@ (##sys#extend-macro-environment 'define-compiler-syntax '() - (##sys#er-transformer - (syntax-rules () - ((_ name) - (##core#define-compiler-syntax name #f)) - ((_ (name . llist) body ...) - (define-compiler-syntax name (lambda llist body ...))) - ((_ name transformer) - (##core#define-compiler-syntax name transformer))))) + (syntax-rules () + ((_ name) + (##core#define-compiler-syntax name #f)) + ((_ (name . llist) body ...) ; DEPRECATED + (define-compiler-syntax name + (##sys#er-transformer (lambda llist body ...) 'name))) + ((_ name transformer) + (##core#define-compiler-syntax name transformer)))) (##sys#extend-macro-environment 'let-compiler-syntax '() - (##sys#er-transformer - (syntax-rules () - ((_ (binding ...) body ...) - (##core#let-compiler-syntax (binding ...) body ...))))) + (syntax-rules () + ((_ (binding ...) body ...) + (##core#let-compiler-syntax (binding ...) body ...)))) ;;; interface definition diff --git a/compiler-syntax.scm b/compiler-syntax.scm index 76fb4e85..835d161f 100644 --- a/compiler-syntax.scm +++ b/compiler-syntax.scm @@ -44,8 +44,8 @@ (define (r-c-s names transformer #!optional (se '())) (let ((t (cons (##sys#ensure-transformer - (##sys#er-transformer transformer) - 'define-compiler-syntax) + (##sys#er-transformer transformer) + (car names)) se))) (for-each (lambda (name) diff --git a/compiler.scm b/compiler.scm index 2217bc6d..7c979a34 100644 --- a/compiler.scm +++ b/compiler.scm @@ -668,7 +668,7 @@ se (##sys#ensure-transformer (##sys#eval/meta (cadr b)) - 'let-syntax))) + (car b)))) (cadr x) ) se) ) ) (walk @@ -683,7 +683,7 @@ #f (##sys#ensure-transformer (##sys#eval/meta (cadr b)) - 'letrec-syntax))) + (car b)))) (cadr x) ) ) (se2 (append ms se)) ) (for-each @@ -727,14 +727,15 @@ (set! compiler-syntax (alist-cons name - (##sys#get name '##compiler#compiler-syntax) compiler-syntax))) + (##sys#get name '##compiler#compiler-syntax) + compiler-syntax))) (##sys#put! name '##compiler#compiler-syntax (and body (##sys#cons (##sys#ensure-transformer (##sys#eval/meta body) - 'define-compiler-syntax) + var) (##sys#current-environment)))) (walk (if ##sys#enable-runtime-macros @@ -745,7 +746,7 @@ `(##sys#cons (##sys#ensure-transformer ,body - 'define-compiler-syntax) + ',var) (##sys#current-environment)))) '(##core#undefined) ) e se dest ldest h))) @@ -760,7 +761,7 @@ (and (pair? (cdr b)) (cons (##sys#ensure-transformer (##sys#eval/meta (cadr b)) - 'let-compiler-syntax) + (car b)) se)) (##sys#get name '##compiler#compiler-syntax) ) ) ) (cadr x)))) diff --git a/eval.scm b/eval.scm index c2d942f8..e2701566 100644 --- a/eval.scm +++ b/eval.scm @@ -557,7 +557,7 @@ se (##sys#ensure-transformer (##sys#eval/meta (cadr b)) - 'let-syntax))) + (car b)))) (cadr x) ) se) ) ) (compile @@ -571,7 +571,7 @@ #f (##sys#ensure-transformer (##sys#eval/meta (cadr b)) - 'letrec-syntax))) + (car b)))) (cadr x) ) ) (se2 (append ms se)) ) (for-each diff --git a/expand.scm b/expand.scm index 697e3205..9fd21346 100644 --- a/expand.scm +++ b/expand.scm @@ -142,7 +142,7 @@ (define (##sys#extend-macro-environment name se transformer) (let ((me (##sys#macro-environment)) - (handler (##sys#ensure-transformer transformer 'define-syntax))) + (handler (##sys#ensure-transformer transformer name))) (cond ((lookup name me) => (lambda (a) (set-car! a se) @@ -487,10 +487,11 @@ (let ((def (car body))) (loop (cdr body) - (cons (cond ((pair? (cadr def)) + (cons (cond ((pair? (cadr def)) ; DEPRECATED `(define-syntax ; (the first element is actually ignored) ,(caadr def) - (##core#lambda ,(cdadr def) ,@(cddr def)))) + (##sys#er-transformer + (##core#lambda ,(cdadr def) ,@(cddr def))))) ;; insufficient, if introduced by different expansions, but ;; better than nothing: ((eq? (car def) (cadr def)) @@ -983,7 +984,7 @@ (when (c (r 'define-syntax) head) (##sys#defjam-error form)) `(##core#define-syntax ,head ,(car body))) - (else + (else ; DEPRECATED (##sys#check-syntax 'define-syntax head '(_ . lambda-list)) (##sys#check-syntax 'define-syntax body '#(_ 1)) (when (eq? (car form) (car head)) @@ -992,7 +993,7 @@ form)) `(##core#define-syntax ,(car head) - (##core#lambda ,(cdr head) ,@body))))))))) + (##sys#er-transformer (##core#lambda ,(cdr head) ,@body)))))))))) (##sys#extend-macro-environment 'let diff --git a/modules.scm b/modules.scm index f42972b1..6188286a 100644 --- a/modules.scm +++ b/modules.scm @@ -335,17 +335,17 @@ (map (lambda (se) (if (symbol? se) (find-reexport se) - (list (car se) #f (##sys#ensure-transformer (cdr se))))) + (list (car se) #f (##sys#ensure-transformer (cdr se) (car se))))) sexports)) (iexps (map (lambda (ie) (if (pair? (cdr ie)) - (list (car ie) (cadr ie) (##sys#ensure-transformer (caddr ie))) + (list (car ie) (cadr ie) (##sys#ensure-transformer (caddr ie) (car ie))) ie)) iexports)) (nexps (map (lambda (ne) - (list (car ne) #f (##sys#ensure-transformer (cdr ne)))) + (list (car ne) #f (##sys#ensure-transformer (cdr ne) (car ne)))) sdefs)) (mod (make-module name '() vexports sexps)) (senv (merge-se diff --git a/srfi-13.import.scm b/srfi-13.import.scm index b2748d66..562df13c 100644 --- a/srfi-13.import.scm +++ b/srfi-13.import.scm @@ -128,4 +128,5 @@ ,@body) `(,%receive ,s-e-r (,%string-parse-final-start+end ,proc ,s-exp ,args-exp) - ,@body) ) ))))))) + ,@body) ) ))) + 'let-string-start+end))))Trap