Piotr Czarnecki
346717686b
Make the macro parser theory description more accurate
2017-07-24 13:57:08 +02:00
kennytm
600800480a
Only match a fragment specifier the if it starts with certain tokens.
...
Fixes #24189 .
Fixes #26444 .
Fixes #27832 .
Fixes #34030 .
Fixes #35650 .
Fixes #39964 .
Fixes the 4th comment in #40569 .
Fixes the issue blocking #40984 .
2017-07-07 14:12:12 +08:00
Jeffrey Seyfried
d4488b7df9
Simplify hygiene::Mark
application, and
...
remove variant `Token::SubstNt` in favor of `quoted::TokenTree::MetaVar`.
2017-06-26 02:05:45 +00:00
Mark Simulacrum
3d9ebf2916
Speed up expansion.
...
This reduces duplication, thereby increasing expansion speed.
2017-06-08 08:53:31 -06:00
Nick Cameron
a2566301e1
Add an option to the parser to avoid parsing out of line modules
...
This is useful if parsing from stdin or a String and don't want to try and read in a module from another file. Instead we just leave a stub in the AST.
2017-05-18 11:03:07 +12:00
Mark Simulacrum
4066c8ec71
Rollup merge of #41957 - llogiq:clippy-libsyntax, r=petrochenkov
...
Fix some clippy warnings in libsyntax
This is mostly removing stray ampersands, needless returns and lifetimes. Basically a lot of small changes.
2017-05-16 17:31:50 -06:00
Andre Bogus
958c67d9c8
adressed comments by @kennytm and @petrochenkov
2017-05-15 23:56:09 +02:00
Jeffrey Seyfried
9f4e1e10a4
Fix regression in macro_rules!
name matching.
2017-05-15 09:26:26 +00:00
Andre Bogus
a9c163ebe9
Fix some clippy warnings in libsyntax
...
This is mostly removing stray ampersands, needless returns and lifetimes.
2017-05-12 20:05:39 +02:00
Daniel Keep
a2489495d9
Implementation of the vis
macro matcher.
2017-04-15 19:06:19 +00:00
Jeffrey Seyfried
8fde04b4a2
Improve Path
spans.
2017-03-30 05:44:56 +00:00
Jeffrey Seyfried
f08d5ad4c5
Refactor how spans are combined in the parser.
2017-03-29 11:17:59 +00:00
Vadim Petrochenkov
b5e889791a
Refactor parsing of trait object types
2017-03-21 23:01:53 +03:00
Jeffrey Seyfried
460bf55f8a
Cleanup.
2017-03-14 03:35:16 +00:00
Jeffrey Seyfried
f6eaaf350e
Integrate TokenStream
.
2017-03-03 02:15:37 +00:00
Jeffrey Seyfried
61a9a14d29
Add warning cycle.
2017-02-28 22:15:12 +00:00
Jeffrey Seyfried
0cc7053efa
Remove Token::MatchNt
.
2017-02-28 22:15:09 +00:00
Jeffrey Seyfried
d8b34e9a74
Add syntax::ext::tt::quoted::{TokenTree, ..}
and remove tokenstream::TokenTree::Sequence
.
2017-02-28 22:14:29 +00:00
Alex Crichton
17294d98b9
Rollup merge of #39118 - jseyfried:token_tree_based_parser, r=nrc
...
Refactor the parser to consume token trees
This is groundwork for efficiently parsing attribute proc macro invocations, bang macro invocations, and `TokenStream`-based attributes and fragment matchers.
This improves parsing performance by 8-15% and expansion performance by 0-5% on a sampling of the compiler's crates.
r? @nrc
2017-01-20 08:35:47 -08:00
Jeffrey Seyfried
57c0ed097c
Avoid interpolated token trees.
2017-01-17 08:17:28 +00:00
Jeffrey Seyfried
debcbf0b8e
Refactor the parser to consume token trees.
2017-01-17 08:17:26 +00:00
Vadim Petrochenkov
869b81646d
syntax: Rename parse_ty -> parse_ty_no_plus, parse_ty_sum -> parse_ty
2017-01-17 02:13:41 +03:00
Jeffrey Seyfried
fd98a8d795
macros: fix the expected paths for a non-inline module matched by an item
fragment.
2016-12-07 10:56:55 +00:00
Mark-Simulacrum
2189f573ca
Remove extra level of nesting.
2016-11-12 07:41:47 -07:00
Mark-Simulacrum
38912ee3d4
Move next_eis out of main loop to avoid re-allocating and dropping it.
2016-11-12 07:41:26 -07:00
Mark-Simulacrum
6046595e34
Use SmallVector for eof and bb eis.
2016-11-12 06:45:06 -07:00
Mark-Simulacrum
b8d6686ef3
Factor out inner current Earley item loop.
...
Change multiple functions to be non-public.
Change nameize to accept an iterator so as to avoid an allocation.
2016-11-12 06:42:40 -07:00
Mark-Simulacrum
27c09864bd
Refactor parse_nt.
2016-11-12 06:42:40 -07:00
Mark-Simulacrum
68abb24e8d
Factor out NamedParseResult.
2016-11-12 06:42:40 -07:00
Mark-Simulacrum
eef10d0b5b
Clean up extraneous &mut.
2016-11-12 06:42:40 -07:00
Mark-Simulacrum
c9e6089d29
Refactor to extending from a drain instead of while looping.
2016-11-12 06:42:40 -07:00
Mark-Simulacrum
7221b07a07
Remove unused argument from nameize.
...
Also makes nameize non-public since it's only locally used.
2016-11-12 06:42:40 -07:00
Mark-Simulacrum
568874bc10
Cleanup macro_parser::parse, removing a few clones.
2016-11-12 06:42:40 -07:00
Jeffrey Seyfried
23ad6fdb66
Improve tt
-heavy expansion performance.
2016-11-04 02:38:54 +00:00
Jeffrey Seyfried
7ae083383d
Move doc comment desugaring into the parser.
2016-11-03 23:48:24 +00:00
Jeffrey Seyfried
e2b3fec778
Avoid recontructing the Parser
in macro_parser.rs
.
2016-11-03 23:48:24 +00:00
Jeffrey Seyfried
eb3ac29a10
Reduce the size of Token
and make it cheaper to clone by refactoring
...
`Token::Interpolated(Nonterminal)` -> `Token::Interpolated(Rc<Nonterminal>)`.
2016-11-03 23:48:24 +00:00
Jeffrey Seyfried
cbd24757eb
Move CrateConfig
from Crate
to ParseSess
.
2016-10-29 07:52:58 +00:00
Nicholas Nethercote
c440a7ae65
Don't use Rc
in TokenTreeOrTokenTreeVec
.
...
This avoids 800,000 allocations when compiling html5ever.
2016-10-25 12:20:14 +11:00
Nicholas Nethercote
0a16a11c39
Use SmallVector
for the stack in macro_parser::parse
.
...
This avoids 800,000 heap allocations when compiling html5ever.
2016-10-25 11:48:20 +11:00
Nicholas Nethercote
b817cf8b57
Replace the String
in ParseResult::Failure
with Token
.
...
This lets us delay creation of failure messages until they are needed,
which avoids ~1.6M allocations in html5ever.
2016-10-21 20:27:15 +11:00
Nicholas Nethercote
a935481ae9
Avoid an unnecessary clone in macro_parser::parse
.
...
This avoids ~800,000 allocations in html5ever.
2016-10-21 12:58:06 +11:00
Eduard-Mihai Burtescu
094eaf0250
Rollup merge of #37208 - jseyfried:fix_partially_consumed_tokens_in_macros, r=nrc
...
macros: fix partially consumed tokens in macro matchers
Fixes #37175 .
This PR also avoids re-transcribing the tokens consumed by a matcher (and cloning the `TtReader` once per matcher), which improves expansion performance of the test case from #34630 by ~8%.
r? @nrc
2016-10-19 08:00:01 +03:00
Jeffrey Seyfried
9578e1a251
Fix partially consumed tokens in macro matchers.
2016-10-17 23:00:52 +00:00
Nicholas Nethercote
029dceedb9
Avoid many CrateConfig clones.
...
This commit changes `ExtCtx::cfg()` so it returns a `CrateConfig`
reference instead of a clone. As a result, it also changes all of the
`cfg()` callsites to explicitly clone... except one, because the commit
also changes `macro_parser::parse()` to take `&CrateConfig`. This is
good, because that function can be hot, and `CrateConfig` is expensive
to clone.
This change almost halves the number of heap allocations done by rustc
for `html5ever` in rustc-benchmarks suite, which makes compilation 1.20x
faster.
2016-10-14 16:38:12 +11:00
Vadim Petrochenkov
e05e74ac83
Replace _, _
with ..
2016-09-04 12:30:33 +03:00
Jeffrey Seyfried
f9f99c5a9c
Make metavariables hygienic.
2016-08-07 06:01:01 +00:00
Jeffrey Seyfried
82a15a6a0a
Rollup merge of #34385 - cgswords:tstream, r=nrc
...
syntax-[breaking-change] cc #31645
(Only breaking because ast::TokenTree is now tokenstream::TokenTree.)
This pull request refactors TokenTrees into their own file as src/libsyntax/tokenstream.rs, moving them out of src/libsyntax/ast.rs, in order to prepare for an accompanying TokenStream implementation (per RFC 1566).
2016-06-26 02:11:59 +00:00
Jonathan Turner
6ae3502134
Move errors from libsyntax to its own crate
2016-06-23 08:07:35 -04:00
cgswords
d59accfb06
Refactored tokentrees into their own files in preparation for tokenstreams. Modified tests to point to the new file now.
2016-06-21 11:12:36 -07:00