@@ -2,6 +2,7 @@ import std::smallintmap;
2
2
import std:: option;
3
3
import syntax:: ast:: * ;
4
4
import syntax:: visit;
5
+ import syntax:: codemap;
5
6
import visit:: vt;
6
7
7
8
tag ast_node {
@@ -113,6 +114,62 @@ fn new_smallintmap_adapter[@K,
113
114
ret adapter( map, key_idx, idx_key) ;
114
115
}
115
116
117
+ fn node_span ( node : & ast_node ) -> codemap:: span {
118
+ alt node {
119
+ node_item( item) { item. span }
120
+ node_obj_ctor ( item) { item. span }
121
+ node_native_item ( nitem) { nitem. span }
122
+ node_expr ( expr) { expr. span }
123
+ }
124
+ }
125
+
126
+ #[ cfg( test) ]
127
+ mod test {
128
+ #[ test]
129
+ fn test_node_span_item ( ) {
130
+ let expected: codemap:: span = { lo: 20 u, hi: 30 u} ;
131
+ let node = node_item ( @{ ident: "test" ,
132
+ attrs: ~[ ] ,
133
+ id: 0 ,
134
+ node: item_mod ( { view_items: ~[ ] ,
135
+ items: ~[ ] } ) ,
136
+ span: expected} ) ;
137
+ assert node_span( node) == expected;
138
+ }
139
+
140
+ #[ test]
141
+ fn test_node_span_obj_ctor ( ) {
142
+ let expected: codemap:: span = { lo: 20 u, hi: 30 u} ;
143
+ let node = node_obj_ctor ( @{ ident: "test" ,
144
+ attrs: ~[ ] ,
145
+ id: 0 ,
146
+ node: item_mod ( { view_items: ~[ ] ,
147
+ items: ~[ ] } ) ,
148
+ span: expected} ) ;
149
+ assert node_span( node) == expected;
150
+ }
151
+
152
+ #[ test]
153
+ fn test_node_span_native_item ( ) {
154
+ let expected: codemap:: span = { lo: 20 u, hi: 30 u} ;
155
+ let node = node_native_item ( @{ ident: "test" ,
156
+ attrs: ~[ ] ,
157
+ node: native_item_ty,
158
+ id: 0 ,
159
+ span: expected} ) ;
160
+ assert node_span( node) == expected;
161
+ }
162
+
163
+ #[ test]
164
+ fn test_node_span_expr ( ) {
165
+ let expected: codemap:: span = { lo: 20 u, hi: 30 u} ;
166
+ let node = node_expr ( @{ id: 0 ,
167
+ node: expr_break,
168
+ span: expected} ) ;
169
+ assert node_span( node) == expected;
170
+ }
171
+ }
172
+
116
173
// Local Variables:
117
174
// mode: rust
118
175
// fill-column: 78;
0 commit comments