From a97d7cbf658e595e172133c716d16532ee26242e Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Sat, 25 Feb 2017 17:04:28 +0100 Subject: [PATCH 3/3] 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. This is the final fix to complete #1309 (though the actual cause is that the r7rs library needs to be refactored) --- expand.scm | 20 +++++++++++++------- tests/syntax-tests.scm | 3 +++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/expand.scm b/expand.scm index 9e194b9..9ee0140 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 4f07a3c..1da12c3 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) -- 2.1.4