From 350ecf3d494ec963cd5575e19b95abb03db55915 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 10 Nov 2018 07:13:04 -0700 Subject: [PATCH] expander: don't duplicate properties in 'origin handling One more take on the problem addressed by 990e1f1e30. This adjustment avoids copying properties from the original form to the identifier that is preserved in 'origin. --- pkgs/racket-test-core/tests/racket/stx.rktl | 12 ++++++++---- racket/src/expander/expand/main.rkt | 7 +++---- racket/src/racket/src/startup.inc | 4 +--- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/stx.rktl b/pkgs/racket-test-core/tests/racket/stx.rktl index 71337dbf74..00904451a1 100644 --- a/pkgs/racket-test-core/tests/racket/stx.rktl +++ b/pkgs/racket-test-core/tests/racket/stx.rktl @@ -424,13 +424,16 @@ [else #f])))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Check that 'origin has the right source location +;; Check that 'origin has the right source location, +;; and that it doesn't have excessive properties (let () - (define m #'(module m racket/base + (define m #`(module m racket/base (require (for-syntax racket/base)) (let () - (define-values (x y) (values 1 2)) + #,(syntax-property #`(define-values (x y) (values 1 2)) + 'on-form + 'dv) x))) (define e (expand m)) (define dv-src @@ -463,7 +466,8 @@ list (syntax-line dv-origin) (syntax-column dv-origin) - (syntax-span dv-origin))) + (syntax-span dv-origin)) + (test #f syntax-property dv-origin 'on-form)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Check property tracking on `let[rec]-values` binding clauses diff --git a/racket/src/expander/expand/main.rkt b/racket/src/expander/expand/main.rkt index 9c344b1662..a6747a7e8b 100644 --- a/racket/src/expander/expand/main.rkt +++ b/racket/src/expander/expand/main.rkt @@ -720,10 +720,9 @@ [(expand-context-to-parsed? ctx) (and (or keep-for-parsed? keep-for-error?) (datum->syntax #f keep-e s s))] [(and for-track? (pair? d) keep-e) - ;; Use properties of `s`, but binding and source location of identifier - (define id (car d)) - (syntax-rearm (datum->syntax (syntax-disarm id) keep-e id s) - id)] + ;; Synthesize form to preserve just source and properties for tracking + ;; without affecting the identifier that is kept in 'origin + (datum->syntax #f (list (car d)) s s)] [else (syntax-rearm (datum->syntax (syntax-disarm s) keep-e s s) s)])) diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index 1eb7d8b333..f71b18c97b 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -40594,9 +40594,7 @@ static const char *startup_source = "(datum->syntax$1 #f keep-e_0 s_0 s_0)" " #f))" "(if(if for-track?_0(if(pair? d_0) keep-e_0 #f) #f)" -"(let-values()" -"(let-values(((id_0)(car d_0)))" -"(syntax-rearm$1(datum->syntax$1(syntax-disarm$1 id_0) keep-e_0 id_0 s_0) id_0)))" +"(let-values()(datum->syntax$1 #f(list(car d_0)) s_0 s_0))" "(let-values()" "(syntax-rearm$1(datum->syntax$1(syntax-disarm$1 s_0) keep-e_0 s_0 s_0) s_0)))))))))))))))" "(define-values"