~ chicken-core (chicken-5) d345e514c10956a7e95267dfd027725f89394122
commit d345e514c10956a7e95267dfd027725f89394122
Author: Peter Bex <peter@more-magic.net>
AuthorDate: Sat Feb 25 17:04:28 2017 +0100
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Wed Mar 22 11:15:54 2017 +0100
Export internal define-like definitions from chicken.syntax
Without this, the compiler would "inline" these aggressively as
unspecified, because they're not assigned to from within the
module itself.
Signed-off-by: felix <felix@call-with-current-continuation.org>
diff --git a/expand.scm b/expand.scm
index 9e194b96..9ee0140b 100644
--- a/expand.scm
+++ b/expand.scm
@@ -42,7 +42,13 @@
strip-syntax
syntax-error
er-macro-transformer
- ir-macro-transformer)
+ ir-macro-transformer
+
+ ;; These must be exported or the compiler will assume they're never
+ ;; assigned to.
+ define-definition
+ define-syntax-definition
+ define-values-definition)
(import scheme chicken
chicken.keyword)
@@ -471,9 +477,9 @@
;
; This code is disgustingly complex.
-(define chicken.expand#define-definition)
-(define chicken.expand#define-syntax-definition)
-(define chicken.expand#define-values-definition)
+(define define-definition)
+(define define-syntax-definition)
+(define define-values-definition)
(define ##sys#canonicalize-body
(lambda (body #!optional (se (##sys#current-environment)) cs?)
@@ -481,9 +487,9 @@
(let ((f (lookup id se)))
(or (eq? s f)
(case s
- ((define) (if f (eq? f chicken.expand#define-definition) (eq? s id)))
- ((define-syntax) (if f (eq? f chicken.expand#define-syntax-definition) (eq? s id)))
- ((define-values) (if f (eq? f chicken.expand#define-values-definition) (eq? s id)))
+ ((define) (if f (eq? f define-definition) (eq? s id)))
+ ((define-syntax) (if f (eq? f define-syntax-definition) (eq? s id)))
+ ((define-values) (if f (eq? f define-values-definition) (eq? s id)))
(else (eq? s id))))))
(define (fini vars vals mvars body)
(if (and (null? vars) (null? mvars))
diff --git a/tests/syntax-tests.scm b/tests/syntax-tests.scm
index 4f07a3c6..1da12c34 100644
--- a/tests/syntax-tests.scm
+++ b/tests/syntax-tests.scm
@@ -790,6 +790,9 @@
;; Some tests for nested but valid definition expressions:
(t 2 (eval '(begin (define x 1) 2)))
(t 2 (eval '(module _ () (import scheme) (define x 1) 2)))
+(t 1 (eval '(let ()
+ (define-record-type foo (make-foo bar) foo? (bar foo-bar))
+ (foo-bar (make-foo 1)))))
;;; renaming of keyword argument (#277)
Trap