about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorEdward Z. Yang <ezyang@cs.stanford.edu>2013-12-19 14:41:59 +0800
committerEdward Z. Yang <ezyang@cs.stanford.edu>2013-12-19 19:58:08 +0800
commit6ad1c8e044ff4447b130ea023ba0ff5880567677 (patch)
treee3cec09103e0a4b3148df4b4ba55cddcc3e7d4d1 /src/libsyntax
parentdc65762d7923a9e66e8e5d743cb8b2d2fdd3cde5 (diff)
downloadrust-6ad1c8e044ff4447b130ea023ba0ff5880567677.tar.gz
rust-6ad1c8e044ff4447b130ea023ba0ff5880567677.zip
Generalize item_span into node_span, which works on more types.
Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ast_map.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/libsyntax/ast_map.rs b/src/libsyntax/ast_map.rs
index 961d8170fd3..63e8251b22c 100644
--- a/src/libsyntax/ast_map.rs
+++ b/src/libsyntax/ast_map.rs
@@ -490,14 +490,23 @@ pub fn node_item_query<Result>(items: map, id: NodeId, query: |@item| -> Result,
     }
 }
 
-pub fn item_span(items: map,
+pub fn node_span(items: map,
                  id: ast::NodeId)
                  -> Span {
     match items.find(&id) {
         Some(&node_item(item, _)) => item.span,
-        r => {
-            fail!(format!("item_span: expected item with id {} but found {:?}",
-                           id, r))
-        }
+        Some(&node_foreign_item(foreign_item, _, _, _)) => foreign_item.span,
+        Some(&node_trait_method(@required(ref type_method), _, _)) => type_method.span,
+        Some(&node_trait_method(@provided(ref method), _, _)) => method.span,
+        Some(&node_method(method, _, _)) => method.span,
+        Some(&node_variant(variant, _, _)) => variant.span,
+        Some(&node_expr(expr)) => expr.span,
+        Some(&node_stmt(stmt)) => stmt.span,
+        Some(&node_arg(pat)) => pat.span,
+        Some(&node_local(_)) => fail!("node_span: cannot get span from node_local"),
+        Some(&node_block(block)) => block.span,
+        Some(&node_struct_ctor(_, item, _)) => item.span,
+        Some(&node_callee_scope(expr)) => expr.span,
+        None => fail!("node_span: could not find id {}", id),
     }
 }