Commit Graph

1820 Commits

Author SHA1 Message Date
Jeffrey Seyfried 36c8f6b0d3 Cleanup InternedString. 2016-11-21 09:00:56 +00:00
Jeffrey Seyfried e85a0d70b8 Use Symbol instead of InternedString in the AST, HIR, and various other places. 2016-11-21 09:00:55 +00:00
Jeffrey Seyfried d2f8fb0a0a Move syntax::util::interner -> syntax::symbol, cleanup. 2016-11-20 23:40:20 +00:00
Jeffrey Seyfried 3ea2bc4e93 Refactor away ast::Attribute_. 2016-11-20 11:46:00 +00:00
bors 8289a8916f Auto merge of #37278 - matklad:lone-lifetime, r=jseyfried
Fix syntax error in the compiler

Currently `rustc` accepts the following code: `fn f<'a>() where 'a {}`. This should be a syntax error, shouldn't it?

Not sure if my changes actually compile, waiting for the LLVM to build.
2016-11-14 02:46:12 -08:00
Aleksey Kladov cf9ff2b59b Fix where clauses parsing
Don't allow lifetimes without any bounds at all
2016-11-14 10:23:20 +03:00
bors 876b761010 Auto merge of #37753 - est31:master, r=petrochenkov
Fix empty lifetime list or one with trailing comma being rejected

Fixes #37733
2016-11-13 09:53:30 -08:00
est31 34f33ec789 Fix empty lifetime list or one with trailing comma being rejected
Fixes #37733
2016-11-13 17:55:17 +01:00
Eduard Burtescu 49772fbf5d syntax: don't fake a block around closures' bodies during parsing. 2016-11-10 01:44:45 +02: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 6e9bf12c6f Reimplement "macros: Improve tt fragments" with better performance. 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 5f280a5c60 Clean up parser.parse_token_tree(). 2016-11-03 23:48:24 +00:00
iirelu e593c3b893 Changed most vec! invocations to use square braces
Most of the Rust community agrees that the vec! macro is clearer when
called using square brackets [] instead of regular brackets (). Most of
these ocurrences are from before macros allowed using different types of
brackets.

There is one left unchanged in a pretty-print test, as the pretty
printer still wants it to have regular brackets.
2016-10-31 22:51:40 +00:00
Jeffrey Seyfried cbd24757eb Move CrateConfig from Crate to ParseSess. 2016-10-29 07:52:58 +00:00
bors f0ab4a4f2a Auto merge of #37367 - jseyfried:import_crate_root, r=nrc
Support `use *;` and `use ::*;`.

Fixes #31484.
r? @nrc
2016-10-28 13:42:23 -07:00
Guillaume Gomez f02577d491 Rollup merge of #36206 - mcarton:35755, r=pnkfelix
Fix bad error message with `::<` in types

Fix #36116.

Before:
```rust
error: expected identifier, found `<`
  --> src/test/compile-fail/issue-36116.rs:16:52
   |
16 |     let f = Some(Foo { _a: 42 }).map(|a| a as Foo::<i32>);
   |                                                    ^

error: chained comparison operators require parentheses
  --> src/test/compile-fail/issue-36116.rs:16:52
   |
16 |     let f = Some(Foo { _a: 42 }).map(|a| a as Foo::<i32>);
   |                                                    ^^^^^^
   |
   = help: use `::<...>` instead of `<...>` if you meant to specify type arguments

error: expected expression, found `)`
  --> src/test/compile-fail/issue-36116.rs:16:57
   |
16 |     let f = Some(Foo { _a: 42 }).map(|a| a as Foo::<i32>);
   |                                                         ^

error: expected identifier, found `<`
  --> src/test/compile-fail/issue-36116.rs:20:17
   |
20 |     let g: Foo::<i32> = Foo { _a: 42 };
   |                 ^

error: aborting due to 5 previous errors
```

After:
```rust
error: unexpected token: `::`
  --> src/test/compile-fail/issue-36116.rs:16:50
   |
16 |     let f = Some(Foo { _a: 42 }).map(|a| a as Foo::<i32>);
   |                                                  ^^
   |
   = help: use `<...>` instead of `::<...>` if you meant to specify type arguments

error: unexpected token: `::`
  --> src/test/compile-fail/issue-36116.rs:20:15
   |
20 |     let g: Foo::<i32> = Foo { _a: 42 };
   |               ^^
   |
   = help: use `<...>` instead of `::<...>` if you meant to specify type arguments

error: aborting due to 2 previous errors
```
2016-10-28 17:05:47 +02:00
mcarton f7cc6dc1ed Fix bad error message with ::< in types 2016-10-28 12:52:41 +02:00
bors 07436946b6 Auto merge of #37245 - goffrie:recovery, r=nrc
Recover out of an enum or struct's braced block.

If we encounter a syntax error inside of a braced block, then we should
fail by consuming the rest of the block if possible.
This implements such recovery for enums and structs.

Fixes #37113.
2016-10-27 07:19:16 -07:00
Geoffry Song c9036ccffe Recover out of an enum or struct's braced block.
If we encounter a syntax error inside of a braced block, then we should
fail by consuming the rest of the block if possible.
This implements such recovery for enums and structs.

Fixes #37113.
2016-10-26 22:27:14 -04:00
Eduard Burtescu 9908711e5e Implement field shorthands in struct literal expressions. 2016-10-27 03:15:13 +03:00
Jeffrey Seyfried 4a93648689 Support use *; and use ::*;. 2016-10-23 22:02:39 +00:00
Vadim Petrochenkov fea630ef9d Tweak path parsing logic 2016-10-20 20:28:10 +03:00
Vadim Petrochenkov 65ff4ca294 Refactor parser lookahead buffer and increase its size 2016-10-20 20:28:10 +03:00
Jeffrey Seyfried 8b0c292a72 Improve $crate. 2016-10-19 10:03:06 +00:00
Nicholas Nethercote 3c4c85947c Rename Parser::last_token_kind as prev_token_kind.
Likewise, rename LastTokenKind as PrevTokenKind.

This is a [breaking-change] for libsyntax.
2016-10-05 08:53:18 +11:00
Nicholas Nethercote 2747923c27 Rename Parser::last_span as prev_span.
This is a [breaking-change] for libsyntax.
2016-10-05 08:53:18 +11:00
Manish Goregaokar 406fe7e3c2 Rollup merge of #34764 - pnkfelix:attrs-on-generic-formals, r=eddyb
First step for #34761
2016-10-01 19:22:39 +05:30
Manish Goregaokar 259d1fcd47 Rollup merge of #36599 - jonas-schievink:whats-a-pirates-favorite-data-structure, r=pnkfelix
Contains a syntax-[breaking-change] as a separate commit (cc #31645).nnAlso renames slice patterns from `PatKind::Vec` to `PatKind::Slice`.
2016-10-01 19:22:12 +05:30
Jonathan Turner f1ea5cc273 Rollup merge of #36789 - jseyfried:non_inline_mod_in_block, r=nikomatsakis
Allow more non-inline modules in blocks

Currently, non-inline modules without a `#[path]` attribute are not allowed in blocks.
This PR allows non-inline modules that have an ancestor module with a `#[path]` attribute, provided there is not a nearer ancestor block.

For example,
```rust
fn main() {
    #[path = "..."] mod foo {
        mod bar; //< allowed by this PR
        fn f() {
            mod bar; //< still an error
        }
    }
}
```

Fixes #36772.
r? @nikomatsakis
2016-09-28 20:21:52 -07:00
Jeffrey Seyfried ce5ad1da12 Allow non-inline modules in more places. 2016-09-28 22:16:20 +00:00
Jonas Schievink 48e5199de3 libsyntax: clearer names for some AST parts
This applies the HIR changes from the previous commits to the AST, and
is thus a syntax-[breaking-change]

Renames `PatKind::Vec` to `PatKind::Slice`, since these are called slice
patterns, not vec patterns. Renames `TyKind::Vec`, which represents the
type `[T]`, to `TyKind::Slice`. Renames `TyKind::FixedLengthVec` to
`TyKind::Array`.
2016-09-28 22:31:18 +02:00
Jonathan Turner 5cc9fb9ed9 Rollup merge of #36669 - jseyfried:refactor_tok_result, r=nrc
Unify `TokResult` and `ResultAnyMacro`

Fixes #36641.
r? @nrc
2016-09-26 17:29:48 -07:00
Jonathan Turner 1d9646228d Rollup merge of #36662 - jseyfried:parse_macro_invoc_paths, r=nrc
parser: support paths in bang macro invocations (e.g. `path::to::macro!()`)

r? @nrc
2016-09-26 17:29:47 -07:00
Jeffrey Seyfried df0e4bf911 Move ensure_complete_parse into expand.rs. 2016-09-26 11:24:10 +00:00
Jeffrey Seyfried b90ceddcee Refactor ensure_complete_parse. 2016-09-26 04:29:30 +00:00
Felix S. Klock II 3a9b7be10b Added tests and fixed corner case for trailing attributes with no attached binding in generics. 2016-09-23 17:01:04 +02:00
Felix S. Klock II 4c37ad6607 Add attribute support to generic lifetime and type parameters.
I am using `ThinAttributes` rather than a vector for attributes
attached to generics, since I expect almost all lifetime and types
parameters to not carry any attributes.
2016-09-23 17:01:04 +02:00
Jeffrey Seyfried 2c85733521 Fix indents. 2016-09-23 04:27:08 +00:00
Jeffrey Seyfried 1e1804db18 Cleanup. 2016-09-23 04:27:08 +00:00
Jeffrey Seyfried 6c08d03039 Parse paths in item, trait item, and impl item macro invocations. 2016-09-23 04:26:59 +00:00
Jeffrey Seyfried a0e178db79 Parse paths in statement and pattern macro invocations. 2016-09-23 04:26:56 +00:00
Nick Cameron 3863834d9c reviewer comments and rebasing 2016-09-23 07:19:31 +12:00
Jeffrey Seyfried dc7ed303f7 Refactor out parse_struct_expr. 2016-09-22 07:34:03 +00:00
bors f39039e6e5 Auto merge of #36527 - nnethercote:last_token_kind, r=jseyfried
Optimize the parser's last token handling.

The parser currently makes a heap copy of the last token in four cases:
identifiers, paths, doc comments, and commas. The identifier and
interpolation cases are unused, and for doc comments and commas we only
need to record their presence, not their value.

This commit consolidates the last token handling and avoids the
unnecessary copies by replacing `last_token`, `last_token_eof`, and
`last_token_interpolated` with a new field `last_token_kind`. This
simplifies the parser slightly and speeds up parsing on some files by
3--4%.
2016-09-18 00:48:51 -07:00
bors 0b03ba1f55 Auto merge of #36502 - TimNN:correct-cancel, r=jseyfried
correctly cancel some errors

Fixes #36499.

I also (proactively) changed all other calls in `parser.rs` to use `Handler::cancel`.
2016-09-17 20:57:05 -07:00
bors 141012dd52 Auto merge of #36482 - jseyfried:dont_load_unconfigured_noninline_modules, r=nrc
Avoid loading and parsing unconfigured non-inline modules.

For example, `#[cfg(any())] mod foo;` will always compile after this PR, even if `foo.rs` and `foo/mod.rs` do not exist or do not contain valid Rust.

Fixes #36478 and fixes #27873.

r? @nrc
2016-09-16 23:29:15 -07:00
Nicholas Nethercote 8075d54606 Optimize the parser's last token handling.
The parser currently makes a heap copy of the last token in four cases:
identifiers, paths, doc comments, and commas. The identifier and
interpolation cases are unused, and for doc comments and commas we only
need to record their presence, not their value.

This commit consolidates the last token handling and avoids the
unnecessary copies by replacing `last_token`, `last_token_eof`, and
`last_token_interpolated` with a new field `last_token_kind`. This
simplifies the parser slightly and speeds up parsing on some files by
3--4%.
2016-09-16 15:46:40 +10:00
Tim Neumann 9f4e908360 correctly cancel some errors 2016-09-15 22:12:22 +02:00