diff options
| author | bors <bors@rust-lang.org> | 2019-09-15 08:17:57 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-09-15 08:17:57 +0000 |
| commit | 117cdf35d46cb4dbb246e300a492c860a86233be (patch) | |
| tree | 109e3227f1b4076c99874c94dc9aa1d554781f2b /src/libsyntax | |
| parent | 8bf776d5c2fc88624d2562e493aab0d324a3b7d8 (diff) | |
| parent | 8ab67c8f560a730b8978f4a42deb70d01ca1cdfc (diff) | |
| download | rust-117cdf35d46cb4dbb246e300a492c860a86233be.tar.gz rust-117cdf35d46cb4dbb246e300a492c860a86233be.zip | |
Auto merge of #64469 - matthewjasper:increase-hygiene-use, r=petrochenkov
Cleanup handling of hygiene for built-in macros
This makes most identifiers generated by built-in macros use def-site hygiene, not only the ones that previously used gensyms.
* `ExtCtxt::ident_of` now takes a `Span` and is preferred to `Ident::{from_str, from_str_and_span}`
* Remove `Span::with_legacy_ctxt`
* `assert` now uses call-site hygiene because it needs to resolve `panic` unhygienically.
* `concat_idents` now uses call-site hygiene because it wouldn't be very useful with def-site hygiene.
* everything else is moved to def-site hygiene
r? @petrochenkov
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ext/base.rs | 11 | ||||
| -rw-r--r-- | src/libsyntax/ext/build.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser/item.rs | 2 |
3 files changed, 5 insertions, 12 deletions
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 7759a985d61..384c0555c85 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -977,13 +977,6 @@ impl<'a> ExtCtxt<'a> { span.with_call_site_ctxt(self.current_expansion.id) } - /// Span with a context reproducing `macro_rules` hygiene (hygienic locals, unhygienic items). - /// FIXME: This should be eventually replaced either with `with_def_site_ctxt` (preferably), - /// or with `with_call_site_ctxt` (where necessary). - pub fn with_legacy_ctxt(&self, span: Span) -> Span { - span.with_legacy_ctxt(self.current_expansion.id) - } - /// Returns span for the macro which originally caused the current expansion to happen. /// /// Stops backtracing at include! boundary. @@ -1081,8 +1074,8 @@ impl<'a> ExtCtxt<'a> { pub fn set_trace_macros(&mut self, x: bool) { self.ecfg.trace_mac = x } - pub fn ident_of(&self, st: &str) -> ast::Ident { - ast::Ident::from_str(st) + pub fn ident_of(&self, st: &str, sp: Span) -> ast::Ident { + ast::Ident::from_str_and_span(st, sp) } pub fn std_path(&self, components: &[Symbol]) -> Vec<ast::Ident> { let def_site = self.with_def_site_ctxt(DUMMY_SP); diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 06a55316f31..f1d0e0b68f7 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -363,7 +363,7 @@ impl<'a> ExtCtxt<'a> { self.expr(sp, ast::ExprKind::Field(expr, ident.with_span_pos(sp))) } pub fn expr_tup_field_access(&self, sp: Span, expr: P<ast::Expr>, idx: usize) -> P<ast::Expr> { - let ident = Ident::from_str(&idx.to_string()).with_span_pos(sp); + let ident = Ident::new(sym::integer(idx), sp); self.expr(sp, ast::ExprKind::Field(expr, ident)) } pub fn expr_addr_of(&self, sp: Span, e: P<ast::Expr>) -> P<ast::Expr> { @@ -525,7 +525,7 @@ impl<'a> ExtCtxt<'a> { let err = self.std_path(&[sym::result, sym::Result, sym::Err]); let err_path = self.path_global(sp, err); - let binding_variable = self.ident_of("__try_var"); + let binding_variable = self.ident_of("__try_var", sp); let binding_pat = self.pat_ident(sp, binding_variable); let binding_expr = self.expr_ident(sp, binding_variable); diff --git a/src/libsyntax/parse/parser/item.rs b/src/libsyntax/parse/parser/item.rs index baae6155f34..cf196645e4f 100644 --- a/src/libsyntax/parse/parser/item.rs +++ b/src/libsyntax/parse/parser/item.rs @@ -1256,7 +1256,7 @@ impl<'a> Parser<'a> { for part in idents { fixed_name.push_str(&format!("_{}", part.name)); } - ident = Ident::from_str(&fixed_name).with_span_pos(fixed_name_sp); + ident = Ident::from_str_and_span(&fixed_name, fixed_name_sp); self.struct_span_err(fixed_name_sp, error_msg) .span_label(fixed_name_sp, "dash-separated idents are not valid") |
