@@ -45,6 +45,7 @@ use syntax::attr;
45
45
use syntax:: attr:: AttrMetaMethods ;
46
46
use syntax:: codemap:: Span ;
47
47
use syntax:: parse:: token;
48
+ use syntax:: parse:: token:: InternedString ;
48
49
use syntax:: { ast, ast_map} ;
49
50
use syntax:: opt_vec:: OptVec ;
50
51
use syntax:: opt_vec;
@@ -2668,8 +2669,13 @@ pub fn node_id_to_trait_ref(cx: ctxt, id: ast::NodeId) -> @ty::TraitRef {
2668
2669
}
2669
2670
}
2670
2671
2672
+ pub fn try_node_id_to_type ( cx : ctxt , id : ast:: NodeId ) -> Option < t > {
2673
+ let node_types = cx. node_types . borrow ( ) ;
2674
+ node_types. get ( ) . find_copy ( & ( id as uint ) )
2675
+ }
2676
+
2671
2677
pub fn node_id_to_type ( cx : ctxt , id : ast:: NodeId ) -> t {
2672
- match node_id_to_type_opt ( cx, id) {
2678
+ match try_node_id_to_type ( cx, id) {
2673
2679
Some ( t) => t,
2674
2680
None => cx. sess . bug (
2675
2681
format ! ( "node_id_to_type: no type for node `{}`" ,
@@ -2883,6 +2889,45 @@ pub fn expr_ty_adjusted(cx: ctxt, expr: &ast::Expr) -> t {
2883
2889
adjust_ty ( cx, expr. span , unadjusted_ty, adjustment)
2884
2890
}
2885
2891
2892
+ pub fn expr_span ( cx : ctxt , id : NodeId ) -> Span {
2893
+ match cx. items . find ( id) {
2894
+ Some ( ast_map:: NodeExpr ( e) ) => {
2895
+ e. span
2896
+ }
2897
+ Some ( f) => {
2898
+ cx. sess . bug ( format ! ( "Node id {} is not an expr: {:?}" ,
2899
+ id, f) ) ;
2900
+ }
2901
+ None => {
2902
+ cx. sess . bug ( format ! ( "Node id {} is not present \
2903
+ in the node map", id) ) ;
2904
+ }
2905
+ }
2906
+ }
2907
+
2908
+ pub fn local_var_name_str ( cx : ctxt , id : NodeId ) -> InternedString {
2909
+ match cx. items . find ( id) {
2910
+ Some ( ast_map:: NodeLocal ( pat) ) => {
2911
+ match pat. node {
2912
+ ast:: PatIdent ( _, ref path, _) => {
2913
+ let ident = ast_util:: path_to_ident ( path) ;
2914
+ token:: get_ident ( ident. name )
2915
+ }
2916
+ _ => {
2917
+ cx. sess . bug (
2918
+ format ! ( "Variable id {} maps to {:?}, not local" ,
2919
+ id, pat) ) ;
2920
+ }
2921
+ }
2922
+ }
2923
+ r => {
2924
+ cx. sess . bug (
2925
+ format ! ( "Variable id {} maps to {:?}, not local" ,
2926
+ id, r) ) ;
2927
+ }
2928
+ }
2929
+ }
2930
+
2886
2931
pub fn adjust_ty ( cx : ctxt ,
2887
2932
span : Span ,
2888
2933
unadjusted_ty : ty:: t ,
0 commit comments