Merge remote-tracking branch 'origin/stable-2.0'
authorAndy Wingo <wingo@pobox.com>
Thu, 31 Jan 2013 10:52:42 +0000 (11:52 +0100)
committerAndy Wingo <wingo@pobox.com>
Thu, 31 Jan 2013 10:52:42 +0000 (11:52 +0100)
Conflicts:
module/ice-9/psyntax-pp.scm
module/ice-9/psyntax.scm
module/language/bytecode/spec.scm
module/language/tree-il/spec.scm

13 files changed:
1  2 
.gitignore
configure.ac
doc/ref/compiler.texi
libguile/memoize.c
module/ice-9/psyntax-pp.scm
module/ice-9/psyntax.scm
module/language/bytecode/spec.scm
module/language/objcode/spec.scm
module/language/tree-il/analyze.scm
module/language/tree-il/spec.scm
module/oop/goops.scm
test-suite/tests/ecmascript.test
test-suite/tests/tree-il.test

diff --cc .gitignore
Simple merge
diff --cc configure.ac
Simple merge
Simple merge
Simple merge
                                         (cons var vars)
                                         (cons (cons er (wrap e w mod)) vals)
                                         (cons (cons 'lexical var) bindings)))))
--                           ((memv key '(define-syntax-form define-syntax-parameter-form))
-                             (let ((id (wrap value w mod)) (label (gen-label)))
++                           ((memv key '(define-syntax-form))
+                             (let ((id (wrap value w mod))
+                                   (label (gen-label))
+                                   (trans-r (macros-only-env er)))
                                (extend-ribcage! ribcage id label)
-                               (parse (cdr body)
-                                      (cons id ids)
-                                      (cons label labels)
-                                      var-ids
-                                      vars
-                                      vals
-                                      (cons (cons (if (eq? type 'define-syntax-parameter-form)
-                                                    'syntax-parameter
-                                                    'macro)
-                                                  (cons er (wrap e w mod)))
-                                            bindings))))
+                               (set-cdr!
+                                 r
+                                 (extend-env
+                                   (list label)
+                                   (list (cons 'macro (eval-local-transformer (expand e trans-r w mod) mod)))
+                                   (cdr r)))
+                               (parse (cdr body) (cons id ids) labels var-ids vars vals bindings)))
++                           ((memv key '(define-syntax-parameter-form))
++                            (let ((id (wrap value w mod))
++                                  (label (gen-label))
++                                  (trans-r (macros-only-env er)))
++                              (extend-ribcage! ribcage id label)
++                              (set-cdr!
++                                r
++                                (extend-env
++                                  (list label)
++                                  (list (cons 'syntax-parameter
++                                              (list (eval-local-transformer (expand e trans-r w mod) mod))))
++                                  (cdr r)))
++                              (parse (cdr body) (cons id ids) labels var-ids vars vals bindings)))
                             ((memv key '(begin-form))
                              (let* ((tmp-1 e) (tmp ($sc-dispatch tmp-1 '(_ . each-any))))
                                (if tmp
                                      (cons id var-ids)
                                      (cons var vars) (cons (cons er (wrap e w mod)) vals)
                                      (cons (make-binding 'lexical var) bindings)))))
--                        ((define-syntax-form define-syntax-parameter-form)
-                          (let ((id (wrap value w mod)) (label (gen-label)))
++                        ((define-syntax-form)
+                          (let ((id (wrap value w mod))
+                                (label (gen-label))
+                                (trans-r (macros-only-env er)))
+                            (extend-ribcage! ribcage id label)
+                            ;; As required by R6RS, evaluate the right-hand-sides of internal
+                            ;; syntax definition forms and add their transformers to the
+                            ;; compile-time environment immediately, so that the newly-defined
+                            ;; keywords may be used in definition context within the same
+                            ;; lexical contour.
 -                           (set-cdr! r (extend-env (list label)
 -                                                   (list (make-binding 'macro
 -                                                                       (eval-local-transformer
 -                                                                        (expand e trans-r w mod)
 -                                                                        mod)))
 -                                                   (cdr r)))
++                           (set-cdr! r (extend-env
++                                        (list label)
++                                        (list (make-binding
++                                               'macro
++                                               (eval-local-transformer
++                                                (expand e trans-r w mod)
++                                                mod)))
++                                        (cdr r)))
++                           (parse (cdr body) (cons id ids) labels var-ids vars vals bindings)))
++                        ((define-syntax-parameter-form)
++                         ;; Same as define-syntax-form, but different format of the binding.
++                         (let ((id (wrap value w mod))
++                               (label (gen-label))
++                               (trans-r (macros-only-env er)))
 +                           (extend-ribcage! ribcage id label)
-                            (parse (cdr body)
-                                   (cons id ids) (cons label labels)
-                                   var-ids vars vals
-                                   (cons (make-binding
-                                          (if (eq? type 'define-syntax-parameter-form)
-                                              'syntax-parameter
-                                              'macro)
-                                          (cons er (wrap e w mod)))
-                                         bindings))))
++                           (set-cdr! r (extend-env
++                                        (list label)
++                                        (list (make-binding
++                                               'syntax-parameter
++                                               (list (eval-local-transformer
++                                                      (expand e trans-r w mod)
++                                                      mod))))
++                                        (cdr r)))
+                            (parse (cdr body) (cons id ids) labels var-ids vars vals bindings)))
                          ((begin-form)
                           (syntax-case e ()
                             ((_ e1 ...)
@@@ -1,6 -1,6 +1,6 @@@
  ;;; Guile Lowlevel Intermediate Language
  
- ;; Copyright (C) 2001, 2009, 2010, 2012 Free Software Foundation, Inc.
 -;; Copyright (C) 2001, 2009, 2010, 2013 Free Software Foundation, Inc.
++;; Copyright (C) 2001, 2009, 2010, 2012, 2013 Free Software Foundation, Inc.
  
  ;;;; This library is free software; you can redistribute it and/or
  ;;;; modify it under the terms of the GNU Lesser General Public
Simple merge
Simple merge
@@@ -1,6 -1,6 +1,6 @@@
  ;;; Tree Intermediate Language
  
- ;; Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
 -;; Copyright (C) 2009, 2010, 2013 Free Software Foundation, Inc.
++;; Copyright (C) 2009, 2010, 2011, 2013 Free Software Foundation, Inc.
  
  ;;;; This library is free software; you can redistribute it and/or
  ;;;; modify it under the terms of the GNU Lesser General Public
Simple merge
Simple merge
Simple merge