ty -- minor refactorings, helper methods

This commit is contained in:
Niko Matsakis 2014-02-07 14:42:48 -05:00
parent 0e005ab848
commit f7e5d8418c

View File

@ -45,6 +45,7 @@ use syntax::attr;
use syntax::attr::AttrMetaMethods;
use syntax::codemap::Span;
use syntax::parse::token;
use syntax::parse::token::InternedString;
use syntax::{ast, ast_map};
use syntax::opt_vec::OptVec;
use syntax::opt_vec;
@ -2668,8 +2669,13 @@ pub fn node_id_to_trait_ref(cx: ctxt, id: ast::NodeId) -> @ty::TraitRef {
}
}
pub fn try_node_id_to_type(cx: ctxt, id: ast::NodeId) -> Option<t> {
let node_types = cx.node_types.borrow();
node_types.get().find_copy(&(id as uint))
}
pub fn node_id_to_type(cx: ctxt, id: ast::NodeId) -> t {
match node_id_to_type_opt(cx, id) {
match try_node_id_to_type(cx, id) {
Some(t) => t,
None => cx.sess.bug(
format!("node_id_to_type: no type for node `{}`",
@ -2883,6 +2889,45 @@ pub fn expr_ty_adjusted(cx: ctxt, expr: &ast::Expr) -> t {
adjust_ty(cx, expr.span, unadjusted_ty, adjustment)
}
pub fn expr_span(cx: ctxt, id: NodeId) -> Span {
match cx.items.find(id) {
Some(ast_map::NodeExpr(e)) => {
e.span
}
Some(f) => {
cx.sess.bug(format!("Node id {} is not an expr: {:?}",
id, f));
}
None => {
cx.sess.bug(format!("Node id {} is not present \
in the node map", id));
}
}
}
pub fn local_var_name_str(cx: ctxt, id: NodeId) -> InternedString {
match cx.items.find(id) {
Some(ast_map::NodeLocal(pat)) => {
match pat.node {
ast::PatIdent(_, ref path, _) => {
let ident = ast_util::path_to_ident(path);
token::get_ident(ident.name)
}
_ => {
cx.sess.bug(
format!("Variable id {} maps to {:?}, not local",
id, pat));
}
}
}
r => {
cx.sess.bug(
format!("Variable id {} maps to {:?}, not local",
id, r));
}
}
}
pub fn adjust_ty(cx: ctxt,
span: Span,
unadjusted_ty: ty::t,