about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2011-08-10 21:43:36 -0700
committerBrian Anderson <banderson@mozilla.com>2011-08-11 10:09:02 -0700
commit612fe3d2d6fa0dcb3d92a0d83ec7f2418dd8c7ce (patch)
tree63e8c2a1b5ddc10f2791c9c40ff7f218a2d81e84
parent14b3ad194ac80ec0bb4e6f570113bf15db587449 (diff)
downloadrust-612fe3d2d6fa0dcb3d92a0d83ec7f2418dd8c7ce.tar.gz
rust-612fe3d2d6fa0dcb3d92a0d83ec7f2418dd8c7ce.zip
Add ast_map::node_span function
-rw-r--r--src/comp/middle/ast_map.rs57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/comp/middle/ast_map.rs b/src/comp/middle/ast_map.rs
index 33662996530..549e651d4a6 100644
--- a/src/comp/middle/ast_map.rs
+++ b/src/comp/middle/ast_map.rs
@@ -2,6 +2,7 @@ import std::smallintmap;
 import std::option;
 import syntax::ast::*;
 import syntax::visit;
+import syntax::codemap;
 import visit::vt;
 
 tag ast_node {
@@ -113,6 +114,62 @@ fn new_smallintmap_adapter[@K,
     ret adapter(map, key_idx, idx_key);
 }
 
+fn node_span(node: &ast_node) -> codemap::span {
+    alt node {
+      node_item(item) { item.span }
+      node_obj_ctor(item) { item.span }
+      node_native_item(nitem) { nitem.span }
+      node_expr(expr) { expr.span }
+    }
+}
+
+#[cfg(test)]
+mod test {
+    #[test]
+    fn test_node_span_item() {
+        let expected: codemap::span = {lo: 20u, hi: 30u};
+        let node = node_item(@{ident: "test",
+                               attrs: ~[],
+                               id: 0,
+                               node: item_mod({view_items: ~[],
+                                               items: ~[]}),
+                               span: expected});
+        assert node_span(node) == expected;
+    }
+
+    #[test]
+    fn test_node_span_obj_ctor() {
+        let expected: codemap::span = {lo: 20u, hi: 30u};
+        let node = node_obj_ctor(@{ident: "test",
+                                   attrs: ~[],
+                                   id: 0,
+                                   node: item_mod({view_items: ~[],
+                                                   items: ~[]}),
+                                   span: expected});
+        assert node_span(node) == expected;
+    }
+
+    #[test]
+    fn test_node_span_native_item() {
+        let expected: codemap::span = {lo: 20u, hi: 30u};
+        let node = node_native_item(@{ident: "test",
+                                      attrs: ~[],
+                                      node: native_item_ty,
+                                      id: 0,
+                                      span: expected});
+        assert node_span(node) == expected;
+    }
+
+    #[test]
+    fn test_node_span_expr() {
+        let expected: codemap::span = {lo: 20u, hi: 30u};
+        let node = node_expr(@{id: 0,
+                               node: expr_break,
+                               span: expected});
+        assert node_span(node) == expected;
+    }
+}
+
 // Local Variables:
 // mode: rust
 // fill-column: 78;