~ 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