about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-12-27 13:14:21 -0800
committerPatrick Walton <pcwalton@mimiga.net>2014-01-03 14:01:57 -0800
commit3810bea0da90b49c23f004e0b08277bb88404d85 (patch)
tree1b9c190d3c2cd5a3aaacbca1a1e30c9342e1ecf7 /src/libsyntax
parent185608754d9418c226ca1a8c8889042046c25c63 (diff)
downloadrust-3810bea0da90b49c23f004e0b08277bb88404d85.tar.gz
rust-3810bea0da90b49c23f004e0b08277bb88404d85.zip
libsyntax: De-`@mut` `TtReader::interpolations`
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/tt/transcribe.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs
index cbce5fb16cb..bcede5a7dc5 100644
--- a/src/libsyntax/ext/tt/transcribe.rs
+++ b/src/libsyntax/ext/tt/transcribe.rs
@@ -17,6 +17,7 @@ use parse::token::{EOF, INTERPOLATED, IDENT, Token, nt_ident};
 use parse::token::{ident_to_str};
 use parse::lexer::TokenAndSpan;
 
+use std::cell::RefCell;
 use std::hashmap::HashMap;
 use std::option;
 
@@ -34,7 +35,7 @@ pub struct TtReader {
     // the unzipped tree:
     stack: @mut TtFrame,
     /* for MBE-style macro transcription */
-    interpolations: HashMap<Ident, @named_match>,
+    priv interpolations: RefCell<HashMap<Ident, @named_match>>,
     repeat_idx: ~[uint],
     repeat_len: ~[uint],
     /* cached: */
@@ -59,8 +60,8 @@ pub fn new_tt_reader(sp_diag: @mut SpanHandler,
             up: option::None
         },
         interpolations: match interp { /* just a convienience */
-            None => HashMap::new(),
-            Some(x) => x
+            None => RefCell::new(HashMap::new()),
+            Some(x) => RefCell::new(x),
         },
         repeat_idx: ~[],
         repeat_len: ~[],
@@ -114,7 +115,11 @@ fn lookup_cur_matched_by_matched(r: &mut TtReader,
 }
 
 fn lookup_cur_matched(r: &mut TtReader, name: Ident) -> @named_match {
-    match r.interpolations.find_copy(&name) {
+    let matched_opt = {
+        let interpolations = r.interpolations.borrow();
+        interpolations.get().find_copy(&name)
+    };
+    match matched_opt {
         Some(s) => lookup_cur_matched_by_matched(r, s),
         None => {
             r.sp_diag.span_fatal(r.cur_span, format!("unknown macro variable `{}`",