Fix GH issue #271
Propagate syntax properties when opening up begins at the top-level so that ignore properties will get transferred.
This commit is contained in:
parent
beb517c9c8
commit
b18d940f1a
|
@ -66,22 +66,23 @@
|
|||
(local-expand/capture* #'e 'top-level (kernel-form-identifier-list))))
|
||||
(syntax-parse head-expanded
|
||||
#:literal-sets (kernel-literals)
|
||||
[(begin (define-values (n) _) ...
|
||||
(~and (~or _:ignore^ _:ignore-some^)
|
||||
(~not (~or _:tr:class^
|
||||
_:tr:unit^
|
||||
_:tr:unit:invoke^
|
||||
_:tr:unit:compound^
|
||||
_:tr:unit:from-context^))))
|
||||
head-expanded]
|
||||
;; keep trampolining on begins
|
||||
[(begin (define-values (n) e-rhs) ... (begin e ... e-last))
|
||||
#`(begin (tc-toplevel-trampoline orig-stx (define-values (n) e-rhs))
|
||||
...
|
||||
(tc-toplevel-trampoline orig-stx e) ...
|
||||
#,(if report?
|
||||
#'(tc-toplevel-trampoline/report orig-stx e-last)
|
||||
#'(tc-toplevel-trampoline orig-stx e-last)))]
|
||||
;; keep trampolining on begins, transfer syntax properties so that ignore
|
||||
;; properties are retained in the begin subforms
|
||||
[(begin (define-values (n) e-rhs) ...
|
||||
(~and the-begin (begin e ... e-last)))
|
||||
(define e*s
|
||||
(for/list ([e (in-list (syntax->list #'(e ...)))])
|
||||
(syntax-track-origin e #'the-begin #'begin)))
|
||||
(define e-last*
|
||||
(syntax-track-origin #'e-last #'the-begin #'begin))
|
||||
(with-syntax ([(e ...) e*s]
|
||||
[e-last e-last*])
|
||||
#`(begin (tc-toplevel-trampoline orig-stx (define-values (n) e-rhs))
|
||||
...
|
||||
(tc-toplevel-trampoline orig-stx e) ...
|
||||
#,(if report?
|
||||
#'(tc-toplevel-trampoline/report orig-stx e-last)
|
||||
#'(tc-toplevel-trampoline orig-stx e-last))))]
|
||||
[_
|
||||
(define fully-expanded
|
||||
;; a non-begin form can still cause lifts, so still have to catch them
|
||||
|
|
13
typed-racket-test/fail/gh-issue-271.rkt
Normal file
13
typed-racket-test/fail/gh-issue-271.rkt
Normal file
|
@ -0,0 +1,13 @@
|
|||
#;
|
||||
(exn-pred #rx"could not be converted")
|
||||
#lang racket/load
|
||||
|
||||
;; Tests that p? cannot be generated
|
||||
|
||||
(require typed/racket)
|
||||
|
||||
(define-predicate p? (All (A) (Listof A)))
|
||||
|
||||
(let ()
|
||||
(: x (U (Listof Integer) Integer)) (define x '(1 2 3))
|
||||
(if (p? x) 0 (add1 x)))
|
Loading…
Reference in New Issue
Block a user