about summary refs log tree commit diff
path: root/src/libserialize
diff options
context:
space:
mode:
Diffstat (limited to 'src/libserialize')
-rw-r--r--src/libserialize/json.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs
index 096c72e6af2..abbfc82319f 100644
--- a/src/libserialize/json.rs
+++ b/src/libserialize/json.rs
@@ -1218,6 +1218,7 @@ impl Json {
     }
 }
 
+#[cfg(stage0)]
 impl<'a> Index<&'a str>  for Json {
     type Output = Json;
 
@@ -1226,6 +1227,16 @@ impl<'a> Index<&'a str>  for Json {
     }
 }
 
+#[cfg(not(stage0))]
+impl<'a> Index<&'a str>  for Json {
+    type Output = Json;
+
+    fn index(&self, idx: &'a str) -> &Json {
+        self.find(idx).unwrap()
+    }
+}
+
+#[cfg(stage0)]
 impl Index<uint> for Json {
     type Output = Json;
 
@@ -1237,6 +1248,18 @@ impl Index<uint> for Json {
     }
 }
 
+#[cfg(not(stage0))]
+impl Index<uint> for Json {
+    type Output = Json;
+
+    fn index<'a>(&'a self, idx: uint) -> &'a Json {
+        match self {
+            &Json::Array(ref v) => &v[idx],
+            _ => panic!("can only index Json with uint if it is an array")
+        }
+    }
+}
+
 /// The output of the streaming parser.
 #[derive(PartialEq, Clone, Debug)]
 pub enum JsonEvent {