about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorPaul Stansifer <paul.stansifer@gmail.com>2012-08-23 11:47:35 -0700
committerPaul Stansifer <paul.stansifer@gmail.com>2012-08-23 11:47:35 -0700
commit129c4b694b753ed3dbe67d5e2787e0ede01263e9 (patch)
tree31b3058a2ea33d673571b71dc39ee06842c05227 /src/libsyntax
parent89bbaff84fed6e6796c82f5a9fd200e693d47beb (diff)
Give a special error message when [de]serializing fails because the interner isn't in TLS yet.
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ast.rs14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index ae20573802b..19b7e532bc2 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -31,14 +31,20 @@ fn deserialize_span<D>(_d: D) -> span {
 type spanned<T> = {node: T, span: span};
 
 fn serialize_ident<S: serializer>(s: S, i: ident) {
-    let intr = unsafe{ task::local_data_get(parse::token::interner_key) };
+    let intr = match unsafe{task::local_data_get(parse::token::interner_key)}{
+        none => fail ~"serialization: TLS interner not set up",
+        some(intr) => intr
+    };
 
-    s.emit_str(*(*intr.get()).get(i));
+    s.emit_str(*(*intr).get(i));
 }
 fn deserialize_ident<D: deserializer>(d: D) -> ident  {
-    let intr = unsafe{ task::local_data_get(parse::token::interner_key) };
+    let intr = match unsafe{task::local_data_get(parse::token::interner_key)}{
+        none => fail ~"deserialization: TLS interner not set up",
+        some(intr) => intr
+    };
 
-    (*intr.get()).intern(@d.read_str())
+    (*intr).intern(@d.read_str())
 }
 
 type ident = token::str_num;