about summary refs log tree commit diff
path: root/src/libsyntax
AgeCommit message (Collapse)AuthorLines
2016-06-16Auto merge of #34315 - Manishearth:rollup, r=Manishearthbors-859/+859
Rollup of 4 pull requests - Successful merges: #34298, #34302, #34307, #34312 - Failed merges:
2016-06-17Rollup merge of #34312 - erickt:add-try, r=nikomatsakisManish Goregaokar-859/+859
Revert using ? for try! in the libsyntax pretty printer The use of ...?instead of try!(...) in libsyntax makes extracting libsyntax into syntex quite painful since it's not stable yet. This makes backports take a much longer time and causes a lot of problems for the syntex dependencies. Even if it was, it'd take a few release cycles until syntex would be able to use it. Since it's not stable and that this feature is just syntax sugar, it would be most helpful if we could remove it. cc #34311
2016-06-16Auto merge of #34272 - jseyfried:simplify_gated_cfg_checking, r=nrcbors-169/+95
Simplify gated cfg checking r? @nrc
2016-06-16Revert using ? for try! in the libsyntax pretty printerErick Tryzelaar-859/+859
The use of ...?instead of try!(...) in libsyntax makes extracting libsyntax into syntex quite painful since it's not stable yet. This makes backports take a much longer time and causes a lot of problems for the syntex dependencies. Even if it was, it'd take a few release cycles until syntex would be able to use it. Since it's not stable and that this feature is just syntax sugar, it would be most helpful if we could remove it. cc #34311
2016-06-16Simplify gated cfg checkingJeffrey Seyfried-169/+95
2016-06-16Auto merge of #34187 - luser:extern-crate-abspaths, r=michaelwoeristerbors-41/+76
Add an abs_path member to FileMap, use it when writing debug info. Fixes #34179. When items are inlined from extern crates, the filename in the debug info is taken from the FileMap that's serialized in the rlib metadata. Currently this is just FileMap.name, which is whatever path is passed to rustc. Since libcore and libstd are built by invoking rustc with relative paths, they wind up with relative paths in the rlib, and when linked into a binary the debug info uses relative paths for the names, but since the compilation directory for the final binary, tools trying to read source filenames will wind up with bad paths. We noticed this in Firefox with source filenames from libcore/libstd having bad paths. This change stores an absolute path in FileMap.abs_path, and uses that if available for writing debug info. This is not going to magically make debuggers able to find the source, but it will at least provide sensible paths.
2016-06-16Add an abs_path member to FileMap, use it when writing debug info.Ted Mielczarek-41/+76
When items are inlined from extern crates, the filename in the debug info is taken from the FileMap that's serialized in the rlib metadata. Currently this is just FileMap.name, which is whatever path is passed to rustc. Since libcore and libstd are built by invoking rustc with relative paths, they wind up with relative paths in the rlib, and when linked into a binary the debug info uses relative paths for the names, but since the compilation directory for the final binary, tools trying to read source filenames will wind up with bad paths. We noticed this in Firefox with source filenames from libcore/libstd having bad paths. This change stores an absolute path in FileMap.abs_path, and uses that if available for writing debug info. This is not going to magically make debuggers able to find the source, but it will at least provide sensible paths.
2016-06-16Auto merge of #34239 - jseyfried:fix_macro_use_scope_regression, r=nrcbors-20/+72
Revert a change in the scope of macros imported from crates to fix a regression Fixes #34212. The regression was caused by #34032, which changed the scope of macros imported from extern crates to match the scope of macros imported from modules. r? @nrc
2016-06-16Auto merge of #34216 - jseyfried:nested_cfg_attr, r=nrcbors-1/+1
Support nested `cfg_attr` attributes Support arbitrarily deeply nested `cfg_attr` attributes (e.g. `#[cfg_attr(foo, cfg_attr(bar, baz))]`). This makes configuration idempotent. Currently, the nighties do not support any `cfg_attr` nesting. Stable and beta support just one level of `cfg_attr` nesting (expect for attributes on macro-expanded nodes, where no nesting is supported). This is a [breaking-change]. For example, the following would break: ```rust macro_rules! m { () => { #[cfg_attr(all(), cfg_attr(all(), cfg(foo)))] fn f() {} } } m!(); fn main() { f() } //~ ERROR unresolved name `f` ``` r? @nrc
2016-06-16Strip unconfigured nodes from decorator-generated ASTJeffrey Seyfried-4/+25
2016-06-16Avoid expanding decorator-generated items twiceJeffrey Seyfried-2/+0
2016-06-16Allow `MultiItemModifier`s to expand into zero or many itemsJeffrey Seyfried-12/+14
2016-06-16Refactor MultiModifier expansionJeffrey Seyfried-65/+34
2016-06-16Implement `HasAttrs` for `Annotatable`Jeffrey Seyfried-16/+19
2016-06-16Rollup merge of #34268 - zackmdavis:if_let_over_none_unit_arm, r=jseyfriedManish Goregaokar-37/+28
prefer `if let` to match with `None => ()` arm in some places Casual grepping revealed some places in the codebase (some of which antedated `if let`'s December 2014 stabilization in c200ae5a) where we were using a match with a `None => ()` arm where (in the present author's opinion) an `if let` conditional would be more readable. (Other places where matching to the unit value did seem to better express the intent were left alone.) It's likely that we don't care about making such trivial, non-functional, sheerly æsthetic changes. But if we do, this is a patch.
2016-06-16Rollup merge of #34207 - petrochenkov:nohyg, r=jseyfriedManish Goregaokar-4/+0
Remove last traces of identifier hygiene from HIR https://github.com/rust-lang/rust/pull/34095/commits/e783a0a5e39d5ae2fa147508197d09a51530fae8 removed the [last](https://github.com/rust-lang/rust/pull/33654#discussion_r63415218) [use](https://github.com/rust-lang/rust/pull/33654#discussion_r63416284) of hygiene at post-resolve compilation stages, so we can avoid renaming during lowering to HIR and just keep original names. r? @nrc
2016-06-15prefer `if let` to match with `None => ()` arm in some placesZack M. Davis-37/+28
Casual grepping revealed some places in the codebase (some of which antedated `if let`'s December 2014 stabilization in c200ae5a) where we were using a match with a `None => ()` arm where (in the present author's opinion) an `if let` conditional would be more readable. (Other places where matching to the unit value did seem to better express the intent were left alone.) It's likely that we don't care about making such trivial, non-functional, sheerly æsthetic changes. But if we do, this is a patch.
2016-06-14Remove the type parameter from `syntax::visit::Visitor`Jeffrey Seyfried-156/+137
2016-06-14Refactor away `WithAttrs` traitJeffrey Seyfried-39/+15
2016-06-14Change `fold_tt` and `fold_tts` to take token trees by value (instead of by ↵Jeffrey Seyfried-88/+68
reference)
2016-06-14Refactor away field `ctxt` of `ast::Mac_`Jeffrey Seyfried-11/+8
2016-06-14Remove inherent method `attrs()` on AST nodes. `attrs()` is now a method of ↵Jeffrey Seyfried-29/+1
trait `HasAttrs`.
2016-06-13Auto merge of #33749 - jseyfried:fix_call_site_span, r=nrcbors-23/+1
Fix macro call site spans Fix macro call site spans. r? @nrc
2016-06-13Add support for macro expansion inside trait itemsJoseph Dunne-86/+173
2016-06-12Load macros from `#[macro_use]` crates earlier in expansionJeffrey Seyfried-11/+41
2016-06-12Implement `Into<Vec<T>>` for `SmallVector<T>`Jeffrey Seyfried-0/+10
2016-06-12Add method `visit_with` to `MacroGenerable`Jeffrey Seyfried-9/+21
2016-06-11Support nested `cfg_attr` attributesJeffrey Seyfried-1/+1
2016-06-11Refactor away the `CfgFolder` trait.Jeffrey Seyfried-34/+18
2016-06-11Forbid `#[test]` attributes on non-optional expressions.Jeffrey Seyfried-1/+1
2016-06-11Strip `#[test]` nodes during `cfg` processing on non-test builds.Jeffrey Seyfried-16/+18
2016-06-10Auto merge of #34172 - jseyfried:avoid_configuring_interpolated_ast, ↵bors-0/+7
r=alexcrichton Fix ICE regression caused by configuring interpolated AST Fixes #34171. r? @nrc
2016-06-11Remove last traces of identifier hygiene from HIRVadim Petrochenkov-4/+0
2016-06-10Visit statement and expression attributesJeffrey Seyfried-0/+6
2016-06-09Auto merge of #34108 - jseyfried:refactor_prelude_injection, r=nrcbors-125/+47
Refactor away the prelude injection fold Instead, just inject `#[prelude_import] use [core|std]::prelude::v1::*;` at the crate root while injecting `extern crate [core|std];` and process `#[no_implicit_prelude]` attributes in `resolve`. r? @nrc
2016-06-09Add comment and clean up `expand_annotatable`Jeffrey Seyfried-8/+8
2016-06-09Load macros from `extern crate`s during expansion.Jeffrey Seyfried-22/+46
2016-06-09Avoid configuring interpolated items.Jeffrey Seyfried-0/+7
2016-06-08Auto merge of #34010 - jseyfried:decorate_expanded, r=nrcbors-13/+14
Run decorators on expanded AST Fixes #32950. r? @nrc
2016-06-07Auto merge of #33982 - LeoTestard:remove-check-matcher-old, r=pnkfelixbors-233/+18
Remove the old FOLLOW checking (aka `check_matcher_old`). It was supposed to be removed at the next release cycle but is still in the tree since like 6 months. Potential breaking change, since some cases (such as #25658) will change from a warning to an error. But the warning stating that it will be a hard error in the next release has been there for 6 months now. I think it's safe to break this code. ^_^
2016-06-07Refactor away the prelude injection passJeffrey Seyfried-125/+47
2016-06-06Remove the old FOLLOW checking (aka `check_matcher_old`).Leo Testard-233/+18
2016-06-05Respect #[rustc_inherit_overflow_checks] in mir::build and trans.Eduard Burtescu-0/+7
2016-06-04Auto merge of #34031 - jseyfried:fix_cfg_bug, r=eddybbors-9/+11
Fix a regression in the configuration folder This fixes #34028, a regression caused by #33706 in which unconfigured impl items generated by a macro in an impl item position are not removed. r? @nrc
2016-06-04Auto merge of #33816 - nikomatsakis:projection-cache-2, r=arielb1bors-1/+1
Projection cache and better warnings for #32330 This PR does three things: - it lays the groundwork for the more precise subtyping rules discussed in #32330, but does not enable them; - it issues warnings when the result of a leak-check or subtyping check relies on a late-bound region which will late become early-bound when #32330 is fixed; - it introduces a cache for projection in the inference context. I'm not 100% happy with the approach taken by the cache here, but it seems like a step in the right direction. It results in big wins on some test cases, but not as big as previous versions -- I think because it is caching the `Vec<Obligation>` (whereas before I just returned the normalized type with an empty vector). However, that change was needed to fix an ICE in @alexcrichton's future-rs module (I haven't fully tracked the cause of that ICE yet). Also, because trans/the collector use a fresh inference context for every call to `fulfill_obligation`, they don't profit nearly as much from this cache as they ought to. Still, here are the results from the future-rs `retry.rs`: ``` 06:26 <nmatsakis> time: 6.246; rss: 44MB item-bodies checking 06:26 <nmatsakis> time: 54.783; rss: 63MB translation item collection 06:26 <nmatsakis> time: 140.086; rss: 86MB translation 06:26 <nmatsakis> time: 0.361; rss: 46MB item-bodies checking 06:26 <nmatsakis> time: 5.299; rss: 63MB translation item collection 06:26 <nmatsakis> time: 12.140; rss: 86MB translation ``` ~~Another example is the example from #31849. For that, I get 34s to run item-bodies without any cache. The version of the cache included here takes 2s to run item-bodies type-checking. An alternative version which doesn't track nested obligations takes 0.2s, but that version ICEs on @alexcrichton's future-rs (and may well be incorrect, I've not fully convinced myself of that). So, a definite win, but I think there's definitely room for further progress.~~ Pushed a modified version which improves performance of the case from #31849: ``` lunch-box. time rustc --stage0 ~/tmp/issue-31849.rs -Z no-trans real 0m33.539s user 0m32.932s sys 0m0.570s lunch-box. time rustc --stage2 ~/tmp/issue-31849.rs -Z no-trans real 0m0.195s user 0m0.154s sys 0m0.042s ``` Some sort of cache is also needed for unblocking further work on lazy normalization, since that will lean even more heavily on the cache, and will also require cycle detection. r? @arielb1
2016-06-02Fix bug in the `syntax::config::StripUnconfigured` folderJeffrey Seyfried-9/+11
2016-06-01Remove redundant `check_for_macros` AST pass.Jeffrey Seyfried-19/+0
2016-06-01Auto merge of #33794 - petrochenkov:sanity, r=nrcbors-29/+13
Add AST validation pass and move some checks to it The purpose of this pass is to catch constructions that fit into AST data structures, but not permitted by the language. As an example, `impl`s don't have visibilities, but for convenience and uniformity with other items they are represented with a structure `Item` which has `Visibility` field. This pass is intended to run after expansion of macros and syntax extensions (and before lowering to HIR), so it can catch erroneous constructions that were generated by them. This pass allows to remove ad hoc semantic checks from the parser, which can be overruled by syntax extensions and occasionally macros. The checks can be put here if they are simple, local, don't require results of any complex analysis like name resolution or type checking and maybe don't logically fall into other passes. I expect most of errors generated by this pass to be non-fatal and allowing the compilation to proceed. I intend to move some more checks to this pass later and maybe extend it with new checks, like, for example, identifier validity. Given that syntax extensions are going to be stabilized in the measurable future, it's important that they would not be able to subvert usual language rules. In this patch I've added two new checks - a check for labels named `'static` and a check for lifetimes and labels named `'_`. The first one gives a hard error, the second one - a future compatibility warning. Fixes https://github.com/rust-lang/rust/issues/33059 ([breaking-change]) cc https://github.com/rust-lang/rfcs/pull/1177 r? @nrc
2016-06-01Run decorators on expanded AST.Jeffrey Seyfried-13/+14
2016-06-01Rollup merge of #33973 - ↵Manish Goregaokar-3/+7
zackmdavis:stable_features_warning_notes_version_stabilized, r=brson stable features lint warning mentions version stabilized To accomplish this, we alter the checks in `rustc::middle::stability` to use the `StabilityLevel` defined in `syntax::attr` (which includes the version in which the feature was stabilized) rather than the local `StabilityLevel` in the same module, and make the `declared_stable_lang_features` field of `syntax::feature_gate::Features` hold a Vec of feature-name, span tuples (in analogy to the `declared_lib_features` field) rather than just spans. Fixes #33394. ![stable_features_version_lint_before_and_after](https://cloud.githubusercontent.com/assets/1076988/15659237/5d952a3a-267c-11e6-9181-c9e612eefd7d.png) r? @brson (tagging Brian because he [wrote](https://github.com/rust-lang/rust/pull/21958) the lint)