From cfcaaa3a1bb97d09e3457623a53cf6b5162d1957 Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Sat, 25 Feb 2017 17:04:28 +0100 Subject: [PATCH 3/5] 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. --- 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