From d5d8249c12135fcefc6891065cde8d32c9bc7898 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 7 Mar 2018 17:58:58 -0700 Subject: [PATCH] reader: fix "original?" property on `#lang`-derived module name --- pkgs/racket-test-core/tests/racket/stx.rktl | 8 ++++++++ racket/src/expander/read/extension.rkt | 2 +- racket/src/expander/syntax/read-syntax.rkt | 8 +++++++- racket/src/racket/src/startup.inc | 10 +++++++++- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/stx.rktl b/pkgs/racket-test-core/tests/racket/stx.rktl index 088f2f50a4..2e5f327b0a 100644 --- a/pkgs/racket-test-core/tests/racket/stx.rktl +++ b/pkgs/racket-test-core/tests/racket/stx.rktl @@ -400,6 +400,14 @@ (syntax-case stx () [(_ () (_ () e)) (car (syntax-property #'e 'origin))]))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Make sure a language name via `#lang` is original + +(parameterize ([read-accept-reader #t]) + (syntax-case (read-syntax 'hi (open-input-string "#lang racket/base 10")) () + [(_ _ lang . _) + (test #t syntax-original? #'lang)])) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; #%app, etc. diff --git a/racket/src/expander/read/extension.rkt b/racket/src/expander/read/extension.rkt index dc99f4f69b..67a358aa8b 100644 --- a/racket/src/expander/read/extension.rkt +++ b/racket/src/expander/read/extension.rkt @@ -121,7 +121,7 @@ (define submod-path `(submod ,(string->symbol lang-str) reader)) (define reader-path (string->symbol (string-append lang-str "/lang/reader"))) - + (read-extension #:try-first-mod-path submod-path reader-path read-recur in (reading-at config line col pos) #:get-info? get-info? diff --git a/racket/src/expander/syntax/read-syntax.rkt b/racket/src/expander/syntax/read-syntax.rkt index 8889e80e9e..2e7165094a 100644 --- a/racket/src/expander/syntax/read-syntax.rkt +++ b/racket/src/expander/syntax/read-syntax.rkt @@ -117,8 +117,14 @@ (cond [(syntax? v) (syntax->datum v)] [else v])] + [(syntax? v) v] + [(pair? v) + (read-to-syntax (cons (read-coerce #t (car v) srcloc) + (read-coerce #t (cdr v) srcloc)) + srcloc + #f)] [else - (datum->syntax #f v (and srcloc (to-srcloc-stx srcloc)))])) + (read-to-syntax v srcloc #f)])) (define (read-coerce-key for-syntax? k) (cond diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index 0eb3968853..230e5a9fc8 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -56648,7 +56648,15 @@ static const char *startup_source = "(begin" "(if(not for-syntax?_12)" "(let-values()(if(syntax?$1 v_246)(let-values()(syntax->datum$1 v_246))(let-values() v_246)))" -"(let-values()(datum->syntax$1 #f v_246(if srcloc_12(to-srcloc-stx srcloc_12) #f)))))))" +"(if(syntax?$1 v_246)" +"(let-values() v_246)" +"(if(pair? v_246)" +"(let-values()" +"(read-to-syntax" +"(cons(read-coerce #t(car v_246) srcloc_12)(read-coerce #t(cdr v_246) srcloc_12))" +" srcloc_12" +" #f))" +"(let-values()(read-to-syntax v_246 srcloc_12 #f))))))))" "(define-values" "(read-coerce-key)" "(lambda(for-syntax?_13 k_42)"