-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Syntactic context discarded when quoting a macro invocation #16617
Labels
A-syntaxext
Area: Syntax extensions
Comments
kmcallister
added a commit
to servo/html5ever
that referenced
this issue
Aug 19, 2014
cc moi |
I encountered this bug in a project of mine. The code that triggered it was something like I worked around it by factoring out the |
goffrie
added a commit
to goffrie/rust
that referenced
this issue
Mar 5, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. Two new `Nonterminal`s are added: NtArm and NtMethod, which the parser now interpolates. These are just for quasiquote. They aren't used by macros (although they could be in the future). `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes rust-lang#16987. As such, this is a [breaking-change]. Fixes rust-lang#16472. Fixes rust-lang#15962. Fixes rust-lang#17397. Fixes rust-lang#16617.
goffrie
added a commit
to goffrie/rust
that referenced
this issue
Mar 10, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. Two new `Nonterminal`s are added: NtArm and NtMethod, which the parser now interpolates. These are just for quasiquote. They aren't used by macros (although they could be in the future). `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes rust-lang#16987. As such, this is a [breaking-change]. Fixes rust-lang#16472. Fixes rust-lang#15962. Fixes rust-lang#17397. Fixes rust-lang#16617.
goffrie
added a commit
to goffrie/rust
that referenced
this issue
Mar 13, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. Two new `Nonterminal`s are added: NtArm and NtMethod, which the parser now interpolates. These are just for quasiquote. They aren't used by macros (although they could be in the future). `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes rust-lang#16987. As such, this is a [breaking-change]. Fixes rust-lang#16472. Fixes rust-lang#15962. Fixes rust-lang#17397. Fixes rust-lang#16617.
goffrie
added a commit
to goffrie/rust
that referenced
this issue
Mar 16, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. A new `Nonterminal` is added, NtArm, which the parser now interpolates. This is just for quasiquote, not macros (although it could be in the future). `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes rust-lang#16987. As such, this is a [breaking-change]. Fixes rust-lang#16472. Fixes rust-lang#15962. Fixes rust-lang#17397. Fixes rust-lang#16617.
goffrie
added a commit
to goffrie/rust
that referenced
this issue
Apr 9, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. A new `Nonterminal` is added, NtArm, which the parser now interpolates. This is just for quasiquote, not macros (although it could be in the future). `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes rust-lang#16987. As such, this is a [breaking-change]. Fixes rust-lang#16472. Fixes rust-lang#15962. Fixes rust-lang#17397. Fixes rust-lang#16617.
goffrie
added a commit
to goffrie/rust
that referenced
this issue
Apr 19, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. A new `Nonterminal` is added, NtArm, which the parser now interpolates. This is just for quasiquote, not macros (although it could be in the future). `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes rust-lang#16987. As such, this is a [breaking-change]. Fixes rust-lang#16472. Fixes rust-lang#15962. Fixes rust-lang#17397. Fixes rust-lang#16617.
goffrie
added a commit
to goffrie/rust
that referenced
this issue
Apr 23, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. A new `Nonterminal` is added, NtArm, which the parser now interpolates. This is just for quasiquote, not macros (although it could be in the future). `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes rust-lang#16987. As such, this is a [breaking-change]. Fixes rust-lang#16472. Fixes rust-lang#15962. Fixes rust-lang#17397. Fixes rust-lang#16617.
goffrie
added a commit
to goffrie/rust
that referenced
this issue
Apr 23, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. A new `Nonterminal` is added, NtArm, which the parser now interpolates. This is just for quasiquote, not macros (although it could be in the future). `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes rust-lang#16987. As such, this is a [breaking-change]. Fixes rust-lang#16472. Fixes rust-lang#15962. Fixes rust-lang#17397. Fixes rust-lang#16617.
goffrie
added a commit
to goffrie/rust
that referenced
this issue
Apr 24, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. A new `Nonterminal` is added, NtArm, which the parser now interpolates. This is just for quasiquote, not macros (although it could be in the future). `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes rust-lang#16987. As such, this is a [breaking-change]. Fixes rust-lang#16472. Fixes rust-lang#15962. Fixes rust-lang#17397. Fixes rust-lang#16617.
goffrie
added a commit
to goffrie/rust
that referenced
this issue
Apr 26, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. A new `Nonterminal` is added, NtArm, which the parser now interpolates. This is just for quasiquote, not macros (although it could be in the future). `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes rust-lang#16987. As such, this is a [breaking-change]. Fixes rust-lang#16472. Fixes rust-lang#15962. Fixes rust-lang#17397. Fixes rust-lang#16617.
bors
added a commit
that referenced
this issue
Apr 26, 2015
This changes the `ToTokens` implementations for expressions, statements, etc. with almost-trivial ones that produce `Interpolated(*Nt(...))` pseudo-tokens. In this way, quasiquote now works the same way as macros do: already-parsed AST fragments are used as-is, not reparsed. The `ToSource` trait is removed. Quasiquote no longer involves pretty-printing at all, which removes the need for the `encode_with_hygiene` hack. All associated machinery is removed. New `Nonterminal`s are added: NtArm, NtImplItem, and NtTraitItem. These are just for quasiquote, not macros. `ToTokens` is no longer implemented for `Arg` (although this could be added again) and `Generics` (which I don't think makes sense). This breaks any compiler extensions that relied on the ability of `ToTokens` to turn AST fragments back into inspectable token trees. For this reason, this closes #16987. As such, this is a [breaking-change]. Fixes #16472. Fixes #15962. Fixes #17397. Fixes #16617.
bors
added a commit
to rust-lang-ci/rust
that referenced
this issue
Feb 25, 2024
internal: Attempt to add a timeout to rustc-tests Looks like some new test is stuck, this might help with figuring that out, though it unfortunately won't if its a chalk hang (which is the most likely)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
#15750 is fixed now, but a variant of the same issue occurs when quoting a macro invocation.
Using
plugin.rs
from #15750 and thistest.rs
:I get this result:
Also the NULL characters used to delimit the magic identifier string appear in the error output, which causes the error caret to appear in the wrong place.
See also #15962.
CC @pnkfelix. This is still a huge improvement from before and I think I can work around the remaining issues in
html5ever
. Thank you for fixing #15750 :)The text was updated successfully, but these errors were encountered: