1
Fork 0
Commit graph

343 commits

Author SHA1 Message Date
Nicholas Nethercote
33a3206dc5 Use Symbol equality in may_begin_with and parse_nt. 2019-05-27 14:05:05 +10:00
Esteban Küber
5c5fa775e5 review comments 2019-05-24 11:50:21 -07:00
Esteban Küber
24160171e4 Tweak macro parse errors when reaching EOF during macro call parse
- Add detail on origin of current parser when reaching EOF and stop
  saying "found <eof>" and point at the end of macro calls
- Handle empty `cfg_attr` attribute
- Reword empty `derive` attribute error
2019-05-24 11:49:33 -07:00
Vadim Petrochenkov
59a382122f Simplify use of keyword symbols 2019-05-22 19:48:56 +03:00
Mark Mansi
5db665b972 lots of comments + minor cleanup 2019-05-07 18:02:35 -05:00
Vadim Petrochenkov
4b382946e4 syntax: Remove warning for unnecessary path disambiguators 2019-03-23 17:20:11 +03:00
Esteban Küber
c70a516c23 Panic when unmatched delimiters aren't emitted 2019-03-06 18:46:11 -08:00
Nicholas Nethercote
f0d8fbd283 Avoid a clone() in transcribe().
The current code (expensively) clones the value within an `Rc`. This
commit changes things so that the `Rc` itself is (cheaply) cloned
instead, avoid some allocations.

This requires converting a few `Rc` instances to `Lrc`.
2019-02-18 09:46:33 +11:00
Nicholas Nethercote
f8801f3bf6 Remove LazyTokenStream.
It's present within `Token::Interpolated` as an optimization, so that if
a nonterminal is converted to a `TokenStream` multiple times, the
first-computed value is saved and reused.

But in practice it's not needed. `interpolated_to_tokenstream()` is a
cold function: it's only called a few dozen times while compiling rustc
itself, and a few hundred times across the entire `rustc-perf` suite.
Furthermore, when it is called, it is almost always the first
conversion, so no benefit is gained from it.

So this commit removes `LazyTokenStream`, along with the now-unnecessary
`Token::interpolated()`.

As well as a significant simplification, the removal speeds things up
slightly, mostly due to not having to `drop` the `LazyTokenStream`
instances.
2019-02-18 09:46:33 +11:00
Mazdak Farrokhzad
0bc8f6f3f4
Rollup merge of #58273 - taiki-e:rename-dependency, r=matthewjasper
Rename rustc_errors dependency in rust 2018 crates

I think this is a better solution than `use rustc_errors as errors` in `lib.rs` and `use crate::errors` in modules.

Related: rust-lang/cargo#5653

cc #58099

r? @Centril
2019-02-13 04:37:04 +01:00
Taiki Endo
c360ba285c Cleanup imports 2019-02-13 00:31:51 +09:00
Taiki Endo
3216c7656a Rename rustc_errors dependency in rust 2018 crates 2019-02-13 00:28:52 +09:00
Alexander Regueiro
c3e182cf43 rustc: doc comments 2019-02-10 23:42:32 +00:00
Taiki Endo
7bb082d27f libsyntax => 2018 2019-02-07 02:33:01 +09:00
Nicholas Nethercote
46fa818d34 Change String to &'static str in ParseResult::Failure.
This avoids 770,000 allocations when compiling the `html5ever`
benchmark, reducing instruction counts by up to 2%.
2019-01-09 15:16:19 +11:00
Wiktor Kuchta
190d139f3a Fix repeated word typos
Found with `git grep -P '\b([a-z]+)\s+\1\b'`
2019-01-03 21:33:37 +01:00
Mark Rousskov
2a663555dd Remove licenses 2018-12-25 21:08:33 -07:00
Alexander Regueiro
ee89c088b0 Various minor/cosmetic improvements to code 2018-12-07 23:53:34 +00:00
Shotaro Yamada
65aa0a6249 Remove redundant clone 2018-12-04 15:38:40 +09:00
Esteban Küber
e5cd1edfa1 Reword incorrect macro invocation primary label 2018-11-23 15:37:31 -08:00
Esteban Küber
ea9ccb6046 Point at end of macro arm when encountering EOF
Fix #52866
2018-11-23 15:37:31 -08:00
kennytm
5ccc76fe5c
Rollup merge of #55870 - waywardmonkeys:typo-fixes, r=wesleywiser
Fix typos.
2018-11-13 19:20:44 +08:00
Niko Matsakis
68e76dca09 Make MatcherPos::stack a SmallVec.
This avoids some allocations.
2018-11-12 11:37:18 +11:00
Bruce Mitchener
a62af858e0 Fix typos. 2018-11-11 20:52:36 +07:00
bors
af791bb8f4 Auto merge of #55451 - estebank:arg-doc, r=pnkfelix
Custom diagnostic when trying to doc comment argument

When writing

```
pub fn f(
    /// Comment
    id: u8,
) {}
```

Produce a targeted diagnostic

```
error: documentation comments cannot be applied to method arguments
  --> $DIR/fn-arg-doc-comment.rs:2:5
   |
LL |     /// Comment
   |     ^^^^^^^^^^^ doc comments are not allowed here
```

Fix #54801.
2018-11-05 16:36:18 +00:00
Nicholas Nethercote
0d2abe46ca Use SmallVec for the inner vectors in MatcherPos::matches.
This avoids some allocations.
2018-11-01 08:45:26 +11:00
Nicholas Nethercote
c60ed5d22c Share empty Vecs more within MatcherPos::matches.
`create_matches` creates a `Vec<Rc<Vec<NamedMatch>>>`. Even though all the
inner `Vec`s are empty, each one is created separately.

This commit changes `create_matches` so it instead creates one empty inner
`Vec`, and shares it.

The commit also changes `MatcherPos::matches` to a boxed slice, because its
length doesn't change.
2018-11-01 08:43:40 +11:00
Esteban Küber
adb96ec64b Provide specific label for patern parsing error 2018-10-28 14:38:00 -07:00
ljedrz
130a32fa72 Remove OneVector 2018-09-26 10:43:37 +02:00
David Tolnay
57d6ada91d
Rename sp_lo to sp_open 2018-09-08 23:47:42 -07:00
David Tolnay
a1dd39e724
Track distinct spans for open and close delimiter 2018-09-08 19:01:48 -07:00
Eduard-Mihai Burtescu
93f3f5b155 Use FxHash{Map,Set} instead of the default Hash{Map,Set} everywhere in rustc. 2018-08-28 17:04:04 +03:00
Igor Gutorov
4d81fe9243 Use optimized SmallVec implementation 2018-08-23 10:45:53 +03:00
Matthias Krüger
71120ef1e5 Fix typos found by codespell. 2018-08-19 17:41:28 +02:00
ljedrz
e5e6375352 Move SmallVec and ThinVec out of libsyntax 2018-08-13 22:11:57 +02:00
Michael Lamparski
0467ae0cf5 cleanup unnecessary else 2018-07-16 16:15:34 -04:00
Michael Lamparski
191e76c5b8 fix perf issue in macro parser
For a fuller description of the performance issue fixed by this:

https://github.com/rust-lang/rust/issues/51754#issuecomment-403242159
2018-07-07 17:13:21 -04:00
David Tolnay
987020846c
Enable fall through past $:lifetime matcher 2018-06-10 14:39:16 -07:00
Takanori Ishibashi
f386cdae19 innacurate -> inaccurate 2018-05-27 09:47:04 +09:00
Vadim Petrochenkov
1e4269cb83 Add Ident::as_str helper 2018-05-26 15:20:23 +03:00
bors
4c26e2e3fb Auto merge of #50855 - nnethercote:fewer-macro_parser-allocs, r=petrochenkov
Speed up the macro parser

These three commits reduce the number of allocations done by the macro parser, in some cases dramatically. For example, for a clean check builds of html5ever, the number of allocations is reduced by 40%.

Here are the rustc-benchmarks that are sped up by at least 1%.
```
html5ever-check
        avg: -6.6%      min: -10.3%     max: -4.1%
html5ever
        avg: -5.2%      min: -9.5%      max: -2.8%
html5ever-opt
        avg: -4.3%      min: -9.3%      max: -1.6%
crates.io-check
        avg: -1.8%      min: -2.9%      max: -0.6%
crates.io-opt
        avg: -1.0%      min: -2.2%      max: -0.1%
crates.io
        avg: -1.1%      min: -2.2%      max: -0.2%
```
2018-05-20 08:55:50 +00:00
Nicholas Nethercote
fcf2b24e1b Introduce MatcherPosHandle.
This lets us store most `MatcherPos` instances on the stack. This speeds
up various runs of html5ever, the best by 3%.
2018-05-18 22:20:27 +10:00
Nicholas Nethercote
6872377357 Change TokenTreeOrTokenTreeVec to TokenTreeOrTokenTreeSlice.
This avoids a `to_owned` call that can be hot, speeding up the various
runs of html5ever by 1--5%, and some runs of crates.io by 2--3%.
2018-05-17 20:41:38 +10:00
Dan Aloni
37ed2ab910 Macros: Add a 'literal' fragment specifier
Implements RFC 1576.

See: https://github.com/rust-lang/rfcs/blob/master/text/1576-macros-literal-matcher.md

Changes are mostly in libsyntax, docs, and tests. Feature gate is
enabled for 1.27.0.

Many thanks to Vadim Petrochenkov for following through code reviews
and suggestions.

Example:

````rust

macro_rules! test_literal {
    ($l:literal) => {
        println!("literal: {}", $l);
    };
    ($e:expr) => {
        println!("expr: {}", $e);
    };
}

fn main() {
    let a = 1;
    test_literal!(a);
    test_literal!(2);
    test_literal!(-3);
}
```

Output:

```
expr: 1
literal: 2
literal: -3
```
2018-05-13 19:17:02 +03:00
rleungx
390c3cee6a check if the token is a lifetime before parsing 2018-05-03 19:12:39 +08:00
Vadim Petrochenkov
bfaf4180ae Make lifetime nonterminals closer to identifier nonterminals 2018-04-06 11:52:16 +03:00
Vadim Petrochenkov
b3b5ef186c Remove more duplicated spans 2018-04-06 11:50:49 +03:00
Vadim Petrochenkov
e2afefd80b Get rid of SpannedIdent 2018-04-06 11:48:19 +03:00
Lymia Aluysia
5c3d6320de
Return a is_raw parameter from Token::ident rather than having separate methods. 2018-03-18 12:16:02 -05:00
Lymia Aluysia
fad1648e0f
Initial implementation of RFC 2151, Raw Identifiers 2018-03-18 10:07:19 -05:00