Commit graph

5609 commits

Author SHA1 Message Date
Jeffrey Seyfried
4e74c181a4 Make ext::base::expr_to_string work correctly with include! macro invocations 2016-07-14 10:27:18 +00:00
bors
0b7fb80e1c Auto merge of #34772 - jseyfried:cleanup_interner, r=eddyb
Start cleaning up the string interner

r? @eddyb
2016-07-13 10:26:18 -07:00
bors
2ab18ce6f7 Auto merge of #34660 - jseyfried:fix_parse_stmt, r=nrc
Fix bugs in macro-expanded statement parsing

Fixes #34543.

This is a [breaking-change]. For example, the following would break:
```rust
macro_rules! m { () => {
    println!("") println!("")
    //^ Semicolons are now required on macro-expanded non-braced macro invocations
    //| in statement positions.
    let x = 0
    //^ Semicolons are now required on macro-expanded `let` statements
    //| that are followed by more statements, so this would break.
    let y = 0 //< (this would still be allowed to reduce breakage in the wild)
}
fn main() { m!() }
```

r? @eddyb
2016-07-13 01:37:07 -07:00
Jeffrey Seyfried
57fac56cb5 Start a best-effort warning cycle. 2016-07-13 04:50:35 +00:00
Jeffrey Seyfried
c1b850d304 cleanup: Refactor parser method finish_parsing_statement -> parse_full_stmt. 2016-07-13 04:49:32 +00:00
Jeffrey Seyfried
759b8a8e7d Allow macro-expanded macros in trailing expression positions to expand into statements:
```rust
macro_rules! m { () => { let x = 1; x } }
macro_rules! n { () => {
    m!() //< This can now expand into statements
}}
fn main() { n!(); }
```

and revert needless fallout fixes.
2016-07-13 04:49:32 +00:00
Jeffrey Seyfried
52d485fe0d Fix bug in the pretty printer. 2016-07-13 04:49:32 +00:00
Jeffrey Seyfried
57c56dd7e0 Parse macro-expanded statements like ordinary statements. 2016-07-12 04:31:39 +00:00
Jeffrey Seyfried
6189e6cdba Clean up statement parsing without changing the semantics of parse_stmt. 2016-07-12 04:31:13 +00:00
Jeffrey Seyfried
060b5c5ef2 Factor the RefCell out of the Interner. 2016-07-11 22:25:08 +00:00
Jeffrey Seyfried
752d4419a0 Refactor get_ident_interner -> with_ident_interner. 2016-07-11 22:25:04 +00:00
Jeffrey Seyfried
1eb6d0b485 Remove Interner<T> and rename StrInterner to Interner. 2016-07-11 22:16:00 +00:00
Jeffrey Seyfried
f8a934e971 Encapsulate RcStr in syntax::util::interner. 2016-07-11 22:15:58 +00:00
Jeffrey Seyfried
6d5f85996e Remove unused field interner from the parser. 2016-07-11 22:15:56 +00:00
Guillaume Gomez
b777f145e6 Move E0533 to E0558 (because of external change) 2016-07-11 23:27:27 +02:00
ggomez
937f072cb4 Fix typos 2016-07-11 23:24:49 +02:00
Guillaume Gomez
ed2bf57728 Add E0537 error explanation 2016-07-11 23:24:49 +02:00
Guillaume Gomez
ebebb3164a Add E0536 error explanation 2016-07-11 23:24:49 +02:00
Guillaume Gomez
9fe31a1b36 Add E0535 error explanation 2016-07-11 23:24:49 +02:00
Guillaume Gomez
38a0177917 Add E0534 error explanation 2016-07-11 23:24:49 +02:00
Guillaume Gomez
028c796363 Add E0533 error explanation 2016-07-11 23:24:49 +02:00
Manish Goregaokar
793db8fa04 Rollup merge of #34691 - jseyfried:remove_erroneous_unit_struct_checks, r=nrc
parser: Remove outdated checks for empty braced struct expressions (`S {}`)

This is a pure refactoring.
r? @nrc
2016-07-08 14:46:59 +05:30
cgswords
754759688b Preliminary implementation for TokenStreams and TokenSlices, including unit tests and associated operations. 2016-07-07 11:44:04 -07:00
bors
de78655bca Auto merge of #34652 - jseyfried:fix_expansion_perf, r=nrc
Fix expansion performance regression

**syntax-[breaking-change] cc #31645**

This fixes #34630 by reverting commit 5bf7970 of PR #33943, which landed in #34424.

By removing the `Rc<_>` wrapping around `Delimited` and `SequenceRepetition` in `TokenTree`, 5bf7970 made cloning `TokenTree`s more expensive. While this had no measurable performance impact on the compiler's crates, it caused an order of magnitude performance regression on some macro-heavy code in the wild. I believe this is due to clones of `TokenTree`s in `macro_parser.rs` and/or `macro_rules.rs`.

r? @nrc
2016-07-06 20:04:11 -07:00
Jeffrey Seyfried
5e31617621 Remove outdated checks for empty braced struct expressions (i.e. UnitStruct {}). 2016-07-06 20:02:36 +00:00
bors
34c9cddc89 Auto merge of #34654 - jseyfried:configure_multi_modified, r=nrc
Perform `cfg` attribute processing on `MultiModifier`-generated items

Fixes https://users.rust-lang.org/t/unused-attribute-warning-for-custom-derive-attribute/6180.
r? @nrc
2016-07-06 11:13:48 -07:00
bors
47380768e7 Auto merge of #34546 - jseyfried:cfg_attr_path, r=nrc
Support `cfg_attr` on `path` attributes

Fixes #25544.
This is technically a [breaking-change]. For example, the following would break:
```rust
mod foo; // Suppose `foo.rs` existed in the appropriate location
```
2016-07-06 00:34:51 -07:00
Jeffrey Seyfried
c454c1d4ac Strip unconfigured items from MultiModifier-expanded AST 2016-07-05 00:14:41 +00:00
Jeffrey Seyfried
547a930835 Revert "Change fold_tt and fold_tts to take token trees by value (instead of by reference)"
This reverts commit 5bf7970ac7.
2016-07-04 23:42:35 +00:00
Zack M. Davis
d37edef9dd prefer if let to match with None => {} arm in some places
This is a spiritual succesor to #34268/8531d581, in which we replaced a
number of matches of None to the unit value with `if let` conditionals
where it was judged that this made for clearer/simpler code (as would be
recommended by Manishearth/rust-clippy's `single_match` lint). The same
rationale applies to matches of None to the empty block.
2016-07-03 16:27:02 -07:00
Manish Goregaokar
2c643bd4d0 Rollup merge of #34531 - GuillaumeGomez:libsyntax_err_codes, r=jonathandturner
Add error codes in libsyntax

r? @jonathandturner

Fixes #34526
2016-07-02 15:46:49 +05:30
Guillaume Gomez
84e874f0e0 Add comments on error code list 2016-06-30 11:14:22 +02:00
bors
85c31af981 Auto merge of #34541 - jseyfried:rollup, r=jseyfried
Rollup of 5 pull requests

 - Successful merges: #34105, #34305, #34512, ~~#34531,~~ #34547
2016-06-30 01:49:45 -07:00
ggomez
7a8b4026ba Fix tests 2016-06-29 22:10:36 +02:00
Manish Goregaokar
8886818a9a Rollup merge of #34495 - jseyfried:only_ident_macro_invocations, r=eddyb
Forbid type parameters and global paths in macro invocations

Fixes #28558.
This is a [breaking-change]. For example, the following would break:
```rust
macro_rules! m { () => { () } }
fn main() {
    m::<T>!(); // Type parameters are no longer allowed in macro invocations
    ::m!(); // Global paths are no longer allowed in macro invocations
}
```
Any breakage can be fixed by removing the type parameters or the leading `::` (respectively).

r? @eddyb
2016-06-29 21:21:22 +05:30
Manish Goregaokar
fd45e6e912 Rollup merge of #34459 - jseyfried:expansion_cleanup, r=nrc
Miscellaneous macro expansion cleanup and groundwork

r? @nrc
2016-06-29 21:21:21 +05:30
Manish Goregaokar
470c5191f5 Rollup merge of #34446 - jseyfried:refactor_decorators, r=nrc
Treat `MultiDecorator`s as a special case of `MultiModifier`s

This deals with #32950 by using @durka's [option 1](https://github.com/rust-lang/rust/pull/33769#issuecomment-221774136).
r? @nrc
2016-06-29 21:21:21 +05:30
Seo Sanghyeon
3c29fc5f6c Fix pretty-printing of lifetime bound 2016-06-29 23:40:29 +09:00
ggomez
0e326d4780 Add error codes in libsyntax 2016-06-29 13:28:49 +02:00
Jeffrey Seyfried
8557a2e18c Give ast::ExprKind::Paren no-op expressions the same node ids as their children. 2016-06-29 11:06:28 +00:00
Jeffrey Seyfried
db57e67452 Support cfg_attr on path attributes 2016-06-29 09:35:56 +00:00
Jeffrey Seyfried
a9d25f8b59 Refactor away parser.commit_stmt_expecting() 2016-06-29 06:40:05 +00:00
Jeffrey Seyfried
a595ffaac5 Treat MultiDecorators as a special case of MultiModifiers 2016-06-29 01:25:46 +00:00
Jeffrey Seyfried
36a4eb9940 cleanup: refactor away ast::NodeIdAssigner 2016-06-28 05:28:25 +00:00
Jeffrey Seyfried
2dc15f2b96 cleanup: use DummyResult to implement MacroGenerable::dummy 2016-06-28 05:28:22 +00:00
Jeffrey Seyfried
b968ee3656 cleanup: don't count attributes on an item in a statement position as on the statement 2016-06-28 05:28:20 +00:00
bors
ea0dc92972 Auto merge of #34424 - jseyfried:breaking_batch, r=Manishearth
Batch up libsyntax breaking changes

Batch of the following syntax-[breaking-change] changes:
 - #34213: Add a variant `Macro` to `TraitItemKind`
 - #34368: Merge the variant `QPath` of `PatKind` into the variant `PatKind::Path`
 - #34385: Move `syntax::ast::TokenTree` into a new module `syntax::tokenstream`
 - #33943:
  - Remove the type parameter from `visit::Visitor`
  - Remove `attr::WithAttrs` -- use `attr::HasAttrs` instead.
  - Change `fold_tt`/`fold_tts` to take token trees by value and avoid wrapping token trees in `Rc`.
  - Remove the field `ctxt` of `ast::Mac_`
  - Remove inherent method `attrs()` of types -- use the method `attrs` of `HasAttrs` instead.
 - #34316:
  - Remove `ast::Decl`/`ast::DeclKind` and add variants `Local` and `Item` to `StmtKind`.
  - Move the node id for statements from the `StmtKind` variants to a field of `Stmt` (making `Stmt` a struct instead of an alias for `Spanned<StmtKind>`)
  - Rename `ast::ExprKind::Again` to `Continue`.
 - #34339: Generalize and abstract `ThinAttributes` to `ThinVec<Attribute>`
  - Use `.into()` in convert between `Vec<Attribute>` and `ThinVec<Attribute>`
  - Use autoderef instead of `.as_attr_slice()`
 - #34436: Remove the optional expression from `ast::Block` and instead use a `StmtKind::Expr` at the end of the statement list.
 - #34403: Move errors into a separate crate (unlikely to cause breakage)
2016-06-27 16:42:03 -07:00
Jeffrey Seyfried
542ba8c5f7 Fix Cargo.tomls 2016-06-27 18:30:46 +00:00
Jeffrey Seyfried
e01a2ba274 Forbid type parameters and global paths in macro invocations 2016-06-27 03:17:46 +00:00
bors
3059bb9e38 Auto merge of #34450 - jseyfried:fix_include_path, r=nrc
Revert a change to the relative path for macro-expanded `include!`s

Fixes #34431 (c.f. discussion in that issue).
r? @nrc
2016-06-26 14:50:27 -07:00