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;