about summary refs log tree commit diff
path: root/src/rustc/metadata
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2012-04-20 16:56:19 -0700
committerGraydon Hoare <graydon@mozilla.com>2012-04-20 17:18:42 -0700
commit355422ddbd3fb9c44374059696f8111f9501ba10 (patch)
tree1629f1f7bbe9fe1f8f82b2ba90339c44278f1dec /src/rustc/metadata
parentda130598143841a726ac7818d65e1b6717cdebd9 (diff)
downloadrust-355422ddbd3fb9c44374059696f8111f9501ba10.tar.gz
rust-355422ddbd3fb9c44374059696f8111f9501ba10.zip
Implement tydecode::parse_vstore.
Diffstat (limited to 'src/rustc/metadata')
-rw-r--r--src/rustc/metadata/tydecode.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/rustc/metadata/tydecode.rs b/src/rustc/metadata/tydecode.rs
index 139840f5616..c9b69f4df14 100644
--- a/src/rustc/metadata/tydecode.rs
+++ b/src/rustc/metadata/tydecode.rs
@@ -179,7 +179,20 @@ fn parse_proto(c: char) -> ast::proto {
 }
 
 fn parse_vstore(st: @pstate) -> ty::vstore {
-    st.tcx.sess.unimpl("tydecode::parse_vstore");
+    assert next(st) == '/';
+
+    let c = peek(st);
+    if '0' <= c && c <= '9' {
+        let n = parse_int(st) as uint;
+        assert next(st) == '|';
+        ret ty::vstore_fixed(n);
+    }
+
+    alt check next(st) {
+      '~' { ty::vstore_uniq }
+      '@' { ty::vstore_box }
+      '&' { ty::vstore_slice(parse_region(st)) }
+    }
 }
 
 fn parse_substs(st: @pstate, conv: conv_did) -> ty::substs {