@@ -45,6 +45,7 @@ use syntax::attr;
4545use syntax:: attr:: AttrMetaMethods ;
4646use syntax:: codemap:: Span ;
4747use syntax:: parse:: token;
48+ use syntax:: parse:: token:: InternedString ;
4849use syntax:: { ast, ast_map} ;
4950use syntax:: opt_vec:: OptVec ;
5051use syntax:: opt_vec;
@@ -2668,8 +2669,13 @@ pub fn node_id_to_trait_ref(cx: ctxt, id: ast::NodeId) -> @ty::TraitRef {
26682669 }
26692670}
26702671
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+
26712677pub 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) {
26732679 Some ( t) => t,
26742680 None => cx. sess . bug (
26752681 format ! ( "node_id_to_type: no type for node `{}`" ,
@@ -2883,6 +2889,45 @@ pub fn expr_ty_adjusted(cx: ctxt, expr: &ast::Expr) -> t {
28832889 adjust_ty ( cx, expr. span , unadjusted_ty, adjustment)
28842890}
28852891
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+
28862931pub fn adjust_ty ( cx : ctxt ,
28872932 span : Span ,
28882933 unadjusted_ty : ty:: t ,
0 commit comments