From f9209fcd634fd5fc1fc83387af3b16b7cab62b74 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Mon, 3 Jun 2019 09:21:27 +1000 Subject: Add and use `SyntaxContext::outer_and_expn_info`. This combines two `HygieneData::with` calls into one on a hot path. --- src/libsyntax_pos/hygiene.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/libsyntax_pos') diff --git a/src/libsyntax_pos/hygiene.rs b/src/libsyntax_pos/hygiene.rs index e50b9da62e7..5691258152a 100644 --- a/src/libsyntax_pos/hygiene.rs +++ b/src/libsyntax_pos/hygiene.rs @@ -565,6 +565,16 @@ impl SyntaxContext { HygieneData::with(|data| data.expn_info(data.outer(self))) } + /// `ctxt.outer_and_expn_info()` is equivalent to but faster than + /// `{ let outer = ctxt.outer(); (outer, outer.expn_info()) }`. + #[inline] + pub fn outer_and_expn_info(self) -> (Mark, Option) { + HygieneData::with(|data| { + let outer = data.outer(self); + (outer, data.expn_info(outer)) + }) + } + pub fn dollar_crate_name(self) -> Symbol { HygieneData::with(|data| data.syntax_contexts[self.0 as usize].dollar_crate_name) } -- cgit 1.4.1-3-g733a5