2464 Commits

Author SHA1 Message Date
Manish Goregaokar
a73ba8b98c Rollup merge of #35874 - CensoredUsername:stmt_let_typed_fix, r=Manishearth
This commit makes the return type of AstBuilder.stmt_let_typed match the return type of other AstBuilder.stmt* functions. This avoids unnecessary boxing/unboxing whenever Stmt's are stored in a Vec, which is the default use case.nnThis is a potentially plugin breaking change.
2016-10-01 19:22:08 +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
bors
a059cb2f33 Auto merge of #36601 - jseyfried:build_reduced_graph_in_expansion, r=nrc
Assign def ids and build the module graph during expansion

r? @nrc
2016-09-27 14:11:07 -07:00
Jeffrey Seyfried
f34e49dd90 With --test, make #[test] functions pub in InvocationCollector
and expand the `__test_reexports` in the correct scope.
2016-09-27 06:43:49 +00:00
Jeffrey Seyfried
0613dac042 Avoid aborting after expansion from BuildReducedGraphVisitor errors. 2016-09-27 06:43:48 +00:00
bors
ec7679b460 Auto merge of #36764 - jonathandturner:rollup, r=jonathandturner
Rollup of 14 pull requests

- Successful merges: #36563, #36574, #36586, #36662, #36663, #36669, #36676, #36721, #36723, #36727, #36729, #36742, #36754, #36756
- Failed merges:
2016-09-26 23:30:19 -07:00
Jonathan Turner
02cc578676 Rollup merge of #36721 - TimNN:infinite-emptiness, r=nrc
reject macros with empty repetitions

Fixes #5067 by checking the lhs of `macro_rules!` for repetitions which could match an empty token tree.
2016-09-26 17:29:48 -07:00
Jeffrey Seyfried
df0e4bf911 Move ensure_complete_parse into expand.rs. 2016-09-26 11:24:10 +00:00
Tim Neumann
b0dba7439d make emit_feature_err take a ParseSess 2016-09-26 07:07:41 +02:00
Tim Neumann
51ea050457 reject macros with empty repetitions 2016-09-26 06:59:06 +02:00
Jeffrey Seyfried
b90ceddcee Refactor ensure_complete_parse. 2016-09-26 04:29:30 +00:00
Jeffrey Seyfried
4a8467b62d Remove TokResult. 2016-09-26 04:16:55 +00:00
Jeffrey Seyfried
8b40eaddf1 Refactor parse_expansion out of ResultAnyMacro. 2016-09-26 04:15:27 +00:00
Jeffrey Seyfried
b4906a93a0 Load macros from #[macro_use] extern crates in resolve. 2016-09-24 20:22:25 +00:00
Jeffrey Seyfried
1599461256 Refactor ext::tt::macro_rules::compile to take a ParseSess instead of an ExtCtxt. 2016-09-24 01:06:53 +00:00
bors
533c04dbb3 Auto merge of #36573 - jseyfried:groundwork, r=nrc
resolve: groundwork for building the module graph during expansion

r? @nrc
2016-09-22 19:54:56 -07:00
bors
3a5d975fdc Auto merge of #36154 - nrc:proc-macro-init, r=@jseyfried
Adds a `ProcMacro` form of syntax extension

This commit adds syntax extension forms matching the types for procedural macros 2.0 (RFC #1566), these still require the usual syntax extension boiler plate, but this is a first step towards proper implementation and should be useful for macros 1.1 stuff too.

Supports both attribute-like and function-like macros.

Note that RFC #1566 has not been accepted yet, but I think there is consensus that we want to head in vaguely that direction and so this PR will be useful in any case. It is also fairly easy to undo and does not break any existing programs.

This is related to #35957 in that I hope it can be used in the implementation of macros 1.1, however, there is no direct overlap and is more of a complement than a competing proposal. There is still a fair bit of work to do before the two can be combined.

r? @jseyfried

cc @alexcrichton, @cgswords, @eddyb, @aturon
2016-09-22 16:33:41 -07:00
Jeffrey Seyfried
1ee64e44a9 Use Resolver::visit_expansion only with monotonic expansions. 2016-09-22 21:14:03 +00:00
Nick Cameron
3863834d9c reviewer comments and rebasing 2016-09-23 07:19:31 +12:00
bors
a09cb57a73 Auto merge of #36618 - jseyfried:crate_root_attr_invoc, r=nrc
macros: allow attribute invocations at the crate root

Fixes #36617.
r? @nrc
2016-09-22 06:29:23 -07:00
Nick Cameron
6a2d2c9495 Adds a ProcMacro form of syntax extension
This commit adds syntax extension forms matching the types for procedural macros 2.0 (RFC #1566), these still require the usual syntax extension boiler plate, but this is a first step towards proper implementation and should be useful for macros 1.1 stuff too.

Supports both attribute-like and function-like macros.
2016-09-22 08:47:57 +12:00
Jeffrey Seyfried
4db157af71 Allow attribute macro invocations at the crate root. 2016-09-21 09:24:06 +00:00
Eduard Burtescu
fc363cb482 rustc_metadata: go only through rustc_serialize in astencode. 2016-09-20 20:07:54 +03:00
CensoredUsername
19e6f06818 Make the return type of AstBuilder.stmt_let_typed match the return type of other AstBuilder.stmt* functions 2016-09-17 01:17:02 +02:00
Jeffrey Seyfried
2abdc8805c Remove MacroRulesTT. 2016-09-15 21:16:51 +00:00
Jeffrey Seyfried
0ddb66c4c7 Allow IdentMacroExpander::expand to access the ident macro invocation's attributes. 2016-09-15 20:57:54 +00:00
Jeffrey Seyfried
21ba8160f2 Move fields single_step and keep_macs from MacroExpander to ExpansionConfig. 2016-09-15 20:57:38 +00:00
Manish Goregaokar
bab9238a1e Rollup merge of #36438 - jseyfried:node_ids_in_expansion, r=nrc
Assign node ids during macro expansion

After this PR,
 - The `ExtCtxt` can access `resolve`'s `Resolver` through the trait object `ext::base::Resolver`.
  - The `Resolver` trait object can load macros and replaces today's `MacroLoader` trait object.
  - The macro expander uses the `Resolver` trait object to resolve macro invocations.
 - The macro expander assigns node ids and builds the `Resolver`'s `macros_at_scope` map.
   - This is groundwork for merging import resolution and expansion.
 - Performance of expansion together with node id assignment improves by ~5%.

**EDIT:** Since Github is reordering the commits, here is `git log`:
 - b54e1e399741579612f13e2df98a25ea9447989d: Differentiate between monotonic and non-monotonic expansion and only assign node ids during monotonic expansion.
 - 78c00398780db6f59ebf43e765fa9368dad436d2: Expand generated test harnesses and macro registries.
 - f3c2dca3539e6edc745f9c91898cb97d281865c1: Remove scope placeholders from the crate root.
 - c86c8d41a26b2037e80c9fd028a59313a78b3a66: Perform node id assignment and `macros_at_scope` construction during the `InvocationCollector` and `PlaceholderExpander` folds.
 - 72a636975fc5d0bb4af45af7bdd97987cc722a6a: Move macro resolution into `librustc_resolve`.
 - 20b43b23230ce063ccf99a4841d85790ad311bdf: Rewrite the unit tests in `ext/expand.rs` as a `compile-fail` test.
 - a9821e1658240bb2c056f260a4b6bc9789301fae: Refactor `ExtCtxt` to use a `Resolver` instead of a `MacroLoader`.
 - 60440b226d2f70bdae803443ff7ad2e2af2c9b10: Refactor `noop_fold_stmt_kind` out of `noop_fold_stmt`.
 - 50f94f6c95c944f08c4af264f48260e42efefd47: Avoid needless reexpansions.

r? @nrc
2016-09-15 18:16:21 +05:30
Jeffrey Seyfried
b54e1e3997 Differentiate between monotonic and non-monotonic expansion and
only assign node ids during monotonic expansion.
2016-09-13 09:40:28 +00:00
Jeffrey Seyfried
f3c2dca353 Remove scope placeholders from the crate root. 2016-09-13 09:40:28 +00:00
Jeffrey Seyfried
c86c8d41a2 Perform node id assignment and macros_at_scope construction during
the `InvocationCollector` and `PlaceholderExpander` folds.
2016-09-13 09:40:28 +00:00
Jeffrey Seyfried
72a636975f Move macro resolution into librustc_resolve. 2016-09-13 09:40:26 +00:00
Jeffrey Seyfried
20b43b2323 Rewrite the unit tests in ext/expand.rs as a compile-fail test. 2016-09-13 05:31:17 +00:00
Jeffrey Seyfried
a9821e1658 Refactor ExtCtxt to use a Resolver instead of a MacroLoader. 2016-09-13 05:31:16 +00:00
Jeffrey Seyfried
50f94f6c95 Avoid needless reexpansions. 2016-09-13 05:11:45 +00:00
Vadim Petrochenkov
62cb7510ac Improve Eq deriving 2016-09-10 22:37:06 +03:00
Jeffrey Seyfried
9ac91fa48b Improve directory computation during invocation collection. 2016-09-07 22:42:17 +00:00
Jeffrey Seyfried
2d759046ba Implement stackless placeholder expansion. 2016-09-07 22:42:17 +00:00
Jeffrey Seyfried
d76bf3ed80 Strip unconfigured nodes in the InvocationCollector fold. 2016-09-07 22:41:35 +00:00
Jeffrey Seyfried
2c88b4b790 Load macros from extern crates in the InvocationCollector fold. 2016-09-05 04:53:35 +00:00
Jeffrey Seyfried
d986bbe674 Implement stackless expansion. 2016-09-05 04:53:34 +00:00
Jeffrey Seyfried
c07ff8d26a Add module ext::placeholders with placeholder() and PlaceholderExpander. 2016-09-05 04:53:33 +00:00
Jeffrey Seyfried
7a3ae576fa Refactor expand_invoc(.., fld) -> self.expand_invoc(..). 2016-09-05 04:53:33 +00:00
Jeffrey Seyfried
79fa9eb643 Refactor SyntaxEnv. 2016-09-05 04:53:32 +00:00
Jeffrey Seyfried
4ed2c0ea7c Refactor expand_* into expander.fold_*. 2016-09-05 04:53:30 +00:00
Jeffrey Seyfried
503a10b34a Clean up module processing. 2016-09-05 04:53:25 +00:00
Jeffrey Seyfried
2a83574c6a Refactor out expand_item (with better semantics than before). 2016-09-05 04:53:23 +00:00
Jeffrey Seyfried
8be8cf8540 Refactor away expand_item. 2016-09-05 04:53:22 +00:00
Jeffrey Seyfried
fca80c983d Generalize Invocation to include modifiers/decorators. 2016-09-05 04:53:21 +00:00