Auto merge of #46550 - jseyfried:cleanup_builtin_hygiene, r=nrc

macros: hygienize use of `core`/`std` in builtin macros

Today, if a builtin macro wants to access an item from `core` or `std` (depending `#![no_std]`), it generates `::core::path::to::item` or `::std::path::to::item` respectively (c.f. `fn std_path()` in `libsyntax/ext/base.rs`).

This PR refactors the builtin macros to instead always emit `$crate::path::to::item` here. That is, the def site of builtin macros is taken to be in `extern crate core;` or `extern crate std;`. Since builtin macros are macros 1.0 (i.e. mostly unhygienic), changing the def site can only effect the resolution of `$crate`.

r? @nrc
This commit is contained in:
bors 2017-12-13 11:09:55 +00:00
commit 3dfbc88a62
30 changed files with 174 additions and 140 deletions

View file

@ -40,7 +40,7 @@ pub fn bar() ({
((::fmt::format as
for<'r> fn(std::fmt::Arguments<'r>) -> std::string::String {std::fmt::format})(((<::std::fmt::Arguments>::new_v1
for<'r> fn(std::fmt::Arguments<'r>) -> std::string::String {std::fmt::format})(((<::fmt::Arguments>::new_v1
as
fn(&[&str], &[std::fmt::ArgumentV1<'_>]) -> std::fmt::Arguments<'_> {std::fmt::Arguments<'_>::new_v1})((&([("test"
as

View file

@ -69,7 +69,7 @@ fn expand_deriving_partial_eq(cx: &mut ExtCtxt, span: Span, mitem: &MetaItem, it
let trait_def = TraitDef {
span: span,
attributes: Vec::new(),
path: deriving::generic::ty::Path::new(vec!["std", "cmp", "PartialEq"]),
path: deriving::generic::ty::Path::new(vec!["cmp", "PartialEq"]),
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,

View file

@ -50,7 +50,7 @@ fn expand(cx: &mut ExtCtxt,
let trait_def = TraitDef {
span: span,
attributes: vec![],
path: Path::new(vec!["TotalSum"]),
path: Path::new_local("TotalSum"),
additional_bounds: vec![],
generics: LifetimeBounds::empty(),
associated_types: vec![],

View file

@ -46,7 +46,7 @@ fn expand(cx: &mut ExtCtxt,
let trait_def = TraitDef {
span: span,
attributes: vec![],
path: Path::new(vec!["TotalSum"]),
path: Path::new_local("TotalSum"),
additional_bounds: vec![],
generics: LifetimeBounds::empty(),
associated_types: vec![],

View file

@ -8,22 +8,22 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(rustc_private)]
#![no_std]
extern crate serialize as rustc_serialize;
#[derive(RustcEncodable)] //~ ERROR this trait cannot be derived
#[derive(RustcEncodable)]
struct Bar {
x: u32,
}
#[derive(RustcDecodable)] //~ ERROR this trait cannot be derived
#[derive(RustcDecodable)]
struct Baz {
x: u32,
}
fn main() {
Foo { x: 0 };
Bar { x: 0 };
Baz { x: 0 };
}