Modernized a few more types in syntax::ast

This commit is contained in:
Marvin Löbel 2013-09-02 03:45:37 +02:00
parent 58decdd7a1
commit 7419085337
114 changed files with 3795 additions and 3790 deletions

View file

@ -116,12 +116,12 @@ fn fold_item_underscore(cx: @Context, item: &ast::item_,
fold::noop_fold_item_underscore(&item, fld)
}
fn filter_stmt(cx: @Context, stmt: @ast::stmt) ->
Option<@ast::stmt> {
fn filter_stmt(cx: @Context, stmt: @ast::Stmt) ->
Option<@ast::Stmt> {
match stmt.node {
ast::stmt_decl(decl, _) => {
ast::StmtDecl(decl, _) => {
match decl.node {
ast::decl_item(item) => {
ast::DeclItem(item) => {
if item_in_cfg(cx, item) {
option::Some(stmt)
} else { option::None }

View file

@ -441,7 +441,7 @@ fn is_extra(cx: &TestCtxt) -> bool {
}
}
fn mk_test_descs(cx: &TestCtxt) -> @ast::expr {
fn mk_test_descs(cx: &TestCtxt) -> @ast::Expr {
debug!("building test vector from %u tests", cx.testfns.len());
let mut descs = ~[];
for test in cx.testfns.iter() {
@ -449,21 +449,21 @@ fn mk_test_descs(cx: &TestCtxt) -> @ast::expr {
}
let sess = cx.sess;
let inner_expr = @ast::expr {
let inner_expr = @ast::Expr {
id: sess.next_node_id(),
node: ast::expr_vec(descs, ast::m_imm),
node: ast::ExprVec(descs, ast::MutImmutable),
span: dummy_sp(),
};
@ast::expr {
@ast::Expr {
id: sess.next_node_id(),
node: ast::expr_vstore(inner_expr, ast::expr_vstore_slice),
node: ast::ExprVstore(inner_expr, ast::ExprVstoreSlice),
span: dummy_sp(),
}
}
#[cfg(stage0)]
fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> @ast::expr {
fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> @ast::Expr {
let span = test.span;
let path = test.path.clone();
@ -474,17 +474,17 @@ fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> @ast::expr {
let name_lit: ast::lit =
nospan(ast::lit_str(ast_util::path_name_i(path).to_managed()));
let name_expr = @ast::expr {
let name_expr = @ast::Expr {
id: cx.sess.next_node_id(),
node: ast::expr_lit(@name_lit),
node: ast::ExprLit(@name_lit),
span: span
};
let fn_path = path_node_global(path);
let fn_expr = @ast::expr {
let fn_expr = @ast::Expr {
id: cx.sess.next_node_id(),
node: ast::expr_path(fn_path),
node: ast::ExprPath(fn_path),
span: span,
};
@ -519,7 +519,7 @@ fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> @ast::expr {
e
}
#[cfg(not(stage0))]
fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> @ast::expr {
fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> @ast::Expr {
let span = test.span;
let path = test.path.clone();
@ -528,17 +528,17 @@ fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> @ast::expr {
let name_lit: ast::lit =
nospan(ast::lit_str(ast_util::path_name_i(path).to_managed()));
let name_expr = @ast::expr {
let name_expr = @ast::Expr {
id: cx.sess.next_node_id(),
node: ast::expr_lit(@name_lit),
node: ast::ExprLit(@name_lit),
span: span
};
let fn_path = path_node_global(path);
let fn_expr = @ast::expr {
let fn_expr = @ast::Expr {
id: cx.sess.next_node_id(),
node: ast::expr_path(fn_path),
node: ast::ExprPath(fn_path),
span: span,
};

View file

@ -26,16 +26,16 @@ use syntax::diagnostic::expect;
pub struct StaticMethodInfo {
ident: ast::Ident,
def_id: ast::def_id,
def_id: ast::DefId,
purity: ast::purity
}
pub fn get_symbol(cstore: @mut cstore::CStore, def: ast::def_id) -> ~str {
pub fn get_symbol(cstore: @mut cstore::CStore, def: ast::DefId) -> ~str {
let cdata = cstore::get_crate_data(cstore, def.crate).data;
return decoder::get_symbol(cdata, def.node);
}
pub fn get_type_param_count(cstore: @mut cstore::CStore, def: ast::def_id)
pub fn get_type_param_count(cstore: @mut cstore::CStore, def: ast::DefId)
-> uint {
let cdata = cstore::get_crate_data(cstore, def.crate).data;
return decoder::get_type_param_count(cdata, def.node);
@ -51,7 +51,7 @@ pub fn each_lang_item(cstore: @mut cstore::CStore,
/// Iterates over each child of the given item.
pub fn each_child_of_item(cstore: @mut cstore::CStore,
def_id: ast::def_id,
def_id: ast::DefId,
callback: &fn(decoder::DefLike, ast::Ident)) {
let crate_data = cstore::get_crate_data(cstore, def_id.crate);
let get_crate_data: decoder::GetCrateDataCb = |cnum| {
@ -79,7 +79,7 @@ pub fn each_top_level_item_of_crate(cstore: @mut cstore::CStore,
callback)
}
pub fn get_item_path(tcx: ty::ctxt, def: ast::def_id) -> ast_map::path {
pub fn get_item_path(tcx: ty::ctxt, def: ast::DefId) -> ast_map::path {
let cstore = tcx.cstore;
let cdata = cstore::get_crate_data(cstore, def.crate);
let path = decoder::get_item_path(cdata, def.node);
@ -92,14 +92,14 @@ pub fn get_item_path(tcx: ty::ctxt, def: ast::def_id) -> ast_map::path {
pub enum found_ast {
found(ast::inlined_item),
found_parent(ast::def_id, ast::inlined_item),
found_parent(ast::DefId, ast::inlined_item),
not_found,
}
// Finds the AST for this item in the crate metadata, if any. If the item was
// not marked for inlining, then the AST will not be present and hence none
// will be returned.
pub fn maybe_get_item_ast(tcx: ty::ctxt, def: ast::def_id,
pub fn maybe_get_item_ast(tcx: ty::ctxt, def: ast::DefId,
decode_inlined_item: decoder::decode_inlined_item)
-> found_ast {
let cstore = tcx.cstore;
@ -108,7 +108,7 @@ pub fn maybe_get_item_ast(tcx: ty::ctxt, def: ast::def_id,
decode_inlined_item)
}
pub fn get_enum_variants(tcx: ty::ctxt, def: ast::def_id)
pub fn get_enum_variants(tcx: ty::ctxt, def: ast::DefId)
-> ~[@ty::VariantInfo] {
let cstore = tcx.cstore;
let cdata = cstore::get_crate_data(cstore, def.crate);
@ -116,19 +116,19 @@ pub fn get_enum_variants(tcx: ty::ctxt, def: ast::def_id)
}
/// Returns information about the given implementation.
pub fn get_impl(tcx: ty::ctxt, impl_def_id: ast::def_id)
pub fn get_impl(tcx: ty::ctxt, impl_def_id: ast::DefId)
-> ty::Impl {
let cdata = cstore::get_crate_data(tcx.cstore, impl_def_id.crate);
decoder::get_impl(tcx.cstore.intr, cdata, impl_def_id.node, tcx)
}
pub fn get_method(tcx: ty::ctxt, def: ast::def_id) -> ty::Method {
pub fn get_method(tcx: ty::ctxt, def: ast::DefId) -> ty::Method {
let cdata = cstore::get_crate_data(tcx.cstore, def.crate);
decoder::get_method(tcx.cstore.intr, cdata, def.node, tcx)
}
pub fn get_method_name_and_explicit_self(cstore: @mut cstore::CStore,
def: ast::def_id)
def: ast::DefId)
-> (ast::Ident, ast::explicit_self_)
{
let cdata = cstore::get_crate_data(cstore, def.crate);
@ -136,74 +136,74 @@ pub fn get_method_name_and_explicit_self(cstore: @mut cstore::CStore,
}
pub fn get_trait_method_def_ids(cstore: @mut cstore::CStore,
def: ast::def_id) -> ~[ast::def_id] {
def: ast::DefId) -> ~[ast::DefId] {
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_trait_method_def_ids(cdata, def.node)
}
pub fn get_provided_trait_methods(tcx: ty::ctxt,
def: ast::def_id)
def: ast::DefId)
-> ~[@ty::Method] {
let cstore = tcx.cstore;
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_provided_trait_methods(cstore.intr, cdata, def.node, tcx)
}
pub fn get_supertraits(tcx: ty::ctxt, def: ast::def_id) -> ~[@ty::TraitRef] {
pub fn get_supertraits(tcx: ty::ctxt, def: ast::DefId) -> ~[@ty::TraitRef] {
let cstore = tcx.cstore;
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_supertraits(cdata, def.node, tcx)
}
pub fn get_type_name_if_impl(cstore: @mut cstore::CStore, def: ast::def_id)
pub fn get_type_name_if_impl(cstore: @mut cstore::CStore, def: ast::DefId)
-> Option<ast::Ident> {
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_type_name_if_impl(cdata, def.node)
}
pub fn get_static_methods_if_impl(cstore: @mut cstore::CStore,
def: ast::def_id)
def: ast::DefId)
-> Option<~[StaticMethodInfo]> {
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_static_methods_if_impl(cstore.intr, cdata, def.node)
}
pub fn get_item_attrs(cstore: @mut cstore::CStore,
def_id: ast::def_id,
def_id: ast::DefId,
f: &fn(~[@ast::MetaItem])) {
let cdata = cstore::get_crate_data(cstore, def_id.crate);
decoder::get_item_attrs(cdata, def_id.node, f)
}
pub fn get_struct_fields(cstore: @mut cstore::CStore,
def: ast::def_id)
def: ast::DefId)
-> ~[ty::field_ty] {
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_struct_fields(cstore.intr, cdata, def.node)
}
pub fn get_type(tcx: ty::ctxt,
def: ast::def_id)
def: ast::DefId)
-> ty::ty_param_bounds_and_ty {
let cstore = tcx.cstore;
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_type(cdata, def.node, tcx)
}
pub fn get_trait_def(tcx: ty::ctxt, def: ast::def_id) -> ty::TraitDef {
pub fn get_trait_def(tcx: ty::ctxt, def: ast::DefId) -> ty::TraitDef {
let cstore = tcx.cstore;
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_trait_def(cdata, def.node, tcx)
}
pub fn get_region_param(cstore: @mut metadata::cstore::CStore,
def: ast::def_id) -> Option<ty::region_variance> {
def: ast::DefId) -> Option<ty::region_variance> {
let cdata = cstore::get_crate_data(cstore, def.crate);
return decoder::get_region_param(cdata, def.node);
}
pub fn get_field_type(tcx: ty::ctxt, class_id: ast::def_id,
def: ast::def_id) -> ty::ty_param_bounds_and_ty {
pub fn get_field_type(tcx: ty::ctxt, class_id: ast::DefId,
def: ast::DefId) -> ty::ty_param_bounds_and_ty {
let cstore = tcx.cstore;
let cdata = cstore::get_crate_data(cstore, class_id.crate);
let all_items = reader::get_doc(reader::Doc(cdata.data), tag_items);
@ -229,7 +229,7 @@ pub fn get_field_type(tcx: ty::ctxt, class_id: ast::def_id,
// Given a def_id for an impl, return the trait it implements,
// if there is one.
pub fn get_impl_trait(tcx: ty::ctxt,
def: ast::def_id) -> Option<@ty::TraitRef> {
def: ast::DefId) -> Option<@ty::TraitRef> {
let cstore = tcx.cstore;
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_impl_trait(cdata, def.node, tcx)
@ -237,22 +237,22 @@ pub fn get_impl_trait(tcx: ty::ctxt,
// Given a def_id for an impl, return information about its vtables
pub fn get_impl_vtables(tcx: ty::ctxt,
def: ast::def_id) -> typeck::impl_res {
def: ast::DefId) -> typeck::impl_res {
let cstore = tcx.cstore;
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_impl_vtables(cdata, def.node, tcx)
}
pub fn get_impl_method(cstore: @mut cstore::CStore,
def: ast::def_id,
def: ast::DefId,
mname: ast::Ident)
-> Option<ast::def_id> {
-> Option<ast::DefId> {
let cdata = cstore::get_crate_data(cstore, def.crate);
decoder::get_impl_method(cstore.intr, cdata, def.node, mname)
}
pub fn get_item_visibility(cstore: @mut cstore::CStore,
def_id: ast::def_id)
def_id: ast::DefId)
-> ast::visibility {
let cdata = cstore::get_crate_data(cstore, def_id.crate);
decoder::get_item_visibility(cdata, def_id.node)
@ -267,21 +267,21 @@ pub fn get_link_args_for_crate(cstore: @mut cstore::CStore,
pub fn each_impl(cstore: @mut cstore::CStore,
crate_num: ast::CrateNum,
callback: &fn(ast::def_id)) {
callback: &fn(ast::DefId)) {
let cdata = cstore::get_crate_data(cstore, crate_num);
decoder::each_impl(cdata, callback)
}
pub fn each_implementation_for_type(cstore: @mut cstore::CStore,
def_id: ast::def_id,
callback: &fn(ast::def_id)) {
def_id: ast::DefId,
callback: &fn(ast::DefId)) {
let cdata = cstore::get_crate_data(cstore, def_id.crate);
decoder::each_implementation_for_type(cdata, def_id.node, callback)
}
pub fn each_implementation_for_trait(cstore: @mut cstore::CStore,
def_id: ast::def_id,
callback: &fn(ast::def_id)) {
def_id: ast::DefId,
callback: &fn(ast::DefId)) {
let cdata = cstore::get_crate_data(cstore, def_id.crate);
decoder::each_implementation_for_trait(cdata, def_id.node, callback)
}
@ -290,9 +290,9 @@ pub fn each_implementation_for_trait(cstore: @mut cstore::CStore,
/// default method or an implementation of a trait method), returns the ID of
/// the trait that the method belongs to. Otherwise, returns `None`.
pub fn get_trait_of_method(cstore: @mut cstore::CStore,
def_id: ast::def_id,
def_id: ast::DefId,
tcx: ty::ctxt)
-> Option<ast::def_id> {
-> Option<ast::DefId> {
let cdata = cstore::get_crate_data(cstore, def_id.crate);
decoder::get_trait_of_method(cdata, def_id.node, tcx)
}

View file

@ -177,7 +177,7 @@ fn item_symbol(item: ebml::Doc) -> ~str {
reader::get_doc(item, tag_items_data_item_symbol).as_str()
}
fn item_parent_item(d: ebml::Doc) -> Option<ast::def_id> {
fn item_parent_item(d: ebml::Doc) -> Option<ast::DefId> {
let mut ret = None;
do reader::tagged_docs(d, tag_items_data_parent_item) |did| {
ret = Some(reader::with_doc_data(did, parse_def_id));
@ -187,17 +187,17 @@ fn item_parent_item(d: ebml::Doc) -> Option<ast::def_id> {
}
fn item_reqd_and_translated_parent_item(cnum: ast::CrateNum,
d: ebml::Doc) -> ast::def_id {
d: ebml::Doc) -> ast::DefId {
let trait_did = item_parent_item(d).expect("item without parent");
ast::def_id { crate: cnum, node: trait_did.node }
ast::DefId { crate: cnum, node: trait_did.node }
}
fn item_def_id(d: ebml::Doc, cdata: Cmd) -> ast::def_id {
fn item_def_id(d: ebml::Doc, cdata: Cmd) -> ast::DefId {
let tagdoc = reader::get_doc(d, tag_def_id);
return translate_def_id(cdata, reader::with_doc_data(tagdoc, parse_def_id));
}
fn get_provided_source(d: ebml::Doc, cdata: Cmd) -> Option<ast::def_id> {
fn get_provided_source(d: ebml::Doc, cdata: Cmd) -> Option<ast::DefId> {
do reader::maybe_get_doc(d, tag_item_method_provided_source).map_move |doc| {
translate_def_id(cdata, reader::with_doc_data(doc, parse_def_id))
}
@ -235,7 +235,7 @@ fn doc_transformed_self_ty(doc: ebml::Doc,
}
}
pub fn item_type(_item_id: ast::def_id, item: ebml::Doc,
pub fn item_type(_item_id: ast::DefId, item: ebml::Doc,
tcx: ty::ctxt, cdata: Cmd) -> ty::t {
doc_type(item, tcx, cdata)
}
@ -278,12 +278,12 @@ fn item_ty_param_count(item: ebml::Doc) -> uint {
n
}
fn enum_variant_ids(item: ebml::Doc, cdata: Cmd) -> ~[ast::def_id] {
let mut ids: ~[ast::def_id] = ~[];
fn enum_variant_ids(item: ebml::Doc, cdata: Cmd) -> ~[ast::DefId] {
let mut ids: ~[ast::DefId] = ~[];
let v = tag_items_data_item_variant;
do reader::tagged_docs(item, v) |p| {
let ext = reader::with_doc_data(p, parse_def_id);
ids.push(ast::def_id { crate: cdata.cnum, node: ext.node });
ids.push(ast::DefId { crate: cdata.cnum, node: ext.node });
true
};
return ids;
@ -321,16 +321,16 @@ fn item_name(intr: @ident_interner, item: ebml::Doc) -> ast::Ident {
}
}
fn item_to_def_like(item: ebml::Doc, did: ast::def_id, cnum: ast::CrateNum)
fn item_to_def_like(item: ebml::Doc, did: ast::DefId, cnum: ast::CrateNum)
-> DefLike {
let fam = item_family(item);
match fam {
ImmStatic => DlDef(ast::def_static(did, false)),
MutStatic => DlDef(ast::def_static(did, true)),
Struct => DlDef(ast::def_struct(did)),
UnsafeFn => DlDef(ast::def_fn(did, ast::unsafe_fn)),
Fn => DlDef(ast::def_fn(did, ast::impure_fn)),
ForeignFn => DlDef(ast::def_fn(did, ast::extern_fn)),
ImmStatic => DlDef(ast::DefStatic(did, false)),
MutStatic => DlDef(ast::DefStatic(did, true)),
Struct => DlDef(ast::DefStruct(did)),
UnsafeFn => DlDef(ast::DefFn(did, ast::unsafe_fn)),
Fn => DlDef(ast::DefFn(did, ast::impure_fn)),
ForeignFn => DlDef(ast::DefFn(did, ast::extern_fn)),
StaticMethod | UnsafeStaticMethod => {
let purity = if fam == UnsafeStaticMethod { ast::unsafe_fn } else
{ ast::impure_fn };
@ -347,26 +347,26 @@ fn item_to_def_like(item: ebml::Doc, did: ast::def_id, cnum: ast::CrateNum)
ast::FromImpl(item_reqd_and_translated_parent_item(cnum,
item))
};
DlDef(ast::def_static_method(did, provenance, purity))
DlDef(ast::DefStaticMethod(did, provenance, purity))
}
Type | ForeignType => DlDef(ast::def_ty(did)),
Mod => DlDef(ast::def_mod(did)),
ForeignMod => DlDef(ast::def_foreign_mod(did)),
Type | ForeignType => DlDef(ast::DefTy(did)),
Mod => DlDef(ast::DefMod(did)),
ForeignMod => DlDef(ast::DefForeignMod(did)),
Variant => {
let enum_did = item_reqd_and_translated_parent_item(cnum, item);
DlDef(ast::def_variant(enum_did, did))
DlDef(ast::DefVariant(enum_did, did))
}
Trait => DlDef(ast::def_trait(did)),
Enum => DlDef(ast::def_ty(did)),
Trait => DlDef(ast::DefTrait(did)),
Enum => DlDef(ast::DefTy(did)),
Impl => DlImpl(did),
PublicField | PrivateField | InheritedField => DlField,
}
}
pub fn lookup_def(cnum: ast::CrateNum, data: @~[u8], did_: ast::def_id) ->
ast::def {
pub fn lookup_def(cnum: ast::CrateNum, data: @~[u8], did_: ast::DefId) ->
ast::Def {
let item = lookup_item(did_.node, data);
let did = ast::def_id { crate: cnum, node: did_.node };
let did = ast::DefId { crate: cnum, node: did_.node };
// We treat references to enums as references to types.
return def_like_to_def(item_to_def_like(item, did, cnum));
}
@ -402,7 +402,7 @@ pub fn get_type(cdata: Cmd, id: ast::NodeId, tcx: ty::ctxt)
-> ty::ty_param_bounds_and_ty {
let item = lookup_item(id, cdata.data);
let t = item_type(ast::def_id { crate: cdata.cnum, node: id }, item, tcx,
let t = item_type(ast::DefId { crate: cdata.cnum, node: id }, item, tcx,
cdata);
let tp_defs = if family_has_type_params(item_family(item)) {
item_ty_param_defs(item, tcx, cdata, tag_items_data_item_ty_param_bounds)
@ -452,7 +452,7 @@ pub fn get_impl_vtables(cdata: Cmd,
pub fn get_impl_method(intr: @ident_interner, cdata: Cmd, id: ast::NodeId,
name: ast::Ident) -> Option<ast::def_id> {
name: ast::Ident) -> Option<ast::DefId> {
let items = reader::get_doc(reader::Doc(cdata.data), tag_items);
let mut found = None;
do reader::tagged_docs(find_item(id, items), tag_item_impl_method) |mid| {
@ -471,12 +471,12 @@ pub fn get_symbol(data: @~[u8], id: ast::NodeId) -> ~str {
// Something that a name can resolve to.
pub enum DefLike {
DlDef(ast::def),
DlImpl(ast::def_id),
DlDef(ast::Def),
DlImpl(ast::DefId),
DlField
}
fn def_like_to_def(def_like: DefLike) -> ast::def {
fn def_like_to_def(def_like: DefLike) -> ast::Def {
match def_like {
DlDef(def) => return def,
DlImpl(*) => fail!("found impl in def_like_to_def"),
@ -528,7 +528,7 @@ impl<'self> EachItemContext<'self> {
fn process_item_and_pop_name(&mut self,
doc: ebml::Doc,
def_id: ast::def_id,
def_id: ast::DefId,
old_len: uint)
-> bool {
let def_like = item_to_def_like(doc, def_id, self.cdata.cnum);
@ -578,7 +578,7 @@ impl<'self> EachItemContext<'self> {
continue
}
fn each_item_of_module(&mut self, def_id: ast::def_id) -> bool {
fn each_item_of_module(&mut self, def_id: ast::DefId) -> bool {
// This item might not be in this crate. If it's not, look it up.
let items = if def_id.crate == self.cdata.cnum {
reader::get_doc(reader::Doc(self.cdata.data), tag_items)
@ -910,7 +910,7 @@ pub fn get_enum_variants(intr: @ident_interner, cdata: Cmd, id: ast::NodeId,
let mut disr_val = 0;
for did in variant_ids.iter() {
let item = find_item(did.node, items);
let ctor_ty = item_type(ast::def_id { crate: cdata.cnum, node: id},
let ctor_ty = item_type(ast::DefId { crate: cdata.cnum, node: id},
item, tcx, cdata);
let name = item_name(intr, item);
let arg_tys = match ty::get(ctor_ty).sty {
@ -937,10 +937,10 @@ pub fn get_enum_variants(intr: @ident_interner, cdata: Cmd, id: ast::NodeId,
}
fn get_explicit_self(item: ebml::Doc) -> ast::explicit_self_ {
fn get_mutability(ch: u8) -> ast::mutability {
fn get_mutability(ch: u8) -> ast::Mutability {
match ch as char {
'i' => ast::m_imm,
'm' => ast::m_mutbl,
'i' => ast::MutImmutable,
'm' => ast::MutMutable,
_ => fail!("unknown mutability character: `%c`", ch as char),
}
}
@ -983,7 +983,7 @@ pub fn get_impl(intr: @ident_interner, cdata: Cmd, impl_id: ast::NodeId,
let data = cdata.data;
let impl_item = lookup_item(impl_id, data);
ty::Impl {
did: ast::def_id {
did: ast::DefId {
crate: cdata.cnum,
node: impl_id,
},
@ -1043,7 +1043,7 @@ pub fn get_method(intr: @ident_interner, cdata: Cmd, id: ast::NodeId,
}
pub fn get_trait_method_def_ids(cdata: Cmd,
id: ast::NodeId) -> ~[ast::def_id] {
id: ast::NodeId) -> ~[ast::DefId] {
let data = cdata.data;
let item = lookup_item(id, data);
let mut result = ~[];
@ -1236,7 +1236,7 @@ fn read_path(d: ebml::Doc) -> (~str, uint) {
}
}
fn describe_def(items: ebml::Doc, id: ast::def_id) -> ~str {
fn describe_def(items: ebml::Doc, id: ast::DefId) -> ~str {
if id.crate != ast::LOCAL_CRATE { return ~"external"; }
let it = match maybe_find_item(id.node, items) {
Some(it) => it,
@ -1419,13 +1419,13 @@ pub fn list_crate_metadata(intr: @ident_interner, bytes: @~[u8],
// external crates - if those types further refer to types in other crates
// then we must translate the crate number from that encoded in the external
// crate to the correct local crate number.
pub fn translate_def_id(cdata: Cmd, did: ast::def_id) -> ast::def_id {
pub fn translate_def_id(cdata: Cmd, did: ast::DefId) -> ast::DefId {
if did.crate == ast::LOCAL_CRATE {
return ast::def_id { crate: cdata.cnum, node: did.node };
return ast::DefId { crate: cdata.cnum, node: did.node };
}
match cdata.cnum_map.find(&did.crate) {
option::Some(&n) => ast::def_id { crate: n, node: did.node },
option::Some(&n) => ast::DefId { crate: n, node: did.node },
option::None => fail!("didn't find a crate in the cnum_map")
}
}
@ -1440,7 +1440,7 @@ pub fn get_link_args_for_crate(cdata: Cmd) -> ~[~str] {
result
}
pub fn each_impl(cdata: Cmd, callback: &fn(ast::def_id)) {
pub fn each_impl(cdata: Cmd, callback: &fn(ast::DefId)) {
let impls_doc = reader::get_doc(reader::Doc(cdata.data), tag_impls);
let _ = do reader::tagged_docs(impls_doc, tag_impls_impl) |impl_doc| {
callback(item_def_id(impl_doc, cdata));
@ -1450,7 +1450,7 @@ pub fn each_impl(cdata: Cmd, callback: &fn(ast::def_id)) {
pub fn each_implementation_for_type(cdata: Cmd,
id: ast::NodeId,
callback: &fn(ast::def_id)) {
callback: &fn(ast::DefId)) {
let item_doc = lookup_item(id, cdata.data);
do reader::tagged_docs(item_doc, tag_items_data_item_inherent_impl)
|impl_doc| {
@ -1462,7 +1462,7 @@ pub fn each_implementation_for_type(cdata: Cmd,
pub fn each_implementation_for_trait(cdata: Cmd,
id: ast::NodeId,
callback: &fn(ast::def_id)) {
callback: &fn(ast::DefId)) {
let item_doc = lookup_item(id, cdata.data);
let _ = do reader::tagged_docs(item_doc,
@ -1475,7 +1475,7 @@ pub fn each_implementation_for_trait(cdata: Cmd,
}
pub fn get_trait_of_method(cdata: Cmd, id: ast::NodeId, tcx: ty::ctxt)
-> Option<ast::def_id> {
-> Option<ast::DefId> {
let item_doc = lookup_item(id, cdata.data);
let parent_item_id = match item_parent_item(item_doc) {
None => return None,

View file

@ -113,7 +113,7 @@ fn encode_impl_type_basename(ecx: &EncodeContext,
ecx.tcx.sess.str_of(name));
}
pub fn encode_def_id(ebml_w: &mut writer::Encoder, id: def_id) {
pub fn encode_def_id(ebml_w: &mut writer::Encoder, id: DefId) {
ebml_w.wr_tagged_str(tag_def_id, def_to_str(id));
}
@ -180,7 +180,7 @@ fn encode_family(ebml_w: &mut writer::Encoder, c: char) {
ebml_w.end_tag();
}
pub fn def_to_str(did: def_id) -> ~str {
pub fn def_to_str(did: DefId) -> ~str {
fmt!("%d:%d", did.crate, did.node)
}
@ -209,7 +209,7 @@ fn encode_bounds_and_type(ebml_w: &mut writer::Encoder,
encode_type(ecx, ebml_w, tpt.ty);
}
fn encode_variant_id(ebml_w: &mut writer::Encoder, vid: def_id) {
fn encode_variant_id(ebml_w: &mut writer::Encoder, vid: DefId) {
ebml_w.start_tag(tag_items_data_item_variant);
let s = def_to_str(vid);
ebml_w.writer.write(s.as_bytes());
@ -300,7 +300,7 @@ fn encode_disr_val(_: &EncodeContext,
ebml_w.end_tag();
}
fn encode_parent_item(ebml_w: &mut writer::Encoder, id: def_id) {
fn encode_parent_item(ebml_w: &mut writer::Encoder, id: DefId) {
ebml_w.start_tag(tag_items_data_parent_item);
let s = def_to_str(id);
ebml_w.writer.write(s.as_bytes());
@ -319,7 +319,7 @@ fn encode_enum_variant_info(ecx: &EncodeContext,
let mut disr_val = 0;
let mut i = 0;
let vi = ty::enum_variants(ecx.tcx,
ast::def_id { crate: LOCAL_CRATE, node: id });
ast::DefId { crate: LOCAL_CRATE, node: id });
for variant in variants.iter() {
let def_id = local_def(variant.node.id);
index.push(entry {val: variant.node.id as i64,
@ -378,7 +378,7 @@ fn encode_path(ecx: &EncodeContext,
fn encode_reexported_static_method(ecx: &EncodeContext,
ebml_w: &mut writer::Encoder,
exp: &middle::resolve::Export2,
method_def_id: def_id,
method_def_id: DefId,
method_ident: Ident) {
debug!("(encode reexported static method) %s::%s",
exp.name, ecx.tcx.sess.str_of(method_ident));
@ -638,10 +638,10 @@ fn encode_explicit_self(ebml_w: &mut writer::Encoder, explicit_self: ast::explic
ebml_w.end_tag();
fn encode_mutability(ebml_w: &writer::Encoder,
m: ast::mutability) {
m: ast::Mutability) {
match m {
m_imm => ebml_w.writer.write(&[ 'i' as u8 ]),
m_mutbl => ebml_w.writer.write(&[ 'm' as u8 ]),
MutImmutable => ebml_w.writer.write(&[ 'i' as u8 ]),
MutMutable => ebml_w.writer.write(&[ 'm' as u8 ]),
}
}
}
@ -653,7 +653,7 @@ fn encode_method_sort(ebml_w: &mut writer::Encoder, sort: char) {
}
fn encode_provided_source(ebml_w: &mut writer::Encoder,
source_opt: Option<def_id>) {
source_opt: Option<DefId>) {
for source in source_opt.iter() {
ebml_w.start_tag(tag_item_method_provided_source);
let s = def_to_str(*source);
@ -805,7 +805,7 @@ fn should_inline(attrs: &[Attribute]) -> bool {
// Encodes the inherent implementations of a structure, enumeration, or trait.
fn encode_inherent_implementations(ecx: &EncodeContext,
ebml_w: &mut writer::Encoder,
def_id: def_id) {
def_id: DefId) {
match ecx.tcx.inherent_impls.find(&def_id) {
None => {}
Some(&implementations) => {
@ -821,7 +821,7 @@ fn encode_inherent_implementations(ecx: &EncodeContext,
// Encodes the implementations of a trait defined in this crate.
fn encode_extension_implementations(ecx: &EncodeContext,
ebml_w: &mut writer::Encoder,
trait_def_id: def_id) {
trait_def_id: DefId) {
match ecx.tcx.trait_impls.find(&trait_def_id) {
None => {}
Some(&implementations) => {
@ -856,7 +856,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
add_to_index();
ebml_w.start_tag(tag_items_data_item);
encode_def_id(ebml_w, def_id);
if m == ast::m_mutbl {
if m == ast::MutMutable {
encode_family(ebml_w, 'b');
} else {
encode_family(ebml_w, 'c');
@ -1223,7 +1223,7 @@ fn encode_info_for_foreign_item(ecx: &EncodeContext,
ebml_w.end_tag();
}
fn my_visit_expr(_e:@expr) { }
fn my_visit_expr(_e:@Expr) { }
fn my_visit_item(i:@item, items: ast_map::map, ebml_w:&writer::Encoder,
ecx_ptr:*int, index: @mut ~[entry<i64>]) {
@ -1272,7 +1272,7 @@ struct EncodeVisitor {
}
impl visit::Visitor<()> for EncodeVisitor {
fn visit_expr(&mut self, ex:@expr, _:()) {
fn visit_expr(&mut self, ex:@Expr, _:()) {
visit::walk_expr(self, ex, ());
my_visit_expr(ex);
}

View file

@ -51,7 +51,7 @@ pub enum DefIdSource {
TypeParameter
}
type conv_did<'self> =
&'self fn(source: DefIdSource, ast::def_id) -> ast::def_id;
&'self fn(source: DefIdSource, ast::DefId) -> ast::DefId;
pub struct PState<'self> {
data: &'self [u8],
@ -422,10 +422,10 @@ fn parse_ty(st: &mut PState, conv: conv_did) -> ty::t {
}
}
fn parse_mutability(st: &mut PState) -> ast::mutability {
fn parse_mutability(st: &mut PState) -> ast::Mutability {
match peek(st) {
'm' => { next(st); ast::m_mutbl }
_ => { ast::m_imm }
'm' => { next(st); ast::MutMutable }
_ => { ast::MutImmutable }
}
}
@ -435,7 +435,7 @@ fn parse_mt(st: &mut PState, conv: conv_did) -> ty::mt {
}
fn parse_def(st: &mut PState, source: DefIdSource,
conv: conv_did) -> ast::def_id {
conv: conv_did) -> ast::DefId {
return conv(source, scan(st, |c| { c == '|' }, parse_def_id));
}
@ -535,7 +535,7 @@ fn parse_sig(st: &mut PState, conv: conv_did) -> ty::FnSig {
}
// Rust metadata parsing
pub fn parse_def_id(buf: &[u8]) -> ast::def_id {
pub fn parse_def_id(buf: &[u8]) -> ast::DefId {
let mut colon_idx = 0u;
let len = buf.len();
while colon_idx < len && buf[colon_idx] != ':' as u8 { colon_idx += 1u; }
@ -557,7 +557,7 @@ pub fn parse_def_id(buf: &[u8]) -> ast::def_id {
None => fail!("internal error: parse_def_id: id expected, but found %?",
def_part)
};
ast::def_id { crate: crate_num, node: def_num }
ast::DefId { crate: crate_num, node: def_num }
}
pub fn parse_type_param_def_data(data: &[u8], start: uint,

View file

@ -26,7 +26,7 @@ use syntax::print::pprust::*;
pub struct ctxt {
diag: @mut span_handler,
// Def -> str Callback:
ds: @fn(def_id) -> ~str,
ds: @fn(DefId) -> ~str,
// The type context.
tcx: ty::ctxt,
abbrevs: abbrev_ctxt
@ -95,10 +95,10 @@ pub fn enc_ty(w: @io::Writer, cx: @ctxt, t: ty::t) {
}
}
fn enc_mutability(w: @io::Writer, mt: ast::mutability) {
fn enc_mutability(w: @io::Writer, mt: ast::Mutability) {
match mt {
m_imm => (),
m_mutbl => w.write_char('m'),
MutImmutable => (),
MutMutable => w.write_char('m'),
}
}

View file

@ -72,7 +72,7 @@ trait tr {
}
trait tr_intern {
fn tr_intern(&self, xcx: @ExtendedDecodeContext) -> ast::def_id;
fn tr_intern(&self, xcx: @ExtendedDecodeContext) -> ast::DefId;
}
// ______________________________________________________________________
@ -179,7 +179,7 @@ impl ExtendedDecodeContext {
assert!(!self.from_id_range.empty());
(id - self.from_id_range.min + self.to_id_range.min)
}
pub fn tr_def_id(&self, did: ast::def_id) -> ast::def_id {
pub fn tr_def_id(&self, did: ast::DefId) -> ast::DefId {
/*!
* Translates an EXTERNAL def-id, converting the crate number
* from the one used in the encoded data to the current crate
@ -203,7 +203,7 @@ impl ExtendedDecodeContext {
decoder::translate_def_id(self.dcx.cdata, did)
}
pub fn tr_intern_def_id(&self, did: ast::def_id) -> ast::def_id {
pub fn tr_intern_def_id(&self, did: ast::DefId) -> ast::DefId {
/*!
* Translates an INTERNAL def-id, meaning a def-id that is
* known to refer to some part of the item currently being
@ -212,21 +212,21 @@ impl ExtendedDecodeContext {
*/
assert_eq!(did.crate, ast::LOCAL_CRATE);
ast::def_id { crate: ast::LOCAL_CRATE, node: self.tr_id(did.node) }
ast::DefId { crate: ast::LOCAL_CRATE, node: self.tr_id(did.node) }
}
pub fn tr_span(&self, _span: Span) -> Span {
codemap::dummy_sp() // FIXME (#1972): handle span properly
}
}
impl tr_intern for ast::def_id {
fn tr_intern(&self, xcx: @ExtendedDecodeContext) -> ast::def_id {
impl tr_intern for ast::DefId {
fn tr_intern(&self, xcx: @ExtendedDecodeContext) -> ast::DefId {
xcx.tr_intern_def_id(*self)
}
}
impl tr for ast::def_id {
fn tr(&self, xcx: @ExtendedDecodeContext) -> ast::def_id {
impl tr for ast::DefId {
fn tr(&self, xcx: @ExtendedDecodeContext) -> ast::DefId {
xcx.tr_def_id(*self)
}
}
@ -238,30 +238,30 @@ impl tr for Span {
}
trait def_id_encoder_helpers {
fn emit_def_id(&mut self, did: ast::def_id);
fn emit_def_id(&mut self, did: ast::DefId);
}
impl<S:serialize::Encoder> def_id_encoder_helpers for S {
fn emit_def_id(&mut self, did: ast::def_id) {
fn emit_def_id(&mut self, did: ast::DefId) {
did.encode(self)
}
}
trait def_id_decoder_helpers {
fn read_def_id(&mut self, xcx: @ExtendedDecodeContext) -> ast::def_id;
fn read_def_id(&mut self, xcx: @ExtendedDecodeContext) -> ast::DefId;
fn read_def_id_noxcx(&mut self,
cdata: @cstore::crate_metadata) -> ast::def_id;
cdata: @cstore::crate_metadata) -> ast::DefId;
}
impl<D:serialize::Decoder> def_id_decoder_helpers for D {
fn read_def_id(&mut self, xcx: @ExtendedDecodeContext) -> ast::def_id {
let did: ast::def_id = Decodable::decode(self);
fn read_def_id(&mut self, xcx: @ExtendedDecodeContext) -> ast::DefId {
let did: ast::DefId = Decodable::decode(self);
did.tr(xcx)
}
fn read_def_id_noxcx(&mut self,
cdata: @cstore::crate_metadata) -> ast::def_id {
let did: ast::def_id = Decodable::decode(self);
cdata: @cstore::crate_metadata) -> ast::DefId {
let did: ast::DefId = Decodable::decode(self);
decoder::translate_def_id(cdata, did)
}
}
@ -301,12 +301,12 @@ fn simplify_ast(ii: &ast::inlined_item) -> ast::inlined_item {
fn drop_nested_items(blk: &ast::Block, fld: @fold::ast_fold) -> ast::Block {
let stmts_sans_items = do blk.stmts.iter().filter_map |stmt| {
match stmt.node {
ast::stmt_expr(_, _) | ast::stmt_semi(_, _) |
ast::stmt_decl(@codemap::Spanned { node: ast::decl_local(_), span: _}, _)
ast::StmtExpr(_, _) | ast::StmtSemi(_, _) |
ast::StmtDecl(@codemap::Spanned { node: ast::DeclLocal(_), span: _}, _)
=> Some(*stmt),
ast::stmt_decl(@codemap::Spanned { node: ast::decl_item(_), span: _}, _)
ast::StmtDecl(@codemap::Spanned { node: ast::DeclItem(_), span: _}, _)
=> None,
ast::stmt_mac(*) => fail!("unexpanded macro in astencode")
ast::StmtMac(*) => fail!("unexpanded macro in astencode")
}
}.collect();
let blk_sans_items = ast::Block {
@ -360,22 +360,22 @@ fn renumber_ast(xcx: @ExtendedDecodeContext, ii: ast::inlined_item)
// ______________________________________________________________________
// Encoding and decoding of ast::def
fn encode_def(ebml_w: &mut writer::Encoder, def: ast::def) {
fn encode_def(ebml_w: &mut writer::Encoder, def: ast::Def) {
def.encode(ebml_w)
}
fn decode_def(xcx: @ExtendedDecodeContext, doc: ebml::Doc) -> ast::def {
fn decode_def(xcx: @ExtendedDecodeContext, doc: ebml::Doc) -> ast::Def {
let mut dsr = reader::Decoder(doc);
let def: ast::def = Decodable::decode(&mut dsr);
let def: ast::Def = Decodable::decode(&mut dsr);
def.tr(xcx)
}
impl tr for ast::def {
fn tr(&self, xcx: @ExtendedDecodeContext) -> ast::def {
impl tr for ast::Def {
fn tr(&self, xcx: @ExtendedDecodeContext) -> ast::Def {
match *self {
ast::def_fn(did, p) => ast::def_fn(did.tr(xcx), p),
ast::def_static_method(did, wrapped_did2, p) => {
ast::def_static_method(did.tr(xcx),
ast::DefFn(did, p) => ast::DefFn(did.tr(xcx), p),
ast::DefStaticMethod(did, wrapped_did2, p) => {
ast::DefStaticMethod(did.tr(xcx),
match wrapped_did2 {
ast::FromTrait(did2) => {
ast::FromTrait(did2.tr(xcx))
@ -386,37 +386,37 @@ impl tr for ast::def {
},
p)
}
ast::def_method(did0, did1) => {
ast::def_method(did0.tr(xcx), did1.map(|did1| did1.tr(xcx)))
ast::DefMethod(did0, did1) => {
ast::DefMethod(did0.tr(xcx), did1.map(|did1| did1.tr(xcx)))
}
ast::def_self_ty(nid) => { ast::def_self_ty(xcx.tr_id(nid)) }
ast::def_self(nid) => { ast::def_self(xcx.tr_id(nid)) }
ast::def_mod(did) => { ast::def_mod(did.tr(xcx)) }
ast::def_foreign_mod(did) => { ast::def_foreign_mod(did.tr(xcx)) }
ast::def_static(did, m) => { ast::def_static(did.tr(xcx), m) }
ast::def_arg(nid, b) => { ast::def_arg(xcx.tr_id(nid), b) }
ast::def_local(nid, b) => { ast::def_local(xcx.tr_id(nid), b) }
ast::def_variant(e_did, v_did) => {
ast::def_variant(e_did.tr(xcx), v_did.tr(xcx))
ast::DefSelfTy(nid) => { ast::DefSelfTy(xcx.tr_id(nid)) }
ast::DefSelf(nid) => { ast::DefSelf(xcx.tr_id(nid)) }
ast::DefMod(did) => { ast::DefMod(did.tr(xcx)) }
ast::DefForeignMod(did) => { ast::DefForeignMod(did.tr(xcx)) }
ast::DefStatic(did, m) => { ast::DefStatic(did.tr(xcx), m) }
ast::DefArg(nid, b) => { ast::DefArg(xcx.tr_id(nid), b) }
ast::DefLocal(nid, b) => { ast::DefLocal(xcx.tr_id(nid), b) }
ast::DefVariant(e_did, v_did) => {
ast::DefVariant(e_did.tr(xcx), v_did.tr(xcx))
},
ast::def_trait(did) => ast::def_trait(did.tr(xcx)),
ast::def_ty(did) => ast::def_ty(did.tr(xcx)),
ast::def_prim_ty(p) => ast::def_prim_ty(p),
ast::def_ty_param(did, v) => ast::def_ty_param(did.tr(xcx), v),
ast::def_binding(nid, bm) => ast::def_binding(xcx.tr_id(nid), bm),
ast::def_use(did) => ast::def_use(did.tr(xcx)),
ast::def_upvar(nid1, def, nid2, nid3) => {
ast::def_upvar(xcx.tr_id(nid1),
ast::DefTrait(did) => ast::DefTrait(did.tr(xcx)),
ast::DefTy(did) => ast::DefTy(did.tr(xcx)),
ast::DefPrimTy(p) => ast::DefPrimTy(p),
ast::DefTyParam(did, v) => ast::DefTyParam(did.tr(xcx), v),
ast::DefBinding(nid, bm) => ast::DefBinding(xcx.tr_id(nid), bm),
ast::DefUse(did) => ast::DefUse(did.tr(xcx)),
ast::DefUpvar(nid1, def, nid2, nid3) => {
ast::DefUpvar(xcx.tr_id(nid1),
@(*def).tr(xcx),
xcx.tr_id(nid2),
xcx.tr_id(nid3))
}
ast::def_struct(did) => ast::def_struct(did.tr(xcx)),
ast::def_region(nid) => ast::def_region(xcx.tr_id(nid)),
ast::def_typaram_binder(nid) => {
ast::def_typaram_binder(xcx.tr_id(nid))
ast::DefStruct(did) => ast::DefStruct(did.tr(xcx)),
ast::DefRegion(nid) => ast::DefRegion(xcx.tr_id(nid)),
ast::DefTyParamBinder(nid) => {
ast::DefTyParamBinder(xcx.tr_id(nid))
}
ast::def_label(nid) => ast::def_label(xcx.tr_id(nid))
ast::DefLabel(nid) => ast::DefLabel(xcx.tr_id(nid))
}
}
}
@ -914,7 +914,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
}
}
let lid = ast::def_id { crate: ast::LOCAL_CRATE, node: id };
let lid = ast::DefId { crate: ast::LOCAL_CRATE, node: id };
{
let r = tcx.tcache.find(&lid);
for &tpbt in r.iter() {
@ -1012,8 +1012,8 @@ trait ebml_decoder_decoder_helpers {
fn convert_def_id(&mut self,
xcx: @ExtendedDecodeContext,
source: DefIdSource,
did: ast::def_id)
-> ast::def_id;
did: ast::DefId)
-> ast::DefId;
// Versions of the type reading functions that don't need the full
// ExtendedDecodeContext.
@ -1122,8 +1122,8 @@ impl ebml_decoder_decoder_helpers for reader::Decoder {
fn convert_def_id(&mut self,
xcx: @ExtendedDecodeContext,
source: tydecode::DefIdSource,
did: ast::def_id)
-> ast::def_id {
did: ast::DefId)
-> ast::DefId {
/*!
*
* Converts a def-id that appears in a type. The correct
@ -1192,7 +1192,7 @@ fn decode_side_tables(xcx: @ExtendedDecodeContext,
}
c::tag_table_tcache => {
let tpbt = val_dsr.read_ty_param_bounds_and_ty(xcx);
let lid = ast::def_id { crate: ast::LOCAL_CRATE, node: id };
let lid = ast::DefId { crate: ast::LOCAL_CRATE, node: id };
dcx.tcx.tcache.insert(lid, tpbt);
}
c::tag_table_param_defs => {

View file

@ -23,7 +23,7 @@ use mc = middle::mem_categorization;
use middle::borrowck::*;
use middle::moves;
use middle::ty;
use syntax::ast::{m_imm, m_mutbl};
use syntax::ast::{MutImmutable, MutMutable};
use syntax::ast;
use syntax::ast_util;
use syntax::codemap::Span;
@ -43,7 +43,7 @@ struct CheckLoanCtxt<'self> {
struct CheckLoanVisitor;
impl<'self> Visitor<CheckLoanCtxt<'self>> for CheckLoanVisitor {
fn visit_expr<'a>(&mut self, ex:@ast::expr, e:CheckLoanCtxt<'a>) {
fn visit_expr<'a>(&mut self, ex:@ast::Expr, e:CheckLoanCtxt<'a>) {
check_loans_in_expr(self, ex, e);
}
fn visit_local(&mut self, l:@ast::Local, e:CheckLoanCtxt) {
@ -52,7 +52,7 @@ impl<'self> Visitor<CheckLoanCtxt<'self>> for CheckLoanVisitor {
fn visit_block(&mut self, b:&ast::Block, e:CheckLoanCtxt) {
check_loans_in_block(self, b, e);
}
fn visit_pat(&mut self, p:@ast::pat, e:CheckLoanCtxt) {
fn visit_pat(&mut self, p:@ast::Pat, e:CheckLoanCtxt) {
check_loans_in_pat(self, p, e);
}
fn visit_fn(&mut self, fk:&visit::fn_kind, fd:&ast::fn_decl,
@ -332,7 +332,7 @@ impl<'self> CheckLoanCtxt<'self> {
};
}
pub fn check_assignment(&self, expr: @ast::expr) {
pub fn check_assignment(&self, expr: @ast::Expr) {
// We don't use cat_expr() here because we don't want to treat
// auto-ref'd parameters in overloaded operators as rvalues.
let cmt = match self.bccx.tcx.adjustments.find(&expr.id) {
@ -432,7 +432,7 @@ impl<'self> CheckLoanCtxt<'self> {
}
fn check_for_aliasable_mutable_writes(this: &CheckLoanCtxt,
expr: @ast::expr,
expr: @ast::Expr,
cmt: mc::cmt) -> bool {
//! Safety checks related to writes to aliasable, mutable locations
@ -440,13 +440,13 @@ impl<'self> CheckLoanCtxt<'self> {
debug!("check_for_aliasable_mutable_writes(cmt=%s, guarantor=%s)",
cmt.repr(this.tcx()), guarantor.repr(this.tcx()));
match guarantor.cat {
mc::cat_deref(b, _, mc::region_ptr(m_mutbl, _)) => {
mc::cat_deref(b, _, mc::region_ptr(MutMutable, _)) => {
// Statically prohibit writes to `&mut` when aliasable
check_for_aliasability_violation(this, expr, b);
}
mc::cat_deref(_, deref_count, mc::gc_ptr(ast::m_mutbl)) => {
mc::cat_deref(_, deref_count, mc::gc_ptr(ast::MutMutable)) => {
// Dynamically check writes to `@mut`
let key = root_map_key {
@ -464,13 +464,13 @@ impl<'self> CheckLoanCtxt<'self> {
}
fn check_for_aliasability_violation(this: &CheckLoanCtxt,
expr: @ast::expr,
expr: @ast::Expr,
cmt: mc::cmt) -> bool {
let mut cmt = cmt;
loop {
match cmt.cat {
mc::cat_deref(b, _, mc::region_ptr(m_mutbl, _)) |
mc::cat_deref(b, _, mc::region_ptr(MutMutable, _)) |
mc::cat_downcast(b) |
mc::cat_stack_upvar(b) |
mc::cat_deref(b, _, mc::uniq_ptr) |
@ -488,7 +488,7 @@ impl<'self> CheckLoanCtxt<'self> {
mc::cat_deref(_, _, mc::unsafe_ptr(*)) |
mc::cat_static_item(*) |
mc::cat_deref(_, _, mc::gc_ptr(_)) |
mc::cat_deref(_, _, mc::region_ptr(m_imm, _)) => {
mc::cat_deref(_, _, mc::region_ptr(MutImmutable, _)) => {
// Aliasability is independent of base cmt
match cmt.freely_aliasable() {
None => {
@ -509,7 +509,7 @@ impl<'self> CheckLoanCtxt<'self> {
fn check_for_assignment_to_restricted_or_frozen_location(
this: &CheckLoanCtxt,
expr: @ast::expr,
expr: @ast::Expr,
cmt: mc::cmt) -> bool
{
//! Check for assignments that violate the terms of an
@ -612,7 +612,7 @@ impl<'self> CheckLoanCtxt<'self> {
// with inherited mutability and with `&mut`
// pointers.
LpExtend(lp_base, mc::McInherited, _) |
LpExtend(lp_base, _, LpDeref(mc::region_ptr(ast::m_mutbl, _))) => {
LpExtend(lp_base, _, LpDeref(mc::region_ptr(ast::MutMutable, _))) => {
loan_path = lp_base;
}
@ -643,7 +643,7 @@ impl<'self> CheckLoanCtxt<'self> {
}
pub fn report_illegal_mutation(&self,
expr: @ast::expr,
expr: @ast::Expr,
loan_path: &LoanPath,
loan: &Loan) {
self.bccx.span_err(
@ -656,9 +656,9 @@ impl<'self> CheckLoanCtxt<'self> {
self.bccx.loan_path_to_str(loan_path)));
}
fn check_move_out_from_expr(&self, expr: @ast::expr) {
fn check_move_out_from_expr(&self, expr: @ast::Expr) {
match expr.node {
ast::expr_fn_block(*) => {
ast::ExprFnBlock(*) => {
// moves due to capture clauses are checked
// in `check_loans_in_fn`, so that we can
// give a better error message
@ -710,11 +710,11 @@ impl<'self> CheckLoanCtxt<'self> {
}
pub fn check_call(&self,
_expr: @ast::expr,
_callee: Option<@ast::expr>,
_expr: @ast::Expr,
_callee: Option<@ast::Expr>,
_callee_id: ast::NodeId,
_callee_span: Span,
_args: &[@ast::expr]) {
_args: &[@ast::Expr]) {
// NB: This call to check for conflicting loans is not truly
// necessary, because the callee_id never issues new loans.
// However, I added it for consistency and lest the system
@ -795,7 +795,7 @@ fn check_loans_in_local<'a>(vt: &mut CheckLoanVisitor,
}
fn check_loans_in_expr<'a>(vt: &mut CheckLoanVisitor,
expr: @ast::expr,
expr: @ast::Expr,
this: CheckLoanCtxt<'a>) {
visit::walk_expr(vt, expr, this);
@ -806,8 +806,8 @@ fn check_loans_in_expr<'a>(vt: &mut CheckLoanVisitor,
this.check_move_out_from_expr(expr);
match expr.node {
ast::expr_self |
ast::expr_path(*) => {
ast::ExprSelf |
ast::ExprPath(*) => {
if !this.move_data.is_assignee(expr.id) {
let cmt = this.bccx.cat_expr_unadjusted(expr);
debug!("path cmt=%s", cmt.repr(this.tcx()));
@ -817,18 +817,18 @@ fn check_loans_in_expr<'a>(vt: &mut CheckLoanVisitor,
}
}
}
ast::expr_assign(dest, _) |
ast::expr_assign_op(_, _, dest, _) => {
ast::ExprAssign(dest, _) |
ast::ExprAssignOp(_, _, dest, _) => {
this.check_assignment(dest);
}
ast::expr_call(f, ref args, _) => {
ast::ExprCall(f, ref args, _) => {
this.check_call(expr, Some(f), f.id, f.span, *args);
}
ast::expr_method_call(callee_id, _, _, _, ref args, _) => {
ast::ExprMethodCall(callee_id, _, _, _, ref args, _) => {
this.check_call(expr, None, callee_id, expr.span, *args);
}
ast::expr_index(callee_id, _, rval) |
ast::expr_binary(callee_id, _, _, rval)
ast::ExprIndex(callee_id, _, rval) |
ast::ExprBinary(callee_id, _, _, rval)
if this.bccx.method_map.contains_key(&expr.id) => {
this.check_call(expr,
None,
@ -836,7 +836,7 @@ fn check_loans_in_expr<'a>(vt: &mut CheckLoanVisitor,
expr.span,
[rval]);
}
ast::expr_unary(callee_id, _, _) | ast::expr_index(callee_id, _, _)
ast::ExprUnary(callee_id, _, _) | ast::ExprIndex(callee_id, _, _)
if this.bccx.method_map.contains_key(&expr.id) => {
this.check_call(expr,
None,
@ -849,7 +849,7 @@ fn check_loans_in_expr<'a>(vt: &mut CheckLoanVisitor,
}
fn check_loans_in_pat<'a>(vt: &mut CheckLoanVisitor,
pat: @ast::pat,
pat: @ast::Pat,
this: CheckLoanCtxt<'a>)
{
this.check_for_conflicting_loans(pat.id);

View file

@ -33,7 +33,7 @@ pub fn gather_decl(bccx: @BorrowckCtxt,
pub fn gather_move_from_expr(bccx: @BorrowckCtxt,
move_data: &mut MoveData,
move_expr: @ast::expr,
move_expr: @ast::Expr,
cmt: mc::cmt) {
gather_move_from_expr_or_pat(bccx, move_data, move_expr.id,
MoveExpr(move_expr), cmt);
@ -41,7 +41,7 @@ pub fn gather_move_from_expr(bccx: @BorrowckCtxt,
pub fn gather_move_from_pat(bccx: @BorrowckCtxt,
move_data: &mut MoveData,
move_pat: @ast::pat,
move_pat: @ast::Pat,
cmt: mc::cmt) {
gather_move_from_expr_or_pat(bccx, move_data, move_pat.id,
MovePat(move_pat), cmt);
@ -68,7 +68,7 @@ fn gather_move_from_expr_or_pat(bccx: @BorrowckCtxt,
pub fn gather_captures(bccx: @BorrowckCtxt,
move_data: &mut MoveData,
closure_expr: @ast::expr) {
closure_expr: @ast::Expr) {
let captured_vars = bccx.capture_map.get(&closure_expr.id);
for captured_var in captured_vars.iter() {
match captured_var.mode {

View file

@ -15,7 +15,7 @@
use middle::borrowck::*;
use mc = middle::mem_categorization;
use middle::ty;
use syntax::ast::{m_imm, m_mutbl};
use syntax::ast::{MutImmutable, MutMutable};
use syntax::ast;
use syntax::codemap::Span;
use util::ppaux::{note_and_explain_region};
@ -90,7 +90,7 @@ impl GuaranteeLifetimeContext {
// L-Deref-Managed-Imm-User-Root
let omit_root = (
ptr_mutbl == m_imm &&
ptr_mutbl == MutImmutable &&
self.bccx.is_subregion_of(self.loan_region, base_scope) &&
self.is_rvalue_or_immutable(base) &&
!self.is_moved(base)
@ -187,7 +187,7 @@ impl GuaranteeLifetimeContext {
cmt_deref: mc::cmt,
cmt_base: mc::cmt,
derefs: uint,
ptr_mutbl: ast::mutability,
ptr_mutbl: ast::Mutability,
discr_scope: Option<ast::NodeId>) {
debug!("check_root(cmt_deref=%s, cmt_base=%s, derefs=%?, ptr_mutbl=%?, \
discr_scope=%?)",
@ -235,8 +235,8 @@ impl GuaranteeLifetimeContext {
// we need to dynamically mark it to prevent incompatible
// borrows from happening later.
let opt_dyna = match ptr_mutbl {
m_imm => None,
m_mutbl => {
MutImmutable => None,
MutMutable => {
match self.loan_mutbl {
MutableMutability => Some(DynaMut),
ImmutableMutability | ConstMutability => Some(DynaImm)

View file

@ -32,7 +32,7 @@ use syntax::codemap::Span;
use syntax::print::pprust;
use syntax::visit;
use syntax::visit::Visitor;
use syntax::ast::{expr, fn_kind, fn_decl, Block, NodeId, stmt, pat, Local};
use syntax::ast::{Expr, fn_kind, fn_decl, Block, NodeId, Stmt, Pat, Local};
mod lifetime;
mod restrictions;
@ -76,7 +76,7 @@ struct GatherLoanCtxt {
struct GatherLoanVisitor;
impl visit::Visitor<@mut GatherLoanCtxt> for GatherLoanVisitor {
fn visit_expr(&mut self, ex:@expr, e:@mut GatherLoanCtxt) {
fn visit_expr(&mut self, ex:@Expr, e:@mut GatherLoanCtxt) {
gather_loans_in_expr(self, ex, e);
}
fn visit_block(&mut self, b:&Block, e:@mut GatherLoanCtxt) {
@ -86,10 +86,10 @@ impl visit::Visitor<@mut GatherLoanCtxt> for GatherLoanVisitor {
s:Span, n:NodeId, e:@mut GatherLoanCtxt) {
gather_loans_in_fn(self, fk, fd, b, s, n, e);
}
fn visit_stmt(&mut self, s:@stmt, e:@mut GatherLoanCtxt) {
fn visit_stmt(&mut self, s:@Stmt, e:@mut GatherLoanCtxt) {
add_stmt_to_map(self, s, e);
}
fn visit_pat(&mut self, p:@pat, e:@mut GatherLoanCtxt) {
fn visit_pat(&mut self, p:@Pat, e:@mut GatherLoanCtxt) {
add_pat_to_id_range(self, p, e);
}
fn visit_local(&mut self, l:@Local, e:@mut GatherLoanCtxt) {
@ -117,7 +117,7 @@ pub fn gather_loans(bccx: @BorrowckCtxt,
}
fn add_pat_to_id_range(v: &mut GatherLoanVisitor,
p: @ast::pat,
p: @ast::Pat,
this: @mut GatherLoanCtxt) {
// NB: This visitor function just adds the pat ids into the id
// range. We gather loans that occur in patterns using the
@ -196,7 +196,7 @@ fn gather_loans_in_local(v: &mut GatherLoanVisitor,
fn gather_loans_in_expr(v: &mut GatherLoanVisitor,
ex: @ast::expr,
ex: @ast::Expr,
this: @mut GatherLoanCtxt) {
let bccx = this.bccx;
let tcx = bccx.tcx;
@ -230,7 +230,7 @@ fn gather_loans_in_expr(v: &mut GatherLoanVisitor,
// Special checks for various kinds of expressions:
match ex.node {
ast::expr_addr_of(mutbl, base) => {
ast::ExprAddrOf(mutbl, base) => {
let base_cmt = this.bccx.cat_expr(base);
// make sure that the thing we are pointing out stays valid
@ -244,7 +244,7 @@ fn gather_loans_in_expr(v: &mut GatherLoanVisitor,
visit::walk_expr(v, ex, this);
}
ast::expr_assign(l, _) | ast::expr_assign_op(_, _, l, _) => {
ast::ExprAssign(l, _) | ast::ExprAssignOp(_, _, l, _) => {
let l_cmt = this.bccx.cat_expr(l);
match opt_loan_path(l_cmt) {
Some(l_lp) => {
@ -261,7 +261,7 @@ fn gather_loans_in_expr(v: &mut GatherLoanVisitor,
visit::walk_expr(v, ex, this);
}
ast::expr_match(ex_v, ref arms) => {
ast::ExprMatch(ex_v, ref arms) => {
let cmt = this.bccx.cat_expr(ex_v);
for arm in arms.iter() {
for pat in arm.pats.iter() {
@ -271,8 +271,8 @@ fn gather_loans_in_expr(v: &mut GatherLoanVisitor,
visit::walk_expr(v, ex, this);
}
ast::expr_index(_, _, arg) |
ast::expr_binary(_, _, _, arg)
ast::ExprIndex(_, _, arg) |
ast::ExprBinary(_, _, _, arg)
if this.bccx.method_map.contains_key(&ex.id) => {
// Arguments in method calls are always passed by ref.
//
@ -290,7 +290,7 @@ fn gather_loans_in_expr(v: &mut GatherLoanVisitor,
}
// see explanation attached to the `root_ub` field:
ast::expr_while(cond, ref body) => {
ast::ExprWhile(cond, ref body) => {
// during the condition, can only root for the condition
this.push_repeating_id(cond.id);
v.visit_expr(cond, this);
@ -303,13 +303,13 @@ fn gather_loans_in_expr(v: &mut GatherLoanVisitor,
}
// see explanation attached to the `root_ub` field:
ast::expr_loop(ref body, _) => {
ast::ExprLoop(ref body, _) => {
this.push_repeating_id(body.id);
visit::walk_expr(v, ex, this);
this.pop_repeating_id(body.id);
}
ast::expr_fn_block(*) => {
ast::ExprFnBlock(*) => {
gather_moves::gather_captures(this.bccx, this.move_data, ex);
visit::walk_expr(v, ex, this);
}
@ -333,7 +333,7 @@ impl GatherLoanCtxt {
}
pub fn guarantee_adjustments(&mut self,
expr: @ast::expr,
expr: @ast::Expr,
adjustment: &ty::AutoAdjustment) {
debug!("guarantee_adjustments(expr=%s, adjustment=%?)",
expr.repr(self.tcx()), adjustment);
@ -668,7 +668,7 @@ impl GatherLoanCtxt {
fn gather_pat(&mut self,
discr_cmt: mc::cmt,
root_pat: @ast::pat,
root_pat: @ast::Pat,
arm_match_ids: Option<(ast::NodeId, ast::NodeId)>) {
/*!
* Walks patterns, examining the bindings to determine if they
@ -678,9 +678,9 @@ impl GatherLoanCtxt {
do self.bccx.cat_pattern(discr_cmt, root_pat) |cmt, pat| {
match pat.node {
ast::pat_ident(bm, _, _) if self.pat_is_binding(pat) => {
ast::PatIdent(bm, _, _) if self.pat_is_binding(pat) => {
match bm {
ast::bind_by_ref(mutbl) => {
ast::BindByRef(mutbl) => {
// ref x or ref x @ p --- creates a ptr which must
// remain valid for the scope of the match
@ -715,7 +715,7 @@ impl GatherLoanCtxt {
loan_mutability,
scope_r);
}
ast::bind_infer => {
ast::BindInfer => {
// No borrows here, but there may be moves
if self.bccx.is_move(pat.id) {
gather_moves::gather_move_from_pat(
@ -725,7 +725,7 @@ impl GatherLoanCtxt {
}
}
ast::pat_vec(_, Some(slice_pat), _) => {
ast::PatVec(_, Some(slice_pat), _) => {
// The `slice_pat` here creates a slice into the
// original vector. This is effectively a borrow of
// the elements of the vector being matched.
@ -768,8 +768,8 @@ impl GatherLoanCtxt {
}
}
pub fn vec_slice_info(&self, pat: @ast::pat, slice_ty: ty::t)
-> (ast::mutability, ty::Region) {
pub fn vec_slice_info(&self, pat: @ast::Pat, slice_ty: ty::t)
-> (ast::Mutability, ty::Region) {
/*!
*
* In a pattern like [a, b, ..c], normally `c` has slice type,
@ -795,11 +795,11 @@ impl GatherLoanCtxt {
}
}
pub fn pat_is_variant_or_struct(&self, pat: @ast::pat) -> bool {
pub fn pat_is_variant_or_struct(&self, pat: @ast::Pat) -> bool {
pat_util::pat_is_variant_or_struct(self.bccx.tcx.def_map, pat)
}
pub fn pat_is_binding(&self, pat: @ast::pat) -> bool {
pub fn pat_is_binding(&self, pat: @ast::Pat) -> bool {
pat_util::pat_is_binding(self.bccx.tcx.def_map, pat)
}
}
@ -807,10 +807,10 @@ impl GatherLoanCtxt {
// Setting up info that preserve needs.
// This is just the most convenient place to do it.
fn add_stmt_to_map(v: &mut GatherLoanVisitor,
stmt: @ast::stmt,
stmt: @ast::Stmt,
this: @mut GatherLoanCtxt) {
match stmt.node {
ast::stmt_expr(_, id) | ast::stmt_semi(_, id) => {
ast::StmtExpr(_, id) | ast::StmtSemi(_, id) => {
this.bccx.stmt_map.insert(id);
}
_ => ()

View file

@ -15,7 +15,7 @@ use std::vec;
use middle::borrowck::*;
use mc = middle::mem_categorization;
use middle::ty;
use syntax::ast::{m_imm, m_mutbl};
use syntax::ast::{MutImmutable, MutMutable};
use syntax::codemap::Span;
pub enum RestrictionResult {
@ -115,13 +115,13 @@ impl RestrictionsContext {
mc::cat_copied_upvar(*) | // FIXME(#2152) allow mutation of upvars
mc::cat_static_item(*) |
mc::cat_deref(_, _, mc::region_ptr(m_imm, _)) |
mc::cat_deref(_, _, mc::gc_ptr(m_imm)) => {
mc::cat_deref(_, _, mc::region_ptr(MutImmutable, _)) |
mc::cat_deref(_, _, mc::gc_ptr(MutImmutable)) => {
// R-Deref-Imm-Borrowed
Safe
}
mc::cat_deref(cmt_base, _, pk @ mc::gc_ptr(m_mutbl)) => {
mc::cat_deref(cmt_base, _, pk @ mc::gc_ptr(MutMutable)) => {
// R-Deref-Managed-Borrowed
//
// Technically, no restrictions are *necessary* here.
@ -169,7 +169,7 @@ impl RestrictionsContext {
}
}
mc::cat_deref(cmt_base, _, pk @ mc::region_ptr(m_mutbl, _)) => {
mc::cat_deref(cmt_base, _, pk @ mc::region_ptr(MutMutable, _)) => {
// Because an `&mut` pointer does not inherit its
// mutability, we can only prevent mutation or prevent
// freezing if it is not aliased. Therefore, in such

View file

@ -249,11 +249,11 @@ pub enum LoanMutability {
}
impl LoanMutability {
pub fn from_ast_mutability(ast_mutability: ast::mutability)
pub fn from_ast_mutability(ast_mutability: ast::Mutability)
-> LoanMutability {
match ast_mutability {
ast::m_imm => ImmutableMutability,
ast::m_mutbl => MutableMutability,
ast::MutImmutable => ImmutableMutability,
ast::MutMutable => MutableMutability,
}
}
}
@ -487,16 +487,16 @@ impl BorrowckCtxt {
self.moves_map.contains(&id)
}
pub fn cat_expr(&self, expr: @ast::expr) -> mc::cmt {
pub fn cat_expr(&self, expr: @ast::Expr) -> mc::cmt {
mc::cat_expr(self.tcx, self.method_map, expr)
}
pub fn cat_expr_unadjusted(&self, expr: @ast::expr) -> mc::cmt {
pub fn cat_expr_unadjusted(&self, expr: @ast::Expr) -> mc::cmt {
mc::cat_expr_unadjusted(self.tcx, self.method_map, expr)
}
pub fn cat_expr_autoderefd(&self,
expr: @ast::expr,
expr: @ast::Expr,
adj: @ty::AutoAdjustment)
-> mc::cmt {
match *adj {
@ -518,7 +518,7 @@ impl BorrowckCtxt {
id: ast::NodeId,
span: Span,
ty: ty::t,
def: ast::def)
def: ast::Def)
-> mc::cmt {
mc::cat_def(self.tcx, self.method_map, id, span, ty, def)
}
@ -536,8 +536,8 @@ impl BorrowckCtxt {
pub fn cat_pattern(&self,
cmt: mc::cmt,
pat: @ast::pat,
op: &fn(mc::cmt, @ast::pat)) {
pat: @ast::Pat,
op: &fn(mc::cmt, @ast::Pat)) {
let mc = self.mc_ctxt();
mc.cat_pattern(cmt, pat, op);
}
@ -691,7 +691,7 @@ impl BorrowckCtxt {
span,
fmt!("%s in an aliasable location", prefix));
}
mc::AliasableManaged(ast::m_mutbl) => {
mc::AliasableManaged(ast::MutMutable) => {
// FIXME(#6269) reborrow @mut to &mut
self.tcx.sess.span_err(
span,
@ -825,10 +825,10 @@ impl BorrowckCtxt {
mutbl.to_str()
}
pub fn mut_to_keyword(&self, mutbl: ast::mutability) -> &'static str {
pub fn mut_to_keyword(&self, mutbl: ast::Mutability) -> &'static str {
match mutbl {
ast::m_imm => "",
ast::m_mutbl => "mut",
ast::MutImmutable => "",
ast::MutMutable => "mut",
}
}
}

View file

@ -108,9 +108,9 @@ pub struct MovePath {
pub enum MoveKind {
Declared, // When declared, variables start out "moved".
MoveExpr(@ast::expr), // Expression or binding that moves a variable
MovePat(@ast::pat), // By-move binding
Captured(@ast::expr), // Closure creation that moves a value
MoveExpr(@ast::Expr), // Expression or binding that moves a variable
MovePat(@ast::Pat), // By-move binding
Captured(@ast::Expr), // Closure creation that moves a value
}
pub struct Move {

View file

@ -62,67 +62,67 @@ impl CFGBuilder {
self.add_node(blk.id, [expr_exit])
}
fn stmt(&mut self, stmt: @ast::stmt, pred: CFGIndex) -> CFGIndex {
fn stmt(&mut self, stmt: @ast::Stmt, pred: CFGIndex) -> CFGIndex {
match stmt.node {
ast::stmt_decl(decl, _) => {
ast::StmtDecl(decl, _) => {
self.decl(decl, pred)
}
ast::stmt_expr(expr, _) | ast::stmt_semi(expr, _) => {
ast::StmtExpr(expr, _) | ast::StmtSemi(expr, _) => {
self.expr(expr, pred)
}
ast::stmt_mac(*) => {
ast::StmtMac(*) => {
self.tcx.sess.span_bug(stmt.span, "unexpanded macro");
}
}
}
fn decl(&mut self, decl: @ast::decl, pred: CFGIndex) -> CFGIndex {
fn decl(&mut self, decl: @ast::Decl, pred: CFGIndex) -> CFGIndex {
match decl.node {
ast::decl_local(local) => {
ast::DeclLocal(local) => {
let init_exit = self.opt_expr(local.init, pred);
self.pat(local.pat, init_exit)
}
ast::decl_item(_) => {
ast::DeclItem(_) => {
pred
}
}
}
fn pat(&mut self, pat: @ast::pat, pred: CFGIndex) -> CFGIndex {
fn pat(&mut self, pat: @ast::Pat, pred: CFGIndex) -> CFGIndex {
match pat.node {
ast::pat_ident(_, _, None) |
ast::pat_enum(_, None) |
ast::pat_lit(*) |
ast::pat_range(*) |
ast::pat_wild => {
ast::PatIdent(_, _, None) |
ast::PatEnum(_, None) |
ast::PatLit(*) |
ast::PatRange(*) |
ast::PatWild => {
self.add_node(pat.id, [pred])
}
ast::pat_box(subpat) |
ast::pat_uniq(subpat) |
ast::pat_region(subpat) |
ast::pat_ident(_, _, Some(subpat)) => {
ast::PatBox(subpat) |
ast::PatUniq(subpat) |
ast::PatRegion(subpat) |
ast::PatIdent(_, _, Some(subpat)) => {
let subpat_exit = self.pat(subpat, pred);
self.add_node(pat.id, [subpat_exit])
}
ast::pat_enum(_, Some(ref subpats)) |
ast::pat_tup(ref subpats) => {
ast::PatEnum(_, Some(ref subpats)) |
ast::PatTup(ref subpats) => {
let pats_exit =
self.pats_all(subpats.iter().map(|p| *p), pred);
self.add_node(pat.id, [pats_exit])
}
ast::pat_struct(_, ref subpats, _) => {
ast::PatStruct(_, ref subpats, _) => {
let pats_exit =
self.pats_all(subpats.iter().map(|f| f.pat), pred);
self.add_node(pat.id, [pats_exit])
}
ast::pat_vec(ref pre, ref vec, ref post) => {
ast::PatVec(ref pre, ref vec, ref post) => {
let pre_exit =
self.pats_all(pre.iter().map(|p| *p), pred);
let vec_exit =
@ -134,7 +134,7 @@ impl CFGBuilder {
}
}
fn pats_all<I: Iterator<@ast::pat>>(&mut self,
fn pats_all<I: Iterator<@ast::Pat>>(&mut self,
pats: I,
pred: CFGIndex) -> CFGIndex {
//! Handles case where all of the patterns must match.
@ -143,7 +143,7 @@ impl CFGBuilder {
}
fn pats_any(&mut self,
pats: &[@ast::pat],
pats: &[@ast::Pat],
pred: CFGIndex) -> CFGIndex {
//! Handles case where just one of the patterns must match.
@ -159,14 +159,14 @@ impl CFGBuilder {
}
}
fn expr(&mut self, expr: @ast::expr, pred: CFGIndex) -> CFGIndex {
fn expr(&mut self, expr: @ast::Expr, pred: CFGIndex) -> CFGIndex {
match expr.node {
ast::expr_block(ref blk) => {
ast::ExprBlock(ref blk) => {
let blk_exit = self.block(blk, pred);
self.add_node(expr.id, [blk_exit])
}
ast::expr_if(cond, ref then, None) => {
ast::ExprIf(cond, ref then, None) => {
//
// [pred]
// |
@ -186,7 +186,7 @@ impl CFGBuilder {
self.add_node(expr.id, [cond_exit, then_exit]) // 3,4
}
ast::expr_if(cond, ref then, Some(otherwise)) => {
ast::ExprIf(cond, ref then, Some(otherwise)) => {
//
// [pred]
// |
@ -207,7 +207,7 @@ impl CFGBuilder {
self.add_node(expr.id, [then_exit, else_exit]) // 4, 5
}
ast::expr_while(cond, ref body) => {
ast::ExprWhile(cond, ref body) => {
//
// [pred]
// |
@ -239,9 +239,9 @@ impl CFGBuilder {
expr_exit
}
ast::expr_for_loop(*) => fail!("non-desugared expr_for_loop"),
ast::ExprForLoop(*) => fail!("non-desugared expr_for_loop"),
ast::expr_loop(ref body, _) => {
ast::ExprLoop(ref body, _) => {
//
// [pred]
// |
@ -269,7 +269,7 @@ impl CFGBuilder {
expr_exit
}
ast::expr_match(discr, ref arms) => {
ast::ExprMatch(discr, ref arms) => {
//
// [pred]
// |
@ -306,7 +306,7 @@ impl CFGBuilder {
expr_exit
}
ast::expr_binary(_, op, l, r) if ast_util::lazy_binop(op) => {
ast::ExprBinary(_, op, l, r) if ast_util::lazy_binop(op) => {
//
// [pred]
// |
@ -326,7 +326,7 @@ impl CFGBuilder {
self.add_node(expr.id, [l_exit, r_exit]) // 3,4
}
ast::expr_ret(v) => {
ast::ExprRet(v) => {
let v_exit = self.opt_expr(v, pred);
let loop_scope = self.loop_scopes[0];
self.add_exiting_edge(expr, v_exit,
@ -334,99 +334,99 @@ impl CFGBuilder {
self.add_node(expr.id, [])
}
ast::expr_break(label) => {
ast::ExprBreak(label) => {
let loop_scope = self.find_scope(expr, label);
self.add_exiting_edge(expr, pred,
loop_scope, loop_scope.break_index);
self.add_node(expr.id, [])
}
ast::expr_again(label) => {
ast::ExprAgain(label) => {
let loop_scope = self.find_scope(expr, label);
self.add_exiting_edge(expr, pred,
loop_scope, loop_scope.continue_index);
self.add_node(expr.id, [])
}
ast::expr_vec(ref elems, _) => {
ast::ExprVec(ref elems, _) => {
self.straightline(expr, pred, *elems)
}
ast::expr_call(func, ref args, _) => {
ast::ExprCall(func, ref args, _) => {
self.call(expr, pred, func, *args)
}
ast::expr_method_call(_, rcvr, _, _, ref args, _) => {
ast::ExprMethodCall(_, rcvr, _, _, ref args, _) => {
self.call(expr, pred, rcvr, *args)
}
ast::expr_index(_, l, r) |
ast::expr_binary(_, _, l, r) if self.is_method_call(expr) => {
ast::ExprIndex(_, l, r) |
ast::ExprBinary(_, _, l, r) if self.is_method_call(expr) => {
self.call(expr, pred, l, [r])
}
ast::expr_unary(_, _, e) if self.is_method_call(expr) => {
ast::ExprUnary(_, _, e) if self.is_method_call(expr) => {
self.call(expr, pred, e, [])
}
ast::expr_tup(ref exprs) => {
ast::ExprTup(ref exprs) => {
self.straightline(expr, pred, *exprs)
}
ast::expr_struct(_, ref fields, base) => {
ast::ExprStruct(_, ref fields, base) => {
let base_exit = self.opt_expr(base, pred);
let field_exprs: ~[@ast::expr] =
let field_exprs: ~[@ast::Expr] =
fields.iter().map(|f| f.expr).collect();
self.straightline(expr, base_exit, field_exprs)
}
ast::expr_repeat(elem, count, _) => {
ast::ExprRepeat(elem, count, _) => {
self.straightline(expr, pred, [elem, count])
}
ast::expr_assign(l, r) |
ast::expr_assign_op(_, _, l, r) => {
ast::ExprAssign(l, r) |
ast::ExprAssignOp(_, _, l, r) => {
self.straightline(expr, pred, [r, l])
}
ast::expr_log(l, r) |
ast::expr_index(_, l, r) |
ast::expr_binary(_, _, l, r) => { // NB: && and || handled earlier
ast::ExprLog(l, r) |
ast::ExprIndex(_, l, r) |
ast::ExprBinary(_, _, l, r) => { // NB: && and || handled earlier
self.straightline(expr, pred, [l, r])
}
ast::expr_addr_of(_, e) |
ast::expr_do_body(e) |
ast::expr_cast(e, _) |
ast::expr_unary(_, _, e) |
ast::expr_paren(e) |
ast::expr_vstore(e, _) |
ast::expr_field(e, _, _) => {
ast::ExprAddrOf(_, e) |
ast::ExprDoBody(e) |
ast::ExprCast(e, _) |
ast::ExprUnary(_, _, e) |
ast::ExprParen(e) |
ast::ExprVstore(e, _) |
ast::ExprField(e, _, _) => {
self.straightline(expr, pred, [e])
}
ast::expr_mac(*) |
ast::expr_inline_asm(*) |
ast::expr_self |
ast::expr_fn_block(*) |
ast::expr_lit(*) |
ast::expr_path(*) => {
ast::ExprMac(*) |
ast::ExprInlineAsm(*) |
ast::ExprSelf |
ast::ExprFnBlock(*) |
ast::ExprLit(*) |
ast::ExprPath(*) => {
self.straightline(expr, pred, [])
}
}
}
fn call(&mut self,
call_expr: @ast::expr,
call_expr: @ast::Expr,
pred: CFGIndex,
func_or_rcvr: @ast::expr,
args: &[@ast::expr]) -> CFGIndex {
func_or_rcvr: @ast::Expr,
args: &[@ast::Expr]) -> CFGIndex {
let func_or_rcvr_exit = self.expr(func_or_rcvr, pred);
self.straightline(call_expr, func_or_rcvr_exit, args)
}
fn exprs(&mut self,
exprs: &[@ast::expr],
exprs: &[@ast::Expr],
pred: CFGIndex) -> CFGIndex {
//! Constructs graph for `exprs` evaluated in order
@ -434,7 +434,7 @@ impl CFGBuilder {
}
fn opt_expr(&mut self,
opt_expr: Option<@ast::expr>,
opt_expr: Option<@ast::Expr>,
pred: CFGIndex) -> CFGIndex {
//! Constructs graph for `opt_expr` evaluated, if Some
@ -442,9 +442,9 @@ impl CFGBuilder {
}
fn straightline(&mut self,
expr: @ast::expr,
expr: @ast::Expr,
pred: CFGIndex,
subexprs: &[@ast::expr]) -> CFGIndex {
subexprs: &[@ast::Expr]) -> CFGIndex {
//! Handles case of an expression that evaluates `subexprs` in order
let subexprs_exit = self.exprs(subexprs, pred);
@ -473,7 +473,7 @@ impl CFGBuilder {
}
fn add_exiting_edge(&mut self,
from_expr: @ast::expr,
from_expr: @ast::Expr,
from_index: CFGIndex,
to_loop: LoopScope,
to_index: CFGIndex) {
@ -487,7 +487,7 @@ impl CFGBuilder {
}
fn find_scope(&self,
expr: @ast::expr,
expr: @ast::Expr,
label: Option<ast::Ident>) -> LoopScope {
match label {
None => {
@ -496,7 +496,7 @@ impl CFGBuilder {
Some(_) => {
match self.tcx.def_map.find(&expr.id) {
Some(&ast::def_label(loop_id)) => {
Some(&ast::DefLabel(loop_id)) => {
for l in self.loop_scopes.iter() {
if l.loop_id == loop_id {
return *l;
@ -517,7 +517,7 @@ impl CFGBuilder {
}
}
fn is_method_call(&self, expr: &ast::expr) -> bool {
fn is_method_call(&self, expr: &ast::Expr) -> bool {
self.method_map.contains_key(&expr.id)
}
}

View file

@ -33,10 +33,10 @@ impl Visitor<bool> for CheckCrateVisitor {
fn visit_item(&mut self, i:@item, env:bool) {
check_item(self, self.sess, self.ast_map, self.def_map, i, env);
}
fn visit_pat(&mut self, p:@pat, env:bool) {
fn visit_pat(&mut self, p:@Pat, env:bool) {
check_pat(self, p, env);
}
fn visit_expr(&mut self, ex:@expr, env:bool) {
fn visit_expr(&mut self, ex:@Expr, env:bool) {
check_expr(self, self.sess, self.def_map, self.method_map,
self.tcx, ex, env);
}
@ -81,23 +81,23 @@ pub fn check_item(v: &mut CheckCrateVisitor,
}
}
pub fn check_pat(v: &mut CheckCrateVisitor, p: @pat, _is_const: bool) {
fn is_str(e: @expr) -> bool {
pub fn check_pat(v: &mut CheckCrateVisitor, p: @Pat, _is_const: bool) {
fn is_str(e: @Expr) -> bool {
match e.node {
expr_vstore(
@expr { node: expr_lit(@codemap::Spanned {
ExprVstore(
@Expr { node: ExprLit(@codemap::Spanned {
node: lit_str(_),
_}),
_ },
expr_vstore_uniq
ExprVstoreUniq
) => true,
_ => false
}
}
match p.node {
// Let through plain ~-string literals here
pat_lit(a) => if !is_str(a) { v.visit_expr(a, true); },
pat_range(a, b) => {
PatLit(a) => if !is_str(a) { v.visit_expr(a, true); },
PatRange(a, b) => {
if !is_str(a) { v.visit_expr(a, true); }
if !is_str(b) { v.visit_expr(b, true); }
}
@ -110,25 +110,25 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
def_map: resolve::DefMap,
method_map: typeck::method_map,
tcx: ty::ctxt,
e: @expr,
e: @Expr,
is_const: bool) {
if is_const {
match e.node {
expr_unary(_, deref, _) => { }
expr_unary(_, box(_), _) | expr_unary(_, uniq, _) => {
ExprUnary(_, UnDeref, _) => { }
ExprUnary(_, UnBox(_), _) | ExprUnary(_, UnUniq, _) => {
sess.span_err(e.span,
"disallowed operator in constant expression");
return;
}
expr_lit(@codemap::Spanned {node: lit_str(_), _}) => { }
expr_binary(*) | expr_unary(*) => {
ExprLit(@codemap::Spanned {node: lit_str(_), _}) => { }
ExprBinary(*) | ExprUnary(*) => {
if method_map.contains_key(&e.id) {
sess.span_err(e.span, "user-defined operators are not \
allowed in constant expressions");
}
}
expr_lit(_) => (),
expr_cast(_, _) => {
ExprLit(_) => (),
ExprCast(_, _) => {
let ety = ty::expr_ty(tcx, e);
if !ty::type_is_numeric(ety) && !ty::type_is_unsafe_ptr(ety) {
sess.span_err(e.span, ~"can not cast to `" +
@ -136,7 +136,7 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
"` in a constant expression");
}
}
expr_path(ref pth) => {
ExprPath(ref pth) => {
// NB: In the future you might wish to relax this slightly
// to handle on-demand instantiation of functions via
// foo::<bar> in a const. Currently that is only done on
@ -147,10 +147,10 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
items without type parameters");
}
match def_map.find(&e.id) {
Some(&def_static(*)) |
Some(&def_fn(_, _)) |
Some(&def_variant(_, _)) |
Some(&def_struct(_)) => { }
Some(&DefStatic(*)) |
Some(&DefFn(_, _)) |
Some(&DefVariant(_, _)) |
Some(&DefStruct(_)) => { }
Some(&def) => {
debug!("(checking const) found bad def: %?", def);
@ -164,10 +164,10 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
}
}
}
expr_call(callee, _, NoSugar) => {
ExprCall(callee, _, NoSugar) => {
match def_map.find(&callee.id) {
Some(&def_struct(*)) => {} // OK.
Some(&def_variant(*)) => {} // OK.
Some(&DefStruct(*)) => {} // OK.
Some(&DefVariant(*)) => {} // OK.
_ => {
sess.span_err(
e.span,
@ -176,17 +176,17 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
}
}
}
expr_paren(e) => { check_expr(v, sess, def_map, method_map,
ExprParen(e) => { check_expr(v, sess, def_map, method_map,
tcx, e, is_const); }
expr_vstore(_, expr_vstore_slice) |
expr_vec(_, m_imm) |
expr_addr_of(m_imm, _) |
expr_field(*) |
expr_index(*) |
expr_tup(*) |
expr_repeat(*) |
expr_struct(*) => { }
expr_addr_of(*) => {
ExprVstore(_, ExprVstoreSlice) |
ExprVec(_, MutImmutable) |
ExprAddrOf(MutImmutable, _) |
ExprField(*) |
ExprIndex(*) |
ExprTup(*) |
ExprRepeat(*) |
ExprStruct(*) => { }
ExprAddrOf(*) => {
sess.span_err(
e.span,
"borrowed pointers in constants may only refer to \
@ -200,7 +200,7 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
}
}
match e.node {
expr_lit(@codemap::Spanned {node: lit_int(v, t), _}) => {
ExprLit(@codemap::Spanned {node: lit_int(v, t), _}) => {
if t != ty_char {
if (v as u64) > ast_util::int_ty_max(
if t == ty_i { sess.targ_cfg.int_type } else { t }) {
@ -208,7 +208,7 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
}
}
}
expr_lit(@codemap::Spanned {node: lit_uint(v, t), _}) => {
ExprLit(@codemap::Spanned {node: lit_uint(v, t), _}) => {
if v > ast_util::uint_ty_max(
if t == ty_u { sess.targ_cfg.uint_type } else { t }) {
sess.span_err(e.span, "literal out of range for its type");
@ -258,10 +258,10 @@ impl Visitor<env> for CheckItemRecursionVisitor {
env.idstack.pop();
}
fn visit_expr(&mut self, e: @expr, env: env) {
fn visit_expr(&mut self, e: @Expr, env: env) {
match e.node {
expr_path(*) => match env.def_map.find(&e.id) {
Some(&def_static(def_id, _)) if ast_util::is_local(def_id) =>
ExprPath(*) => match env.def_map.find(&e.id) {
Some(&DefStatic(def_id, _)) if ast_util::is_local(def_id) =>
match env.ast_map.get_copy(&def_id.node) {
ast_map::node_item(it, _) => {
self.visit_item(it, env);

View file

@ -39,30 +39,30 @@ impl Visitor<Context> for CheckLoopVisitor {
});
}
fn visit_expr(&mut self, e:@expr, cx:Context) {
fn visit_expr(&mut self, e:@Expr, cx:Context) {
match e.node {
expr_while(e, ref b) => {
ExprWhile(e, ref b) => {
self.visit_expr(e, cx);
self.visit_block(b, Context { in_loop: true,.. cx });
}
expr_loop(ref b, _) => {
ExprLoop(ref b, _) => {
self.visit_block(b, Context { in_loop: true,.. cx });
}
expr_fn_block(_, ref b) => {
ExprFnBlock(_, ref b) => {
self.visit_block(b, Context { in_loop: false, can_ret: false });
}
expr_break(_) => {
ExprBreak(_) => {
if !cx.in_loop {
self.tcx.sess.span_err(e.span, "`break` outside of loop");
}
}
expr_again(_) => {
ExprAgain(_) => {
if !cx.in_loop {
self.tcx.sess.span_err(e.span, "`loop` outside of loop");
}
}
expr_ret(oe) => {
ExprRet(oe) => {
if !cx.can_ret {
self.tcx.sess.span_err(e.span, "`return` in block function");
}

View file

@ -39,7 +39,7 @@ struct CheckMatchVisitor {
}
impl Visitor<()> for CheckMatchVisitor {
fn visit_expr(&mut self, ex:@expr, e:()) {
fn visit_expr(&mut self, ex:@Expr, e:()) {
check_expr(self, self.cx, ex, e);
}
fn visit_local(&mut self, l:@Local, e:()) {
@ -66,11 +66,11 @@ pub fn check_crate(tcx: ty::ctxt,
pub fn check_expr(v: &mut CheckMatchVisitor,
cx: @MatchCheckCtxt,
ex: @expr,
ex: @Expr,
s: ()) {
visit::walk_expr(v, ex, s);
match ex.node {
expr_match(scrut, ref arms) => {
ExprMatch(scrut, ref arms) => {
// First, check legality of move bindings.
for arm in arms.iter() {
check_legality_of_move_bindings(cx,
@ -103,7 +103,7 @@ pub fn check_expr(v: &mut CheckMatchVisitor,
}
_ => { /* We assume only enum types can be uninhabited */ }
}
let arms = arms.iter().filter_map(unguarded_pat).collect::<~[~[@pat]]>().concat_vec();
let arms = arms.iter().filter_map(unguarded_pat).collect::<~[~[@Pat]]>().concat_vec();
if arms.is_empty() {
cx.tcx.sess.span_err(ex.span, "non-exhaustive patterns");
} else {
@ -115,15 +115,15 @@ pub fn check_expr(v: &mut CheckMatchVisitor,
}
// Check for unreachable patterns
pub fn check_arms(cx: &MatchCheckCtxt, arms: &[arm]) {
pub fn check_arms(cx: &MatchCheckCtxt, arms: &[Arm]) {
let mut seen = ~[];
for arm in arms.iter() {
for pat in arm.pats.iter() {
// Check that we do not match against a static NaN (#6804)
let pat_matches_nan: &fn(@pat) -> bool = |p| {
let pat_matches_nan: &fn(@Pat) -> bool = |p| {
match cx.tcx.def_map.find(&p.id) {
Some(&def_static(did, false)) => {
Some(&DefStatic(did, false)) => {
let const_expr = lookup_const_by_id(cx.tcx, did).unwrap();
match eval_const_expr(cx.tcx, const_expr) {
const_float(f) if f.is_NaN() => true,
@ -153,14 +153,14 @@ pub fn check_arms(cx: &MatchCheckCtxt, arms: &[arm]) {
}
}
pub fn raw_pat(p: @pat) -> @pat {
pub fn raw_pat(p: @Pat) -> @Pat {
match p.node {
pat_ident(_, _, Some(s)) => { raw_pat(s) }
PatIdent(_, _, Some(s)) => { raw_pat(s) }
_ => { p }
}
}
pub fn check_exhaustive(cx: &MatchCheckCtxt, sp: Span, pats: ~[@pat]) {
pub fn check_exhaustive(cx: &MatchCheckCtxt, sp: Span, pats: ~[@Pat]) {
assert!((!pats.is_empty()));
let ext = match is_useful(cx, &pats.map(|p| ~[*p]), [wild()]) {
not_useful => {
@ -208,14 +208,14 @@ pub fn check_exhaustive(cx: &MatchCheckCtxt, sp: Span, pats: ~[@pat]) {
cx.tcx.sess.span_err(sp, msg);
}
pub type matrix = ~[~[@pat]];
pub type matrix = ~[~[@Pat]];
pub enum useful { useful(ty::t, ctor), useful_, not_useful }
#[deriving(Eq)]
pub enum ctor {
single,
variant(def_id),
variant(DefId),
val(const_val),
range(const_val, const_val),
vec(uint)
@ -234,7 +234,7 @@ pub enum ctor {
// Note: is_useful doesn't work on empty types, as the paper notes.
// So it assumes that v is non-empty.
pub fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@pat]) -> useful {
pub fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@Pat]) -> useful {
if m.len() == 0u { return useful_; }
if m[0].len() == 0u { return not_useful; }
let real_pat = match m.iter().find(|r| r[0].id != 0) {
@ -276,7 +276,7 @@ pub fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@pat]) -> useful {
ty::ty_unboxed_vec(*) | ty::ty_evec(*) => {
let max_len = do m.rev_iter().fold(0) |max_len, r| {
match r[0].node {
pat_vec(ref before, _, ref after) => {
PatVec(ref before, _, ref after) => {
num::max(before.len() + after.len(), max_len)
}
_ => max_len
@ -315,7 +315,7 @@ pub fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@pat]) -> useful {
pub fn is_useful_specialized(cx: &MatchCheckCtxt,
m: &matrix,
v: &[@pat],
v: &[@Pat],
ctor: ctor,
arity: uint,
lty: ty::t)
@ -329,34 +329,34 @@ pub fn is_useful_specialized(cx: &MatchCheckCtxt,
}
}
pub fn pat_ctor_id(cx: &MatchCheckCtxt, p: @pat) -> Option<ctor> {
pub fn pat_ctor_id(cx: &MatchCheckCtxt, p: @Pat) -> Option<ctor> {
let pat = raw_pat(p);
match pat.node {
pat_wild => { None }
pat_ident(_, _, _) | pat_enum(_, _) => {
PatWild => { None }
PatIdent(_, _, _) | PatEnum(_, _) => {
match cx.tcx.def_map.find(&pat.id) {
Some(&def_variant(_, id)) => Some(variant(id)),
Some(&def_static(did, false)) => {
Some(&DefVariant(_, id)) => Some(variant(id)),
Some(&DefStatic(did, false)) => {
let const_expr = lookup_const_by_id(cx.tcx, did).unwrap();
Some(val(eval_const_expr(cx.tcx, const_expr)))
}
_ => None
}
}
pat_lit(expr) => { Some(val(eval_const_expr(cx.tcx, expr))) }
pat_range(lo, hi) => {
PatLit(expr) => { Some(val(eval_const_expr(cx.tcx, expr))) }
PatRange(lo, hi) => {
Some(range(eval_const_expr(cx.tcx, lo), eval_const_expr(cx.tcx, hi)))
}
pat_struct(*) => {
PatStruct(*) => {
match cx.tcx.def_map.find(&pat.id) {
Some(&def_variant(_, id)) => Some(variant(id)),
Some(&DefVariant(_, id)) => Some(variant(id)),
_ => Some(single)
}
}
pat_box(_) | pat_uniq(_) | pat_tup(_) | pat_region(*) => {
PatBox(_) | PatUniq(_) | PatTup(_) | PatRegion(*) => {
Some(single)
}
pat_vec(ref before, slice, ref after) => {
PatVec(ref before, slice, ref after) => {
match slice {
Some(_) => None,
None => Some(vec(before.len() + after.len()))
@ -365,13 +365,13 @@ pub fn pat_ctor_id(cx: &MatchCheckCtxt, p: @pat) -> Option<ctor> {
}
}
pub fn is_wild(cx: &MatchCheckCtxt, p: @pat) -> bool {
pub fn is_wild(cx: &MatchCheckCtxt, p: @Pat) -> bool {
let pat = raw_pat(p);
match pat.node {
pat_wild => { true }
pat_ident(_, _, _) => {
PatWild => { true }
PatIdent(_, _, _) => {
match cx.tcx.def_map.find(&pat.id) {
Some(&def_variant(_, _)) | Some(&def_static(*)) => { false }
Some(&DefVariant(_, _)) | Some(&DefStatic(*)) => { false }
_ => { true }
}
}
@ -432,7 +432,7 @@ pub fn missing_ctor(cx: &MatchCheckCtxt,
let mut wrong = false;
for r in m.iter() {
match r[0].node {
pat_vec(ref before, ref slice, ref after) => {
PatVec(ref before, ref slice, ref after) => {
let count = before.len() + after.len();
if (count < n && slice.is_none()) || count > n {
wrong = true;
@ -455,7 +455,7 @@ pub fn missing_ctor(cx: &MatchCheckCtxt,
// Find the lengths and slices of all vector patterns.
let vec_pat_lens = do m.iter().filter_map |r| {
match r[0].node {
pat_vec(ref before, ref slice, ref after) => {
PatVec(ref before, ref slice, ref after) => {
Some((before.len() + after.len(), slice.is_some()))
}
_ => None
@ -527,34 +527,34 @@ pub fn ctor_arity(cx: &MatchCheckCtxt, ctor: &ctor, ty: ty::t) -> uint {
}
}
pub fn wild() -> @pat {
@pat {id: 0, node: pat_wild, span: dummy_sp()}
pub fn wild() -> @Pat {
@Pat {id: 0, node: PatWild, span: dummy_sp()}
}
pub fn specialize(cx: &MatchCheckCtxt,
r: &[@pat],
r: &[@Pat],
ctor_id: &ctor,
arity: uint,
left_ty: ty::t)
-> Option<~[@pat]> {
-> Option<~[@Pat]> {
// Sad, but I can't get rid of this easily
let r0 = (*raw_pat(r[0])).clone();
match r0 {
pat{id: pat_id, node: n, span: pat_span} =>
Pat{id: pat_id, node: n, span: pat_span} =>
match n {
pat_wild => {
PatWild => {
Some(vec::append(vec::from_elem(arity, wild()), r.tail()))
}
pat_ident(_, _, _) => {
PatIdent(_, _, _) => {
match cx.tcx.def_map.find(&pat_id) {
Some(&def_variant(_, id)) => {
Some(&DefVariant(_, id)) => {
if variant(id) == *ctor_id {
Some(r.tail().to_owned())
} else {
None
}
}
Some(&def_static(did, _)) => {
Some(&DefStatic(did, _)) => {
let const_expr =
lookup_const_by_id(cx.tcx, did).unwrap();
let e_v = eval_const_expr(cx.tcx, const_expr);
@ -602,9 +602,9 @@ pub fn specialize(cx: &MatchCheckCtxt,
}
}
}
pat_enum(_, args) => {
PatEnum(_, args) => {
match cx.tcx.def_map.get_copy(&pat_id) {
def_static(did, _) => {
DefStatic(did, _) => {
let const_expr =
lookup_const_by_id(cx.tcx, did).unwrap();
let e_v = eval_const_expr(cx.tcx, const_expr);
@ -639,17 +639,17 @@ pub fn specialize(cx: &MatchCheckCtxt,
None
}
}
def_variant(_, id) if variant(id) == *ctor_id => {
DefVariant(_, id) if variant(id) == *ctor_id => {
let args = match args {
Some(args) => args,
None => vec::from_elem(arity, wild())
};
Some(vec::append(args, r.tail()))
}
def_variant(_, _) => None,
DefVariant(_, _) => None,
def_fn(*) |
def_struct(*) => {
DefFn(*) |
DefStruct(*) => {
// FIXME #4731: Is this right? --pcw
let new_args;
match args {
@ -661,10 +661,10 @@ pub fn specialize(cx: &MatchCheckCtxt,
_ => None
}
}
pat_struct(_, ref flds, _) => {
PatStruct(_, ref flds, _) => {
// Is this a struct or an enum variant?
match cx.tcx.def_map.get_copy(&pat_id) {
def_variant(_, variant_id) => {
DefVariant(_, variant_id) => {
if variant(variant_id) == *ctor_id {
// FIXME #4731: Is this right? --pcw
let args = flds.map(|ty_field| {
@ -709,11 +709,11 @@ pub fn specialize(cx: &MatchCheckCtxt,
}
}
}
pat_tup(args) => Some(vec::append(args, r.tail())),
pat_box(a) | pat_uniq(a) | pat_region(a) => {
PatTup(args) => Some(vec::append(args, r.tail())),
PatBox(a) | PatUniq(a) | PatRegion(a) => {
Some(vec::append(~[a], r.tail()))
}
pat_lit(expr) => {
PatLit(expr) => {
let e_v = eval_const_expr(cx.tcx, expr);
let match_ = match *ctor_id {
val(ref v) => {
@ -743,7 +743,7 @@ pub fn specialize(cx: &MatchCheckCtxt,
};
if match_ { Some(r.tail().to_owned()) } else { None }
}
pat_range(lo, hi) => {
PatRange(lo, hi) => {
let (c_lo, c_hi) = match *ctor_id {
val(ref v) => (*v, *v),
range(ref lo, ref hi) => (*lo, *hi),
@ -767,7 +767,7 @@ pub fn specialize(cx: &MatchCheckCtxt,
}
}
}
pat_vec(before, slice, after) => {
PatVec(before, slice, after) => {
match *ctor_id {
vec(_) => {
let num_elements = before.len() + after.len();
@ -797,7 +797,7 @@ pub fn specialize(cx: &MatchCheckCtxt,
}
}
pub fn default(cx: &MatchCheckCtxt, r: &[@pat]) -> Option<~[@pat]> {
pub fn default(cx: &MatchCheckCtxt, r: &[@Pat]) -> Option<~[@Pat]> {
if is_wild(cx, r[0]) { Some(r.tail().to_owned()) }
else { None }
}
@ -833,39 +833,39 @@ pub fn check_fn(v: &mut CheckMatchVisitor,
}
}
pub fn is_refutable(cx: &MatchCheckCtxt, pat: &pat) -> bool {
pub fn is_refutable(cx: &MatchCheckCtxt, pat: &Pat) -> bool {
match cx.tcx.def_map.find(&pat.id) {
Some(&def_variant(enum_id, _)) => {
Some(&DefVariant(enum_id, _)) => {
if ty::enum_variants(cx.tcx, enum_id).len() != 1u {
return true;
}
}
Some(&def_static(*)) => return true,
Some(&DefStatic(*)) => return true,
_ => ()
}
match pat.node {
pat_box(sub) | pat_uniq(sub) | pat_region(sub) |
pat_ident(_, _, Some(sub)) => {
PatBox(sub) | PatUniq(sub) | PatRegion(sub) |
PatIdent(_, _, Some(sub)) => {
is_refutable(cx, sub)
}
pat_wild | pat_ident(_, _, None) => { false }
pat_lit(@expr {node: expr_lit(@Spanned { node: lit_nil, _}), _}) => {
PatWild | PatIdent(_, _, None) => { false }
PatLit(@Expr {node: ExprLit(@Spanned { node: lit_nil, _}), _}) => {
// "()"
false
}
pat_lit(_) | pat_range(_, _) => { true }
pat_struct(_, ref fields, _) => {
PatLit(_) | PatRange(_, _) => { true }
PatStruct(_, ref fields, _) => {
fields.iter().any(|f| is_refutable(cx, f.pat))
}
pat_tup(ref elts) => {
PatTup(ref elts) => {
elts.iter().any(|elt| is_refutable(cx, *elt))
}
pat_enum(_, Some(ref args)) => {
PatEnum(_, Some(ref args)) => {
args.iter().any(|a| is_refutable(cx, *a))
}
pat_enum(_,_) => { false }
pat_vec(*) => { true }
PatEnum(_,_) => { false }
PatVec(*) => { true }
}
}
@ -873,7 +873,7 @@ pub fn is_refutable(cx: &MatchCheckCtxt, pat: &pat) -> bool {
pub fn check_legality_of_move_bindings(cx: &MatchCheckCtxt,
has_guard: bool,
pats: &[@pat]) {
pats: &[@Pat]) {
let tcx = cx.tcx;
let def_map = tcx.def_map;
let mut by_ref_span = None;
@ -881,10 +881,10 @@ pub fn check_legality_of_move_bindings(cx: &MatchCheckCtxt,
for pat in pats.iter() {
do pat_bindings(def_map, *pat) |bm, id, span, _path| {
match bm {
bind_by_ref(_) => {
BindByRef(_) => {
by_ref_span = Some(span);
}
bind_infer => {
BindInfer => {
if cx.moves_map.contains(&id) {
any_by_move = true;
}
@ -893,7 +893,7 @@ pub fn check_legality_of_move_bindings(cx: &MatchCheckCtxt,
}
}
let check_move: &fn(@pat, Option<@pat>) = |p, sub| {
let check_move: &fn(@Pat, Option<@Pat>) = |p, sub| {
// check legality of moving out of the enum
// x @ Foo(*) is legal, but x @ Foo(y) isn't.
@ -921,7 +921,7 @@ pub fn check_legality_of_move_bindings(cx: &MatchCheckCtxt,
do walk_pat(*pat) |p| {
if pat_is_binding(def_map, p) {
match p.node {
pat_ident(_, _, sub) => {
PatIdent(_, _, sub) => {
if cx.moves_map.contains(&p.id) {
check_move(p, sub);
}

View file

@ -75,7 +75,7 @@ pub fn join_all<It: Iterator<constness>>(mut cs: It) -> constness {
cs.fold(integral_const, |a, b| join(a, b))
}
pub fn classify(e: &expr,
pub fn classify(e: &Expr,
tcx: ty::ctxt)
-> constness {
let did = ast_util::local_def(e.id);
@ -84,7 +84,7 @@ pub fn classify(e: &expr,
None => {
let cn =
match e.node {
ast::expr_lit(lit) => {
ast::ExprLit(lit) => {
match lit.node {
ast::lit_str(*) |
ast::lit_float(*) => general_const,
@ -92,39 +92,39 @@ pub fn classify(e: &expr,
}
}
ast::expr_unary(_, _, inner) |
ast::expr_paren(inner) => {
ast::ExprUnary(_, _, inner) |
ast::ExprParen(inner) => {
classify(inner, tcx)
}
ast::expr_binary(_, _, a, b) => {
ast::ExprBinary(_, _, a, b) => {
join(classify(a, tcx),
classify(b, tcx))
}
ast::expr_tup(ref es) |
ast::expr_vec(ref es, ast::m_imm) => {
ast::ExprTup(ref es) |
ast::ExprVec(ref es, ast::MutImmutable) => {
join_all(es.iter().map(|e| classify(*e, tcx)))
}
ast::expr_vstore(e, vstore) => {
ast::ExprVstore(e, vstore) => {
match vstore {
ast::expr_vstore_slice => classify(e, tcx),
ast::expr_vstore_uniq |
ast::expr_vstore_box |
ast::expr_vstore_mut_box |
ast::expr_vstore_mut_slice => non_const
ast::ExprVstoreSlice => classify(e, tcx),
ast::ExprVstoreUniq |
ast::ExprVstoreBox |
ast::ExprVstoreMutBox |
ast::ExprVstoreMutSlice => non_const
}
}
ast::expr_struct(_, ref fs, None) => {
ast::ExprStruct(_, ref fs, None) => {
let cs = do fs.iter().map |f| {
classify(f.expr, tcx)
};
join_all(cs)
}
ast::expr_cast(base, _) => {
ast::ExprCast(base, _) => {
let ty = ty::expr_ty(tcx, e);
let base = classify(base, tcx);
if ty::type_is_integral(ty) {
@ -136,26 +136,26 @@ pub fn classify(e: &expr,
}
}
ast::expr_field(base, _, _) => {
ast::ExprField(base, _, _) => {
classify(base, tcx)
}
ast::expr_index(_, base, idx) => {
ast::ExprIndex(_, base, idx) => {
join(classify(base, tcx),
classify(idx, tcx))
}
ast::expr_addr_of(ast::m_imm, base) => {
ast::ExprAddrOf(ast::MutImmutable, base) => {
classify(base, tcx)
}
// FIXME: (#3728) we can probably do something CCI-ish
// surrounding nonlocal constants. But we don't yet.
ast::expr_path(_) => {
ast::ExprPath(_) => {
lookup_constness(tcx, e)
}
ast::expr_repeat(*) => general_const,
ast::ExprRepeat(*) => general_const,
_ => non_const
};
@ -165,10 +165,10 @@ pub fn classify(e: &expr,
}
}
pub fn lookup_const(tcx: ty::ctxt, e: &expr) -> Option<@expr> {
pub fn lookup_const(tcx: ty::ctxt, e: &Expr) -> Option<@Expr> {
match tcx.def_map.find(&e.id) {
Some(&ast::def_static(def_id, false)) => lookup_const_by_id(tcx, def_id),
Some(&ast::def_variant(enum_def, variant_def)) => lookup_variant_by_id(tcx,
Some(&ast::DefStatic(def_id, false)) => lookup_const_by_id(tcx, def_id),
Some(&ast::DefVariant(enum_def, variant_def)) => lookup_variant_by_id(tcx,
enum_def,
variant_def),
_ => None
@ -176,10 +176,10 @@ pub fn lookup_const(tcx: ty::ctxt, e: &expr) -> Option<@expr> {
}
pub fn lookup_variant_by_id(tcx: ty::ctxt,
enum_def: ast::def_id,
variant_def: ast::def_id)
-> Option<@expr> {
fn variant_expr(variants: &[ast::variant], id: ast::NodeId) -> Option<@expr> {
enum_def: ast::DefId,
variant_def: ast::DefId)
-> Option<@Expr> {
fn variant_expr(variants: &[ast::variant], id: ast::NodeId) -> Option<@Expr> {
for variant in variants.iter() {
if variant.node.id == id {
return variant.node.disr_expr;
@ -225,13 +225,13 @@ pub fn lookup_variant_by_id(tcx: ty::ctxt,
}
pub fn lookup_const_by_id(tcx: ty::ctxt,
def_id: ast::def_id)
-> Option<@expr> {
def_id: ast::DefId)
-> Option<@Expr> {
if ast_util::is_local(def_id) {
match tcx.items.find(&def_id.node) {
None => None,
Some(&ast_map::node_item(it, _)) => match it.node {
item_static(_, ast::m_imm, const_expr) => Some(const_expr),
item_static(_, ast::MutImmutable, const_expr) => Some(const_expr),
_ => None
},
Some(_) => None
@ -247,7 +247,7 @@ pub fn lookup_const_by_id(tcx: ty::ctxt,
match csearch::maybe_get_item_ast(tcx, def_id,
|a, b, c, d| astencode::decode_inlined_item(a, b, maps, c, d)) {
csearch::found(ast::ii_item(item)) => match item.node {
item_static(_, ast::m_imm, const_expr) => Some(const_expr),
item_static(_, ast::MutImmutable, const_expr) => Some(const_expr),
_ => None
},
_ => None
@ -255,7 +255,7 @@ pub fn lookup_const_by_id(tcx: ty::ctxt,
}
}
pub fn lookup_constness(tcx: ty::ctxt, e: &expr) -> constness {
pub fn lookup_constness(tcx: ty::ctxt, e: &Expr) -> constness {
match lookup_const(tcx, e) {
Some(rhs) => {
let ty = ty::expr_ty(tcx, rhs);
@ -272,7 +272,7 @@ pub fn lookup_constness(tcx: ty::ctxt, e: &expr) -> constness {
struct ConstEvalVisitor { tcx: ty::ctxt }
impl Visitor<()> for ConstEvalVisitor {
fn visit_expr_post(&mut self, e:@expr, _:()) {
fn visit_expr_post(&mut self, e:@Expr, _:()) {
classify(e, self.tcx);
}
}
@ -296,19 +296,19 @@ pub enum const_val {
const_bool(bool)
}
pub fn eval_const_expr(tcx: middle::ty::ctxt, e: &expr) -> const_val {
pub fn eval_const_expr(tcx: middle::ty::ctxt, e: &Expr) -> const_val {
match eval_const_expr_partial(&tcx, e) {
Ok(r) => r,
Err(s) => tcx.sess.span_fatal(e.span, s)
}
}
pub fn eval_const_expr_partial<T: ty::ExprTyProvider>(tcx: &T, e: &expr)
pub fn eval_const_expr_partial<T: ty::ExprTyProvider>(tcx: &T, e: &Expr)
-> Result<const_val, ~str> {
use middle::ty;
fn fromb(b: bool) -> Result<const_val, ~str> { Ok(const_int(b as i64)) }
match e.node {
expr_unary(_, neg, inner) => {
ExprUnary(_, UnNeg, inner) => {
match eval_const_expr_partial(tcx, inner) {
Ok(const_float(f)) => Ok(const_float(-f)),
Ok(const_int(i)) => Ok(const_int(-i)),
@ -318,7 +318,7 @@ pub fn eval_const_expr_partial<T: ty::ExprTyProvider>(tcx: &T, e: &expr)
ref err => ((*err).clone())
}
}
expr_unary(_, not, inner) => {
ExprUnary(_, UnNot, inner) => {
match eval_const_expr_partial(tcx, inner) {
Ok(const_int(i)) => Ok(const_int(!i)),
Ok(const_uint(i)) => Ok(const_uint(!i)),
@ -326,100 +326,100 @@ pub fn eval_const_expr_partial<T: ty::ExprTyProvider>(tcx: &T, e: &expr)
_ => Err(~"Not on float or string")
}
}
expr_binary(_, op, a, b) => {
ExprBinary(_, op, a, b) => {
match (eval_const_expr_partial(tcx, a),
eval_const_expr_partial(tcx, b)) {
(Ok(const_float(a)), Ok(const_float(b))) => {
match op {
add => Ok(const_float(a + b)),
subtract => Ok(const_float(a - b)),
mul => Ok(const_float(a * b)),
div => Ok(const_float(a / b)),
rem => Ok(const_float(a % b)),
eq => fromb(a == b),
lt => fromb(a < b),
le => fromb(a <= b),
ne => fromb(a != b),
ge => fromb(a >= b),
gt => fromb(a > b),
BiAdd => Ok(const_float(a + b)),
BiSub => Ok(const_float(a - b)),
BiMul => Ok(const_float(a * b)),
BiDiv => Ok(const_float(a / b)),
BiRem => Ok(const_float(a % b)),
BiEq => fromb(a == b),
BiLt => fromb(a < b),
BiLe => fromb(a <= b),
BiNe => fromb(a != b),
BiGe => fromb(a >= b),
BiGt => fromb(a > b),
_ => Err(~"Can't do this op on floats")
}
}
(Ok(const_int(a)), Ok(const_int(b))) => {
match op {
add => Ok(const_int(a + b)),
subtract => Ok(const_int(a - b)),
mul => Ok(const_int(a * b)),
div if b == 0 => Err(~"attempted to divide by zero"),
div => Ok(const_int(a / b)),
rem if b == 0 => Err(~"attempted remainder with a divisor of zero"),
rem => Ok(const_int(a % b)),
and | bitand => Ok(const_int(a & b)),
or | bitor => Ok(const_int(a | b)),
bitxor => Ok(const_int(a ^ b)),
shl => Ok(const_int(a << b)),
shr => Ok(const_int(a >> b)),
eq => fromb(a == b),
lt => fromb(a < b),
le => fromb(a <= b),
ne => fromb(a != b),
ge => fromb(a >= b),
gt => fromb(a > b)
BiAdd => Ok(const_int(a + b)),
BiSub => Ok(const_int(a - b)),
BiMul => Ok(const_int(a * b)),
BiDiv if b == 0 => Err(~"attempted to divide by zero"),
BiDiv => Ok(const_int(a / b)),
BiRem if b == 0 => Err(~"attempted remainder with a divisor of zero"),
BiRem => Ok(const_int(a % b)),
BiAnd | BiBitAnd => Ok(const_int(a & b)),
BiOr | BiBitOr => Ok(const_int(a | b)),
BiBitXor => Ok(const_int(a ^ b)),
BiShl => Ok(const_int(a << b)),
BiShr => Ok(const_int(a >> b)),
BiEq => fromb(a == b),
BiLt => fromb(a < b),
BiLe => fromb(a <= b),
BiNe => fromb(a != b),
BiGe => fromb(a >= b),
BiGt => fromb(a > b)
}
}
(Ok(const_uint(a)), Ok(const_uint(b))) => {
match op {
add => Ok(const_uint(a + b)),
subtract => Ok(const_uint(a - b)),
mul => Ok(const_uint(a * b)),
div if b == 0 => Err(~"attempted to divide by zero"),
div => Ok(const_uint(a / b)),
rem if b == 0 => Err(~"attempted remainder with a divisor of zero"),
rem => Ok(const_uint(a % b)),
and | bitand => Ok(const_uint(a & b)),
or | bitor => Ok(const_uint(a | b)),
bitxor => Ok(const_uint(a ^ b)),
shl => Ok(const_uint(a << b)),
shr => Ok(const_uint(a >> b)),
eq => fromb(a == b),
lt => fromb(a < b),
le => fromb(a <= b),
ne => fromb(a != b),
ge => fromb(a >= b),
gt => fromb(a > b),
BiAdd => Ok(const_uint(a + b)),
BiSub => Ok(const_uint(a - b)),
BiMul => Ok(const_uint(a * b)),
BiDiv if b == 0 => Err(~"attempted to divide by zero"),
BiDiv => Ok(const_uint(a / b)),
BiRem if b == 0 => Err(~"attempted remainder with a divisor of zero"),
BiRem => Ok(const_uint(a % b)),
BiAnd | BiBitAnd => Ok(const_uint(a & b)),
BiOr | BiBitOr => Ok(const_uint(a | b)),
BiBitXor => Ok(const_uint(a ^ b)),
BiShl => Ok(const_uint(a << b)),
BiShr => Ok(const_uint(a >> b)),
BiEq => fromb(a == b),
BiLt => fromb(a < b),
BiLe => fromb(a <= b),
BiNe => fromb(a != b),
BiGe => fromb(a >= b),
BiGt => fromb(a > b),
}
}
// shifts can have any integral type as their rhs
(Ok(const_int(a)), Ok(const_uint(b))) => {
match op {
shl => Ok(const_int(a << b)),
shr => Ok(const_int(a >> b)),
BiShl => Ok(const_int(a << b)),
BiShr => Ok(const_int(a >> b)),
_ => Err(~"Can't do this op on an int and uint")
}
}
(Ok(const_uint(a)), Ok(const_int(b))) => {
match op {
shl => Ok(const_uint(a << b)),
shr => Ok(const_uint(a >> b)),
BiShl => Ok(const_uint(a << b)),
BiShr => Ok(const_uint(a >> b)),
_ => Err(~"Can't do this op on a uint and int")
}
}
(Ok(const_bool(a)), Ok(const_bool(b))) => {
Ok(const_bool(match op {
and => a && b,
or => a || b,
bitxor => a ^ b,
bitand => a & b,
bitor => a | b,
eq => a == b,
ne => a != b,
BiAnd => a && b,
BiOr => a || b,
BiBitXor => a ^ b,
BiBitAnd => a & b,
BiBitOr => a | b,
BiEq => a == b,
BiNe => a != b,
_ => return Err(~"Can't do this op on bools")
}))
}
_ => Err(~"Bad operands for binary")
}
}
expr_cast(base, _) => {
ExprCast(base, _) => {
let ety = tcx.expr_ty(e);
let base = eval_const_expr_partial(tcx, base);
match base {
@ -455,16 +455,16 @@ pub fn eval_const_expr_partial<T: ty::ExprTyProvider>(tcx: &T, e: &expr)
}
}
}
expr_path(_) => {
ExprPath(_) => {
match lookup_const(tcx.ty_ctxt(), e) {
Some(actual_e) => eval_const_expr_partial(&tcx.ty_ctxt(), actual_e),
None => Err(~"Non-constant path in constant expr")
}
}
expr_lit(lit) => Ok(lit_to_const(lit)),
ExprLit(lit) => Ok(lit_to_const(lit)),
// If we have a vstore, just keep going; it has to be a string
expr_vstore(e, _) => eval_const_expr_partial(tcx, e),
expr_paren(e) => eval_const_expr_partial(tcx, e),
ExprVstore(e, _) => eval_const_expr_partial(tcx, e),
ExprParen(e) => eval_const_expr_partial(tcx, e),
_ => Err(~"Unsupported constant expr")
}
}
@ -497,11 +497,11 @@ pub fn compare_const_vals(a: &const_val, b: &const_val) -> Option<int> {
}
}
pub fn compare_lit_exprs(tcx: middle::ty::ctxt, a: &expr, b: &expr) -> Option<int> {
pub fn compare_lit_exprs(tcx: middle::ty::ctxt, a: &Expr, b: &Expr) -> Option<int> {
compare_const_vals(&eval_const_expr(tcx, a), &eval_const_expr(tcx, b))
}
pub fn lit_expr_eq(tcx: middle::ty::ctxt, a: &expr, b: &expr) -> Option<bool> {
pub fn lit_expr_eq(tcx: middle::ty::ctxt, a: &Expr, b: &Expr) -> Option<bool> {
compare_lit_exprs(tcx, a, b).map_move(|val| val == 0)
}

View file

@ -390,40 +390,40 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
fn walk_stmt(&mut self,
stmt: @ast::stmt,
stmt: @ast::Stmt,
in_out: &mut [uint],
loop_scopes: &mut ~[LoopScope]) {
match stmt.node {
ast::stmt_decl(decl, _) => {
ast::StmtDecl(decl, _) => {
self.walk_decl(decl, in_out, loop_scopes);
}
ast::stmt_expr(expr, _) | ast::stmt_semi(expr, _) => {
ast::StmtExpr(expr, _) | ast::StmtSemi(expr, _) => {
self.walk_expr(expr, in_out, loop_scopes);
}
ast::stmt_mac(*) => {
ast::StmtMac(*) => {
self.tcx().sess.span_bug(stmt.span, "unexpanded macro");
}
}
}
fn walk_decl(&mut self,
decl: @ast::decl,
decl: @ast::Decl,
in_out: &mut [uint],
loop_scopes: &mut ~[LoopScope]) {
match decl.node {
ast::decl_local(local) => {
ast::DeclLocal(local) => {
self.walk_opt_expr(local.init, in_out, loop_scopes);
self.walk_pat(local.pat, in_out, loop_scopes);
}
ast::decl_item(_) => {}
ast::DeclItem(_) => {}
}
}
fn walk_expr(&mut self,
expr: @ast::expr,
expr: @ast::Expr,
in_out: &mut [uint],
loop_scopes: &mut ~[LoopScope]) {
debug!("DataFlowContext::walk_expr(expr=%s, in_out=%s)",
@ -432,7 +432,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
self.merge_with_entry_set(expr.id, in_out);
match expr.node {
ast::expr_fn_block(ref decl, ref body) => {
ast::ExprFnBlock(ref decl, ref body) => {
if self.dfcx.oper.walk_closures() {
// In the absence of once fns, we must assume that
// every function body will execute more than
@ -521,7 +521,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
}
ast::expr_if(cond, ref then, els) => {
ast::ExprIf(cond, ref then, els) => {
//
// (cond)
// |
@ -544,7 +544,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
join_bits(&self.dfcx.oper, then_bits, in_out);
}
ast::expr_while(cond, ref blk) => {
ast::ExprWhile(cond, ref blk) => {
//
// (expr) <--+
// | |
@ -570,9 +570,9 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
copy_bits(new_loop_scope.break_bits, in_out);
}
ast::expr_for_loop(*) => fail!("non-desugared expr_for_loop"),
ast::ExprForLoop(*) => fail!("non-desugared expr_for_loop"),
ast::expr_loop(ref blk, _) => {
ast::ExprLoop(ref blk, _) => {
//
// (expr) <--+
// | |
@ -596,7 +596,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
copy_bits(new_loop_scope.break_bits, in_out);
}
ast::expr_match(discr, ref arms) => {
ast::ExprMatch(discr, ref arms) => {
//
// (discr)
// / | \
@ -630,100 +630,100 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
}
ast::expr_ret(o_e) => {
ast::ExprRet(o_e) => {
self.walk_opt_expr(o_e, in_out, loop_scopes);
self.reset(in_out);
}
ast::expr_break(label) => {
ast::ExprBreak(label) => {
let scope = self.find_scope(expr, label, loop_scopes);
self.break_from_to(expr, scope, in_out);
self.reset(in_out);
}
ast::expr_again(label) => {
ast::ExprAgain(label) => {
let scope = self.find_scope(expr, label, loop_scopes);
self.pop_scopes(expr, scope, in_out);
self.add_to_entry_set(scope.loop_id, reslice(in_out));
self.reset(in_out);
}
ast::expr_assign(l, r) |
ast::expr_assign_op(_, _, l, r) => {
ast::ExprAssign(l, r) |
ast::ExprAssignOp(_, _, l, r) => {
self.walk_expr(r, in_out, loop_scopes);
self.walk_expr(l, in_out, loop_scopes);
}
ast::expr_vec(ref exprs, _) => {
ast::ExprVec(ref exprs, _) => {
self.walk_exprs(*exprs, in_out, loop_scopes)
}
ast::expr_repeat(l, r, _) => {
ast::ExprRepeat(l, r, _) => {
self.walk_expr(l, in_out, loop_scopes);
self.walk_expr(r, in_out, loop_scopes);
}
ast::expr_struct(_, ref fields, with_expr) => {
ast::ExprStruct(_, ref fields, with_expr) => {
for field in fields.iter() {
self.walk_expr(field.expr, in_out, loop_scopes);
}
self.walk_opt_expr(with_expr, in_out, loop_scopes);
}
ast::expr_call(f, ref args, _) => {
ast::ExprCall(f, ref args, _) => {
self.walk_call(f.id, expr.id,
f, *args, in_out, loop_scopes);
}
ast::expr_method_call(callee_id, rcvr, _, _, ref args, _) => {
ast::ExprMethodCall(callee_id, rcvr, _, _, ref args, _) => {
self.walk_call(callee_id, expr.id,
rcvr, *args, in_out, loop_scopes);
}
ast::expr_index(callee_id, l, r) |
ast::expr_binary(callee_id, _, l, r) if self.is_method_call(expr) => {
ast::ExprIndex(callee_id, l, r) |
ast::ExprBinary(callee_id, _, l, r) if self.is_method_call(expr) => {
self.walk_call(callee_id, expr.id,
l, [r], in_out, loop_scopes);
}
ast::expr_unary(callee_id, _, e) if self.is_method_call(expr) => {
ast::ExprUnary(callee_id, _, e) if self.is_method_call(expr) => {
self.walk_call(callee_id, expr.id,
e, [], in_out, loop_scopes);
}
ast::expr_tup(ref exprs) => {
ast::ExprTup(ref exprs) => {
self.walk_exprs(*exprs, in_out, loop_scopes);
}
ast::expr_binary(_, op, l, r) if ast_util::lazy_binop(op) => {
ast::ExprBinary(_, op, l, r) if ast_util::lazy_binop(op) => {
self.walk_expr(l, in_out, loop_scopes);
let temp = reslice(in_out).to_owned();
self.walk_expr(r, in_out, loop_scopes);
join_bits(&self.dfcx.oper, temp, in_out);
}
ast::expr_log(l, r) |
ast::expr_index(_, l, r) |
ast::expr_binary(_, _, l, r) => {
ast::ExprLog(l, r) |
ast::ExprIndex(_, l, r) |
ast::ExprBinary(_, _, l, r) => {
self.walk_exprs([l, r], in_out, loop_scopes);
}
ast::expr_lit(*) |
ast::expr_path(*) |
ast::expr_self => {
ast::ExprLit(*) |
ast::ExprPath(*) |
ast::ExprSelf => {
}
ast::expr_addr_of(_, e) |
ast::expr_do_body(e) |
ast::expr_cast(e, _) |
ast::expr_unary(_, _, e) |
ast::expr_paren(e) |
ast::expr_vstore(e, _) |
ast::expr_field(e, _, _) => {
ast::ExprAddrOf(_, e) |
ast::ExprDoBody(e) |
ast::ExprCast(e, _) |
ast::ExprUnary(_, _, e) |
ast::ExprParen(e) |
ast::ExprVstore(e, _) |
ast::ExprField(e, _, _) => {
self.walk_expr(e, in_out, loop_scopes);
}
ast::expr_inline_asm(ref inline_asm) => {
ast::ExprInlineAsm(ref inline_asm) => {
for &(_, expr) in inline_asm.inputs.iter() {
self.walk_expr(expr, in_out, loop_scopes);
}
@ -732,11 +732,11 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
}
ast::expr_block(ref blk) => {
ast::ExprBlock(ref blk) => {
self.walk_block(blk, in_out, loop_scopes);
}
ast::expr_mac(*) => {
ast::ExprMac(*) => {
self.tcx().sess.span_bug(expr.span, "unexpanded macro");
}
}
@ -745,7 +745,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
fn pop_scopes(&mut self,
from_expr: @ast::expr,
from_expr: @ast::Expr,
to_scope: &mut LoopScope,
in_out: &mut [uint]) {
//! Whenever you have a `break` or a `loop` statement, flow
@ -779,7 +779,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
fn break_from_to(&mut self,
from_expr: @ast::expr,
from_expr: @ast::Expr,
to_scope: &mut LoopScope,
in_out: &mut [uint]) {
self.pop_scopes(from_expr, to_scope, in_out);
@ -792,7 +792,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
fn walk_exprs(&mut self,
exprs: &[@ast::expr],
exprs: &[@ast::Expr],
in_out: &mut [uint],
loop_scopes: &mut ~[LoopScope]) {
for &expr in exprs.iter() {
@ -801,7 +801,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
fn walk_opt_expr(&mut self,
opt_expr: Option<@ast::expr>,
opt_expr: Option<@ast::Expr>,
in_out: &mut [uint],
loop_scopes: &mut ~[LoopScope]) {
for &expr in opt_expr.iter() {
@ -812,8 +812,8 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
fn walk_call(&mut self,
_callee_id: ast::NodeId,
call_id: ast::NodeId,
arg0: @ast::expr,
args: &[@ast::expr],
arg0: @ast::Expr,
args: &[@ast::Expr],
in_out: &mut [uint],
loop_scopes: &mut ~[LoopScope]) {
self.walk_expr(arg0, in_out, loop_scopes);
@ -831,7 +831,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
fn walk_pat(&mut self,
pat: @ast::pat,
pat: @ast::Pat,
in_out: &mut [uint],
_loop_scopes: &mut ~[LoopScope]) {
debug!("DataFlowContext::walk_pat(pat=%s, in_out=%s)",
@ -846,7 +846,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
fn walk_pat_alternatives(&mut self,
pats: &[@ast::pat],
pats: &[@ast::Pat],
in_out: &mut [uint],
loop_scopes: &mut ~[LoopScope]) {
if pats.len() == 1 {
@ -866,7 +866,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
}
fn find_scope<'a>(&self,
expr: @ast::expr,
expr: @ast::Expr,
label: Option<ast::Ident>,
loop_scopes: &'a mut ~[LoopScope]) -> &'a mut LoopScope {
let index = match label {
@ -877,7 +877,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
Some(_) => {
match self.tcx().def_map.find(&expr.id) {
Some(&ast::def_label(loop_id)) => {
Some(&ast::DefLabel(loop_id)) => {
match loop_scopes.iter().position(|l| l.loop_id == loop_id) {
Some(i) => i,
None => {
@ -900,7 +900,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
&mut loop_scopes[index]
}
fn is_method_call(&self, expr: @ast::expr) -> bool {
fn is_method_call(&self, expr: @ast::Expr) -> bool {
self.dfcx.method_map.contains_key(&expr.id)
}

View file

@ -16,14 +16,14 @@ use middle::ty;
use middle::typeck::method_map;
use util::ppaux;
use syntax::ast::{deref, expr_call, expr_inline_asm, expr_method_call};
use syntax::ast::{expr_unary, unsafe_fn, expr_path};
use syntax::ast::{UnDeref, ExprCall, ExprInlineAsm, ExprMethodCall};
use syntax::ast::{ExprUnary, unsafe_fn, ExprPath};
use syntax::ast;
use syntax::codemap::Span;
use syntax::visit::{fk_item_fn, fk_method};
use syntax::visit;
use syntax::visit::{Visitor,fn_kind};
use syntax::ast::{fn_decl,Block,NodeId,expr};
use syntax::ast::{fn_decl,Block,NodeId,Expr};
#[deriving(Eq)]
enum UnsafeContext {
@ -112,10 +112,10 @@ impl Visitor<()> for EffectCheckVisitor {
self.context.unsafe_context = old_unsafe_context
}
fn visit_expr(&mut self, expr:@expr, _:()) {
fn visit_expr(&mut self, expr:@Expr, _:()) {
match expr.node {
expr_method_call(callee_id, _, _, _, _, _) => {
ExprMethodCall(callee_id, _, _, _, _, _) => {
let base_type = ty::node_id_to_type(self.tcx, callee_id);
debug!("effect: method call case, base type is %s",
ppaux::ty_to_str(self.tcx, base_type));
@ -124,7 +124,7 @@ impl Visitor<()> for EffectCheckVisitor {
"invocation of unsafe method")
}
}
expr_call(base, _, _) => {
ExprCall(base, _, _) => {
let base_type = ty::node_id_to_type(self.tcx, base.id);
debug!("effect: call case, base type is %s",
ppaux::ty_to_str(self.tcx, base_type));
@ -132,7 +132,7 @@ impl Visitor<()> for EffectCheckVisitor {
self.require_unsafe(expr.span, "call to unsafe function")
}
}
expr_unary(_, deref, base) => {
ExprUnary(_, UnDeref, base) => {
let base_type = ty::node_id_to_type(self.tcx, base.id);
debug!("effect: unary case, base type is %s",
ppaux::ty_to_str(self.tcx, base_type));
@ -144,12 +144,12 @@ impl Visitor<()> for EffectCheckVisitor {
_ => {}
}
}
expr_inline_asm(*) => {
ExprInlineAsm(*) => {
self.require_unsafe(expr.span, "use of inline assembly")
}
expr_path(*) => {
ExprPath(*) => {
match ty::resolve_expr(self.tcx, expr) {
ast::def_static(_, true) => {
ast::DefStatic(_, true) => {
self.require_unsafe(expr.span, "use of mutable static")
}
_ => {}

View file

@ -26,7 +26,7 @@ use syntax::ast::{item};
// (The def_upvar will already have been stripped).
#[deriving(Encodable, Decodable)]
pub struct freevar_entry {
def: ast::def, //< The variable being accessed free.
def: ast::Def, //< The variable being accessed free.
span: Span //< First span where it is accessed (there can be multiple)
}
pub type freevar_info = @~[@freevar_entry];
@ -44,13 +44,13 @@ impl Visitor<int> for CollectFreevarsVisitor {
// ignore_item
}
fn visit_expr(&mut self, expr:@ast::expr, depth:int) {
fn visit_expr(&mut self, expr:@ast::Expr, depth:int) {
match expr.node {
ast::expr_fn_block(*) => {
ast::ExprFnBlock(*) => {
visit::walk_expr(self, expr, depth + 1)
}
ast::expr_path(*) | ast::expr_self => {
ast::ExprPath(*) | ast::ExprSelf => {
let mut i = 0;
match self.def_map.find(&expr.id) {
None => fail!("path not found"),
@ -58,7 +58,7 @@ impl Visitor<int> for CollectFreevarsVisitor {
let mut def = df;
while i < depth {
match def {
ast::def_upvar(_, inner, _, _) => { def = *inner; }
ast::DefUpvar(_, inner, _, _) => { def = *inner; }
_ => break
}
i += 1;

View file

@ -61,7 +61,7 @@ struct KindAnalysisVisitor;
impl Visitor<Context> for KindAnalysisVisitor {
fn visit_expr(&mut self, ex:@expr, e:Context) {
fn visit_expr(&mut self, ex:@Expr, e:Context) {
check_expr(self, ex, e);
}
@ -92,7 +92,7 @@ pub fn check_crate(tcx: ty::ctxt,
fn check_struct_safe_for_destructor(cx: Context,
span: Span,
struct_did: def_id) {
struct_did: DefId) {
let struct_tpt = ty::lookup_item_type(cx.tcx, struct_did);
if !struct_tpt.generics.has_type_params() {
let struct_ty = ty::mk_struct(cx.tcx, struct_did, ty::substs {
@ -260,7 +260,7 @@ fn check_fn(
visit::walk_fn(v, fk, decl, body, sp, fn_id, cx);
}
pub fn check_expr(v: &mut KindAnalysisVisitor, e: @expr, cx: Context) {
pub fn check_expr(v: &mut KindAnalysisVisitor, e: @Expr, cx: Context) {
debug!("kind::check_expr(%s)", expr_to_str(e, cx.tcx.sess.intr()));
// Handle any kind bounds on type parameters
@ -272,7 +272,7 @@ pub fn check_expr(v: &mut KindAnalysisVisitor, e: @expr, cx: Context) {
let r = cx.tcx.node_type_substs.find(&type_parameter_id);
for ts in r.iter() {
let type_param_defs = match e.node {
expr_path(_) => {
ExprPath(_) => {
let did = ast_util::def_id_of_def(cx.tcx.def_map.get_copy(&e.id));
ty::lookup_item_type(cx.tcx, did).generics.type_param_defs
}
@ -301,11 +301,11 @@ pub fn check_expr(v: &mut KindAnalysisVisitor, e: @expr, cx: Context) {
}
match e.node {
expr_unary(_, box(_), interior) => {
ExprUnary(_, UnBox(_), interior) => {
let interior_type = ty::expr_ty(cx.tcx, interior);
let _ = check_durable(cx.tcx, interior_type, interior.span);
}
expr_cast(source, _) => {
ExprCast(source, _) => {
check_cast_for_escaping_regions(cx, source, e);
match ty::get(ty::expr_ty(cx.tcx, e)).sty {
ty::ty_trait(_, _, _, _, bounds) => {
@ -315,7 +315,7 @@ pub fn check_expr(v: &mut KindAnalysisVisitor, e: @expr, cx: Context) {
_ => { }
}
}
expr_repeat(element, count_expr, _) => {
ExprRepeat(element, count_expr, _) => {
let count = ty::eval_repeat_count(&cx.tcx, count_expr);
if count > 1 {
let element_ty = ty::expr_ty(cx.tcx, element);
@ -412,11 +412,11 @@ pub fn check_trait_cast_bounds(cx: Context, sp: Span, ty: ty::t,
}
}
fn is_nullary_variant(cx: Context, ex: @expr) -> bool {
fn is_nullary_variant(cx: Context, ex: @Expr) -> bool {
match ex.node {
expr_path(_) => {
ExprPath(_) => {
match cx.tcx.def_map.get_copy(&ex.id) {
def_variant(edid, vdid) => {
DefVariant(edid, vdid) => {
ty::enum_variant_with_id(cx.tcx, edid, vdid).args.is_empty()
}
_ => false
@ -426,18 +426,18 @@ fn is_nullary_variant(cx: Context, ex: @expr) -> bool {
}
}
fn check_imm_free_var(cx: Context, def: def, sp: Span) {
fn check_imm_free_var(cx: Context, def: Def, sp: Span) {
match def {
def_local(_, is_mutbl) => {
DefLocal(_, is_mutbl) => {
if is_mutbl {
cx.tcx.sess.span_err(
sp,
"mutable variables cannot be implicitly captured");
}
}
def_arg(*) => { /* ok */ }
def_upvar(_, def1, _, _) => { check_imm_free_var(cx, *def1, sp); }
def_binding(*) | def_self(*) => { /*ok*/ }
DefArg(*) => { /* ok */ }
DefUpvar(_, def1, _, _) => { check_imm_free_var(cx, *def1, sp); }
DefBinding(*) | DefSelf(*) => { /*ok*/ }
_ => {
cx.tcx.sess.span_bug(
sp,
@ -515,8 +515,8 @@ pub fn check_durable(tcx: ty::ctxt, ty: ty::t, sp: Span) -> bool {
/// FIXME(#5723)---This code should probably move into regionck.
pub fn check_cast_for_escaping_regions(
cx: Context,
source: &expr,
target: &expr)
source: &Expr,
target: &Expr)
{
// Determine what type we are casting to; if it is not an trait, then no
// worries.

View file

@ -24,7 +24,7 @@ use driver::session::Session;
use metadata::csearch::each_lang_item;
use metadata::cstore::iter_crate_data;
use middle::ty::{BuiltinBound, BoundFreeze, BoundSend, BoundSized};
use syntax::ast::{Crate, def_id, MetaItem};
use syntax::ast::{Crate, DefId, MetaItem};
use syntax::ast_util::local_def;
use syntax::attr::AttrMetaMethods;
use syntax::ast::{item};
@ -83,7 +83,7 @@ pub enum LangItem {
}
pub struct LanguageItems {
items: [Option<def_id>, ..41]
items: [Option<DefId>, ..41]
}
impl LanguageItems {
@ -93,7 +93,7 @@ impl LanguageItems {
}
}
pub fn each_item(&self, f: &fn(Option<def_id>, uint) -> bool) -> bool {
pub fn each_item(&self, f: &fn(Option<DefId>, uint) -> bool) -> bool {
self.items.iter().enumerate().advance(|(i, &item)| f(item, i))
}
@ -151,7 +151,7 @@ impl LanguageItems {
// FIXME #4621: Method macros sure would be nice here.
pub fn require(&self, it: LangItem) -> Result<def_id, ~str> {
pub fn require(&self, it: LangItem) -> Result<DefId, ~str> {
match self.items[it as uint] {
Some(id) => Ok(id),
None => Err(fmt!("requires `%s` lang_item",
@ -159,7 +159,7 @@ impl LanguageItems {
}
}
pub fn to_builtin_kind(&self, id: def_id) -> Option<BuiltinBound> {
pub fn to_builtin_kind(&self, id: DefId) -> Option<BuiltinBound> {
if Some(id) == self.freeze_trait() {
Some(BoundFreeze)
} else if Some(id) == self.send_trait() {
@ -171,128 +171,128 @@ impl LanguageItems {
}
}
pub fn freeze_trait(&self) -> Option<def_id> {
pub fn freeze_trait(&self) -> Option<DefId> {
self.items[FreezeTraitLangItem as uint]
}
pub fn send_trait(&self) -> Option<def_id> {
pub fn send_trait(&self) -> Option<DefId> {
self.items[SendTraitLangItem as uint]
}
pub fn sized_trait(&self) -> Option<def_id> {
pub fn sized_trait(&self) -> Option<DefId> {
self.items[SizedTraitLangItem as uint]
}
pub fn drop_trait(&self) -> Option<def_id> {
pub fn drop_trait(&self) -> Option<DefId> {
self.items[DropTraitLangItem as uint]
}
pub fn add_trait(&self) -> Option<def_id> {
pub fn add_trait(&self) -> Option<DefId> {
self.items[AddTraitLangItem as uint]
}
pub fn sub_trait(&self) -> Option<def_id> {
pub fn sub_trait(&self) -> Option<DefId> {
self.items[SubTraitLangItem as uint]
}
pub fn mul_trait(&self) -> Option<def_id> {
pub fn mul_trait(&self) -> Option<DefId> {
self.items[MulTraitLangItem as uint]
}
pub fn div_trait(&self) -> Option<def_id> {
pub fn div_trait(&self) -> Option<DefId> {
self.items[DivTraitLangItem as uint]
}
pub fn rem_trait(&self) -> Option<def_id> {
pub fn rem_trait(&self) -> Option<DefId> {
self.items[RemTraitLangItem as uint]
}
pub fn neg_trait(&self) -> Option<def_id> {
pub fn neg_trait(&self) -> Option<DefId> {
self.items[NegTraitLangItem as uint]
}
pub fn not_trait(&self) -> Option<def_id> {
pub fn not_trait(&self) -> Option<DefId> {
self.items[NotTraitLangItem as uint]
}
pub fn bitxor_trait(&self) -> Option<def_id> {
pub fn bitxor_trait(&self) -> Option<DefId> {
self.items[BitXorTraitLangItem as uint]
}
pub fn bitand_trait(&self) -> Option<def_id> {
pub fn bitand_trait(&self) -> Option<DefId> {
self.items[BitAndTraitLangItem as uint]
}
pub fn bitor_trait(&self) -> Option<def_id> {
pub fn bitor_trait(&self) -> Option<DefId> {
self.items[BitOrTraitLangItem as uint]
}
pub fn shl_trait(&self) -> Option<def_id> {
pub fn shl_trait(&self) -> Option<DefId> {
self.items[ShlTraitLangItem as uint]
}
pub fn shr_trait(&self) -> Option<def_id> {
pub fn shr_trait(&self) -> Option<DefId> {
self.items[ShrTraitLangItem as uint]
}
pub fn index_trait(&self) -> Option<def_id> {
pub fn index_trait(&self) -> Option<DefId> {
self.items[IndexTraitLangItem as uint]
}
pub fn eq_trait(&self) -> Option<def_id> {
pub fn eq_trait(&self) -> Option<DefId> {
self.items[EqTraitLangItem as uint]
}
pub fn ord_trait(&self) -> Option<def_id> {
pub fn ord_trait(&self) -> Option<DefId> {
self.items[OrdTraitLangItem as uint]
}
pub fn str_eq_fn(&self) -> Option<def_id> {
pub fn str_eq_fn(&self) -> Option<DefId> {
self.items[StrEqFnLangItem as uint]
}
pub fn uniq_str_eq_fn(&self) -> Option<def_id> {
pub fn uniq_str_eq_fn(&self) -> Option<DefId> {
self.items[UniqStrEqFnLangItem as uint]
}
pub fn log_type_fn(&self) -> Option<def_id> {
pub fn log_type_fn(&self) -> Option<DefId> {
self.items[LogTypeFnLangItem as uint]
}
pub fn fail_fn(&self) -> Option<def_id> {
pub fn fail_fn(&self) -> Option<DefId> {
self.items[FailFnLangItem as uint]
}
pub fn fail_bounds_check_fn(&self) -> Option<def_id> {
pub fn fail_bounds_check_fn(&self) -> Option<DefId> {
self.items[FailBoundsCheckFnLangItem as uint]
}
pub fn exchange_malloc_fn(&self) -> Option<def_id> {
pub fn exchange_malloc_fn(&self) -> Option<DefId> {
self.items[ExchangeMallocFnLangItem as uint]
}
pub fn closure_exchange_malloc_fn(&self) -> Option<def_id> {
pub fn closure_exchange_malloc_fn(&self) -> Option<DefId> {
self.items[ClosureExchangeMallocFnLangItem as uint]
}
pub fn exchange_free_fn(&self) -> Option<def_id> {
pub fn exchange_free_fn(&self) -> Option<DefId> {
self.items[ExchangeFreeFnLangItem as uint]
}
pub fn malloc_fn(&self) -> Option<def_id> {
pub fn malloc_fn(&self) -> Option<DefId> {
self.items[MallocFnLangItem as uint]
}
pub fn free_fn(&self) -> Option<def_id> {
pub fn free_fn(&self) -> Option<DefId> {
self.items[FreeFnLangItem as uint]
}
pub fn borrow_as_imm_fn(&self) -> Option<def_id> {
pub fn borrow_as_imm_fn(&self) -> Option<DefId> {
self.items[BorrowAsImmFnLangItem as uint]
}
pub fn borrow_as_mut_fn(&self) -> Option<def_id> {
pub fn borrow_as_mut_fn(&self) -> Option<DefId> {
self.items[BorrowAsMutFnLangItem as uint]
}
pub fn return_to_mut_fn(&self) -> Option<def_id> {
pub fn return_to_mut_fn(&self) -> Option<DefId> {
self.items[ReturnToMutFnLangItem as uint]
}
pub fn check_not_borrowed_fn(&self) -> Option<def_id> {
pub fn check_not_borrowed_fn(&self) -> Option<DefId> {
self.items[CheckNotBorrowedFnLangItem as uint]
}
pub fn strdup_uniq_fn(&self) -> Option<def_id> {
pub fn strdup_uniq_fn(&self) -> Option<DefId> {
self.items[StrDupUniqFnLangItem as uint]
}
pub fn record_borrow_fn(&self) -> Option<def_id> {
pub fn record_borrow_fn(&self) -> Option<DefId> {
self.items[RecordBorrowFnLangItem as uint]
}
pub fn unrecord_borrow_fn(&self) -> Option<def_id> {
pub fn unrecord_borrow_fn(&self) -> Option<DefId> {
self.items[UnrecordBorrowFnLangItem as uint]
}
pub fn start_fn(&self) -> Option<def_id> {
pub fn start_fn(&self) -> Option<DefId> {
self.items[StartFnLangItem as uint]
}
pub fn ty_desc(&self) -> Option<def_id> {
pub fn ty_desc(&self) -> Option<DefId> {
self.items[TyDescStructLangItem as uint]
}
pub fn ty_visitor(&self) -> Option<def_id> {
pub fn ty_visitor(&self) -> Option<DefId> {
self.items[TyVisitorTraitLangItem as uint]
}
pub fn opaque(&self) -> Option<def_id> {
pub fn opaque(&self) -> Option<DefId> {
self.items[OpaqueStructLangItem as uint]
}
}
@ -388,7 +388,7 @@ impl<'self> LanguageItemCollector<'self> {
}
pub fn match_and_collect_meta_item(&mut self,
item_def_id: def_id,
item_def_id: DefId,
meta_item: &MetaItem) {
match meta_item.name_str_pair() {
Some((key, value)) => {
@ -398,7 +398,7 @@ impl<'self> LanguageItemCollector<'self> {
}
}
pub fn collect_item(&mut self, item_index: uint, item_def_id: def_id) {
pub fn collect_item(&mut self, item_index: uint, item_def_id: DefId) {
// Check for duplicates.
match self.items.items[item_index] {
Some(original_def_id) if original_def_id != item_def_id => {
@ -415,7 +415,7 @@ impl<'self> LanguageItemCollector<'self> {
}
pub fn match_and_collect_item(&mut self,
item_def_id: def_id,
item_def_id: DefId,
key: &str,
value: @str) {
if "lang" != key {
@ -448,7 +448,7 @@ impl<'self> LanguageItemCollector<'self> {
do iter_crate_data(crate_store) |crate_number, _crate_metadata| {
do each_lang_item(crate_store, crate_number)
|node_id, item_index| {
let def_id = def_id { crate: crate_number, node: node_id };
let def_id = DefId { crate: crate_number, node: node_id };
self.collect_item(item_index, def_id);
true
};

View file

@ -674,12 +674,12 @@ impl Visitor<@mut Context> for WhileTrueLintVisitor {
self.OVERRIDE_visit_fn(fk, fd, b, s, n, e);
}
fn visit_expr(&mut self, e:@ast::expr, cx:@mut Context) {
fn visit_expr(&mut self, e:@ast::Expr, cx:@mut Context) {
match e.node {
ast::expr_while(cond, _) => {
ast::ExprWhile(cond, _) => {
match cond.node {
ast::expr_lit(@codemap::Spanned {
ast::ExprLit(@codemap::Spanned {
node: ast::lit_bool(true), _}) =>
{
cx.span_lint(while_true, e.span,
@ -725,24 +725,24 @@ impl SubitemStoppableVisitor for TypeLimitsLintVisitor {
}
impl TypeLimitsLintVisitor {
fn is_valid<T:cmp::Ord>(&mut self, binop: ast::binop, v: T,
fn is_valid<T:cmp::Ord>(&mut self, binop: ast::BinOp, v: T,
min: T, max: T) -> bool {
match binop {
ast::lt => v <= max,
ast::le => v < max,
ast::gt => v >= min,
ast::ge => v > min,
ast::eq | ast::ne => v >= min && v <= max,
ast::BiLt => v <= max,
ast::BiLe => v < max,
ast::BiGt => v >= min,
ast::BiGe => v > min,
ast::BiEq | ast::BiNe => v >= min && v <= max,
_ => fail!()
}
}
fn rev_binop(&mut self, binop: ast::binop) -> ast::binop {
fn rev_binop(&mut self, binop: ast::BinOp) -> ast::BinOp {
match binop {
ast::lt => ast::gt,
ast::le => ast::ge,
ast::gt => ast::lt,
ast::ge => ast::le,
ast::BiLt => ast::BiGt,
ast::BiLe => ast::BiGe,
ast::BiGt => ast::BiLt,
ast::BiGe => ast::BiLe,
_ => binop
}
}
@ -772,13 +772,13 @@ impl TypeLimitsLintVisitor {
fn check_limits(&mut self,
cx: &Context,
binop: ast::binop,
l: @ast::expr,
r: @ast::expr)
binop: ast::BinOp,
l: @ast::Expr,
r: @ast::Expr)
-> bool {
let (lit, expr, swap) = match (&l.node, &r.node) {
(&ast::expr_lit(_), _) => (l, r, true),
(_, &ast::expr_lit(_)) => (r, l, false),
(&ast::ExprLit(_), _) => (l, r, true),
(_, &ast::ExprLit(_)) => (r, l, false),
_ => return true
};
// Normalize the binop so that the literal is always on the RHS in
@ -792,7 +792,7 @@ impl TypeLimitsLintVisitor {
ty::ty_int(int_ty) => {
let (min, max) = self.int_ty_range(int_ty);
let lit_val: i64 = match lit.node {
ast::expr_lit(@li) => match li.node {
ast::ExprLit(@li) => match li.node {
ast::lit_int(v, _) => v,
ast::lit_uint(v, _) => v as i64,
ast::lit_int_unsuffixed(v) => v,
@ -805,7 +805,7 @@ impl TypeLimitsLintVisitor {
ty::ty_uint(uint_ty) => {
let (min, max): (u64, u64) = self.uint_ty_range(uint_ty);
let lit_val: u64 = match lit.node {
ast::expr_lit(@li) => match li.node {
ast::ExprLit(@li) => match li.node {
ast::lit_int(v, _) => v as u64,
ast::lit_uint(v, _) => v,
ast::lit_int_unsuffixed(v) => v as u64,
@ -819,10 +819,10 @@ impl TypeLimitsLintVisitor {
}
}
fn is_comparison(&mut self, binop: ast::binop) -> bool {
fn is_comparison(&mut self, binop: ast::BinOp) -> bool {
match binop {
ast::eq | ast::lt | ast::le |
ast::ne | ast::ge | ast::gt => true,
ast::BiEq | ast::BiLt | ast::BiLe |
ast::BiNe | ast::BiGe | ast::BiGt => true,
_ => false
}
}
@ -838,10 +838,10 @@ impl Visitor<@mut Context> for TypeLimitsLintVisitor {
self.OVERRIDE_visit_fn(fk, fd, b, s, n, e);
}
fn visit_expr(&mut self, e:@ast::expr, cx:@mut Context) {
fn visit_expr(&mut self, e:@ast::Expr, cx:@mut Context) {
match e.node {
ast::expr_binary(_, ref binop, l, r) => {
ast::ExprBinary(_, ref binop, l, r) => {
if self.is_comparison(*binop)
&& !self.check_limits(cx, *binop, l, r) {
cx.span_lint(type_limits, e.span,
@ -865,12 +865,12 @@ fn check_item_ctypes(cx: &Context, it: &ast::item) {
match ty.node {
ast::ty_path(_, _, id) => {
match cx.tcx.def_map.get_copy(&id) {
ast::def_prim_ty(ast::ty_int(ast::ty_i)) => {
ast::DefPrimTy(ast::ty_int(ast::ty_i)) => {
cx.span_lint(ctypes, ty.span,
"found rust type `int` in foreign module, while \
libc::c_int or libc::c_long should be used");
}
ast::def_prim_ty(ast::ty_uint(ast::ty_u)) => {
ast::DefPrimTy(ast::ty_uint(ast::ty_u)) => {
cx.span_lint(ctypes, ty.span,
"found rust type `uint` in foreign module, while \
libc::c_uint or libc::c_ulong should be used");
@ -979,7 +979,7 @@ impl Visitor<@mut Context> for HeapLintVisitor {
self.OVERRIDE_visit_fn(fk, fd, b, s, n, e);
}
fn visit_expr(&mut self, e:@ast::expr, cx:@mut Context) {
fn visit_expr(&mut self, e:@ast::Expr, cx:@mut Context) {
let ty = ty::expr_ty(cx.tcx, e);
check_type(cx, e.span, ty);
visit::walk_expr(self, e, cx);
@ -1010,10 +1010,10 @@ impl Visitor<@mut Context> for PathStatementLintVisitor {
self.OVERRIDE_visit_fn(fk, fd, b, s, n, e);
}
fn visit_stmt(&mut self, s:@ast::stmt, cx:@mut Context) {
fn visit_stmt(&mut self, s:@ast::Stmt, cx:@mut Context) {
match s.node {
ast::stmt_semi(
@ast::expr { node: ast::expr_path(_), _ },
ast::StmtSemi(
@ast::Expr { node: ast::ExprPath(_), _ },
_
) => {
cx.span_lint(path_statement, s.span,
@ -1073,7 +1073,7 @@ fn check_item_non_camel_case_types(cx: &Context, it: &ast::item) {
fn check_item_non_uppercase_statics(cx: &Context, it: &ast::item) {
match it.node {
// only check static constants
ast::item_static(_, ast::m_imm, _) => {
ast::item_static(_, ast::MutImmutable, _) => {
let s = cx.tcx.sess.str_of(it.ident);
// check for lowercase letters rather than non-uppercase
// ones (some scripts don't have a concept of
@ -1103,10 +1103,10 @@ impl Visitor<@mut Context> for UnusedUnsafeLintVisitor {
self.OVERRIDE_visit_fn(fk, fd, b, s, n, e);
}
fn visit_expr(&mut self, e:@ast::expr, cx:@mut Context) {
fn visit_expr(&mut self, e:@ast::Expr, cx:@mut Context) {
match e.node {
ast::expr_block(ref blk) if blk.rules == ast::UnsafeBlock => {
ast::ExprBlock(ref blk) if blk.rules == ast::UnsafeBlock => {
if !cx.tcx.used_unsafe.contains(&blk.id) {
cx.span_lint(unused_unsafe, blk.span,
"unnecessary `unsafe` block");
@ -1127,7 +1127,7 @@ fn lint_unused_unsafe() -> @mut OuterLint {
struct UnusedMutLintVisitor { stopping_on_items: bool }
impl UnusedMutLintVisitor {
fn check_pat(&mut self, cx: &Context, p: @ast::pat) {
fn check_pat(&mut self, cx: &Context, p: @ast::Pat) {
let mut used = false;
let mut bindings = 0;
do pat_util::pat_bindings(cx.tcx.def_map, p) |_, id, _, _| {
@ -1229,7 +1229,7 @@ impl Visitor<@mut Context> for UnnecessaryAllocationLintVisitor {
self.OVERRIDE_visit_fn(fk, fd, b, s, n, e);
}
fn visit_expr(&mut self, e:@ast::expr, cx:@mut Context) {
fn visit_expr(&mut self, e:@ast::Expr, cx:@mut Context) {
self.check(cx, e);
visit::walk_expr(self, e, cx);
}
@ -1238,14 +1238,14 @@ impl Visitor<@mut Context> for UnnecessaryAllocationLintVisitor {
impl UnnecessaryAllocationLintVisitor {
// Warn if string and vector literals with sigils are immediately borrowed.
// Those can have the sigil removed.
fn check(&mut self, cx: &Context, e: &ast::expr) {
fn check(&mut self, cx: &Context, e: &ast::Expr) {
match e.node {
ast::expr_vstore(e2, ast::expr_vstore_uniq) |
ast::expr_vstore(e2, ast::expr_vstore_box) => {
ast::ExprVstore(e2, ast::ExprVstoreUniq) |
ast::ExprVstore(e2, ast::ExprVstoreBox) => {
match e2.node {
ast::expr_lit(@codemap::Spanned{
ast::ExprLit(@codemap::Spanned{
node: ast::lit_str(*), _}) |
ast::expr_vec(*) => {}
ast::ExprVec(*) => {}
_ => return
}
}

View file

@ -158,8 +158,8 @@ impl Visitor<@mut IrMaps> for LivenessVisitor {
visit_fn(self, fk, fd, b, s, n, e);
}
fn visit_local(&mut self, l:@Local, e:@mut IrMaps) { visit_local(self, l, e); }
fn visit_expr(&mut self, ex:@expr, e:@mut IrMaps) { visit_expr(self, ex, e); }
fn visit_arm(&mut self, a:&arm, e:@mut IrMaps) { visit_arm(self, a, e); }
fn visit_expr(&mut self, ex:@Expr, e:@mut IrMaps) { visit_expr(self, ex, e); }
fn visit_arm(&mut self, a:&Arm, e:@mut IrMaps) { visit_arm(self, a, e); }
}
pub fn check_crate(tcx: ty::ctxt,
@ -220,7 +220,7 @@ struct CaptureInfo {
}
enum LocalKind {
FromMatch(binding_mode),
FromMatch(BindingMode),
FromLetWithInitializer,
FromLetNoInitializer
}
@ -331,7 +331,7 @@ impl IrMaps {
self.capture_info_map.insert(node_id, @cs);
}
pub fn captures(&mut self, expr: &expr) -> @~[CaptureInfo] {
pub fn captures(&mut self, expr: &Expr) -> @~[CaptureInfo] {
match self.capture_info_map.find(&expr.id) {
Some(&caps) => caps,
None => {
@ -354,10 +354,10 @@ impl Visitor<@Liveness> for ErrorCheckVisitor {
fn visit_local(&mut self, l:@Local, e:@Liveness) {
check_local(self, l, e);
}
fn visit_expr(&mut self, ex:@expr, e:@Liveness) {
fn visit_expr(&mut self, ex:@Expr, e:@Liveness) {
check_expr(self, ex, e);
}
fn visit_arm(&mut self, a:&arm, e:@Liveness) {
fn visit_arm(&mut self, a:&Arm, e:@Liveness) {
check_arm(self, a, e);
}
}
@ -449,7 +449,7 @@ fn visit_local(v: &mut LivenessVisitor, local: @Local, this: @mut IrMaps) {
visit::walk_local(v, local, this);
}
fn visit_arm(v: &mut LivenessVisitor, arm: &arm, this: @mut IrMaps) {
fn visit_arm(v: &mut LivenessVisitor, arm: &Arm, this: @mut IrMaps) {
let def_map = this.tcx.def_map;
for pat in arm.pats.iter() {
do pat_util::pat_bindings(def_map, *pat) |bm, p_id, sp, path| {
@ -468,10 +468,10 @@ fn visit_arm(v: &mut LivenessVisitor, arm: &arm, this: @mut IrMaps) {
visit::walk_arm(v, arm, this);
}
fn visit_expr(v: &mut LivenessVisitor, expr: @expr, this: @mut IrMaps) {
fn visit_expr(v: &mut LivenessVisitor, expr: @Expr, this: @mut IrMaps) {
match expr.node {
// live nodes required for uses or definitions of variables:
expr_path(_) | expr_self => {
ExprPath(_) | ExprSelf => {
let def = this.tcx.def_map.get_copy(&expr.id);
debug!("expr %d: path that leads to %?", expr.id, def);
if moves::moved_variable_node_id_from_def(def).is_some() {
@ -479,7 +479,7 @@ fn visit_expr(v: &mut LivenessVisitor, expr: @expr, this: @mut IrMaps) {
}
visit::walk_expr(v, expr, this);
}
expr_fn_block(*) => {
ExprFnBlock(*) => {
// Interesting control flow (for loops can contain labeled
// breaks or continues)
this.add_live_node_for_node(expr.id, ExprNode(expr.span));
@ -514,25 +514,25 @@ fn visit_expr(v: &mut LivenessVisitor, expr: @expr, this: @mut IrMaps) {
}
// live nodes required for interesting control flow:
expr_if(*) | expr_match(*) | expr_while(*) | expr_loop(*) => {
ExprIf(*) | ExprMatch(*) | ExprWhile(*) | ExprLoop(*) => {
this.add_live_node_for_node(expr.id, ExprNode(expr.span));
visit::walk_expr(v, expr, this);
}
expr_for_loop(*) => fail!("non-desugared expr_for_loop"),
expr_binary(_, op, _, _) if ast_util::lazy_binop(op) => {
ExprForLoop(*) => fail!("non-desugared expr_for_loop"),
ExprBinary(_, op, _, _) if ast_util::lazy_binop(op) => {
this.add_live_node_for_node(expr.id, ExprNode(expr.span));
visit::walk_expr(v, expr, this);
}
// otherwise, live nodes are not required:
expr_index(*) | expr_field(*) | expr_vstore(*) | expr_vec(*) |
expr_call(*) | expr_method_call(*) | expr_tup(*) | expr_log(*) |
expr_binary(*) | expr_addr_of(*) |
expr_do_body(*) | expr_cast(*) | expr_unary(*) | expr_break(_) |
expr_again(_) | expr_lit(_) | expr_ret(*) | expr_block(*) |
expr_assign(*) | expr_assign_op(*) | expr_mac(*) |
expr_struct(*) | expr_repeat(*) | expr_paren(*) |
expr_inline_asm(*) => {
ExprIndex(*) | ExprField(*) | ExprVstore(*) | ExprVec(*) |
ExprCall(*) | ExprMethodCall(*) | ExprTup(*) | ExprLog(*) |
ExprBinary(*) | ExprAddrOf(*) |
ExprDoBody(*) | ExprCast(*) | ExprUnary(*) | ExprBreak(_) |
ExprAgain(_) | ExprLit(_) | ExprRet(*) | ExprBlock(*) |
ExprAssign(*) | ExprAssignOp(*) | ExprMac(*) |
ExprStruct(*) | ExprRepeat(*) | ExprParen(*) |
ExprInlineAsm(*) => {
visit::walk_expr(v, expr, this);
}
}
@ -618,9 +618,9 @@ impl Liveness {
}
}
pub fn variable_from_path(&self, expr: &expr) -> Option<Variable> {
pub fn variable_from_path(&self, expr: &Expr) -> Option<Variable> {
match expr.node {
expr_path(_) => {
ExprPath(_) => {
let def = self.tcx.def_map.get_copy(&expr.id);
do moves::moved_variable_node_id_from_def(def).map_move |rdef| {
self.variable(rdef, expr.span)
@ -650,7 +650,7 @@ impl Liveness {
}
pub fn pat_bindings(&self,
pat: @pat,
pat: @Pat,
f: &fn(LiveNode, Variable, Span, NodeId)) {
let def_map = self.tcx.def_map;
do pat_util::pat_bindings(def_map, pat) |_bm, p_id, sp, _n| {
@ -661,7 +661,7 @@ impl Liveness {
}
pub fn arm_pats_bindings(&self,
pats: &[@pat],
pats: &[@Pat],
f: &fn(LiveNode, Variable, Span, NodeId)) {
// only consider the first pattern; any later patterns must have
// the same bindings, and we also consider the first pattern to be
@ -671,12 +671,12 @@ impl Liveness {
}
}
pub fn define_bindings_in_pat(&self, pat: @pat, succ: LiveNode)
pub fn define_bindings_in_pat(&self, pat: @Pat, succ: LiveNode)
-> LiveNode {
self.define_bindings_in_arm_pats([pat], succ)
}
pub fn define_bindings_in_arm_pats(&self, pats: &[@pat], succ: LiveNode)
pub fn define_bindings_in_arm_pats(&self, pats: &[@Pat], succ: LiveNode)
-> LiveNode {
let mut succ = succ;
do self.arm_pats_bindings(pats) |ln, var, _sp, _id| {
@ -764,7 +764,7 @@ impl Liveness {
Some(_) => // Refers to a labeled loop. Use the results of resolve
// to find with one
match self.tcx.def_map.find(&id) {
Some(&def_label(loop_id)) => loop_id,
Some(&DefLabel(loop_id)) => loop_id,
_ => self.tcx.sess.span_bug(sp, "Label on break/loop \
doesn't refer to a loop")
},
@ -945,30 +945,30 @@ impl Liveness {
}
}
pub fn propagate_through_stmt(&self, stmt: &stmt, succ: LiveNode)
pub fn propagate_through_stmt(&self, stmt: &Stmt, succ: LiveNode)
-> LiveNode {
match stmt.node {
stmt_decl(decl, _) => {
StmtDecl(decl, _) => {
return self.propagate_through_decl(decl, succ);
}
stmt_expr(expr, _) | stmt_semi(expr, _) => {
StmtExpr(expr, _) | StmtSemi(expr, _) => {
return self.propagate_through_expr(expr, succ);
}
stmt_mac(*) => {
StmtMac(*) => {
self.tcx.sess.span_bug(stmt.span, "unexpanded macro");
}
}
}
pub fn propagate_through_decl(&self, decl: &decl, succ: LiveNode)
pub fn propagate_through_decl(&self, decl: &Decl, succ: LiveNode)
-> LiveNode {
match decl.node {
decl_local(ref local) => {
DeclLocal(ref local) => {
self.propagate_through_local(*local, succ)
}
decl_item(_) => succ,
DeclItem(_) => succ,
}
}
@ -992,7 +992,7 @@ impl Liveness {
self.define_bindings_in_pat(local.pat, succ)
}
pub fn propagate_through_exprs(&self, exprs: &[@expr], succ: LiveNode)
pub fn propagate_through_exprs(&self, exprs: &[@Expr], succ: LiveNode)
-> LiveNode {
do exprs.rev_iter().fold(succ) |succ, expr| {
self.propagate_through_expr(*expr, succ)
@ -1000,7 +1000,7 @@ impl Liveness {
}
pub fn propagate_through_opt_expr(&self,
opt_expr: Option<@expr>,
opt_expr: Option<@Expr>,
succ: LiveNode)
-> LiveNode {
do opt_expr.iter().fold(succ) |succ, expr| {
@ -1008,7 +1008,7 @@ impl Liveness {
}
}
pub fn propagate_through_expr(&self, expr: @expr, succ: LiveNode)
pub fn propagate_through_expr(&self, expr: @Expr, succ: LiveNode)
-> LiveNode {
debug!("propagate_through_expr: %s",
expr_to_str(expr, self.tcx.sess.intr()));
@ -1016,15 +1016,15 @@ impl Liveness {
match expr.node {
// Interesting cases with control flow or which gen/kill
expr_path(_) | expr_self => {
ExprPath(_) | ExprSelf => {
self.access_path(expr, succ, ACC_READ | ACC_USE)
}
expr_field(e, _, _) => {
ExprField(e, _, _) => {
self.propagate_through_expr(e, succ)
}
expr_fn_block(_, ref blk) => {
ExprFnBlock(_, ref blk) => {
debug!("%s is an expr_fn_block",
expr_to_str(expr, self.tcx.sess.intr()));
@ -1047,7 +1047,7 @@ impl Liveness {
})
}
expr_if(cond, ref then, els) => {
ExprIf(cond, ref then, els) => {
//
// (cond)
// |
@ -1069,19 +1069,19 @@ impl Liveness {
self.propagate_through_expr(cond, ln)
}
expr_while(cond, ref blk) => {
ExprWhile(cond, ref blk) => {
self.propagate_through_loop(expr, Some(cond), blk, succ)
}
expr_for_loop(*) => fail!("non-desugared expr_for_loop"),
ExprForLoop(*) => fail!("non-desugared expr_for_loop"),
// Note that labels have been resolved, so we don't need to look
// at the label ident
expr_loop(ref blk, _) => {
ExprLoop(ref blk, _) => {
self.propagate_through_loop(expr, None, blk, succ)
}
expr_match(e, ref arms) => {
ExprMatch(e, ref arms) => {
//
// (e)
// |
@ -1112,12 +1112,12 @@ impl Liveness {
self.propagate_through_expr(e, ln)
}
expr_ret(o_e) => {
ExprRet(o_e) => {
// ignore succ and subst exit_ln:
self.propagate_through_opt_expr(o_e, self.s.exit_ln)
}
expr_break(opt_label) => {
ExprBreak(opt_label) => {
// Find which label this break jumps to
let sc = self.find_loop_scope(opt_label, expr.id, expr.span);
@ -1131,7 +1131,7 @@ impl Liveness {
}
}
expr_again(opt_label) => {
ExprAgain(opt_label) => {
// Find which label this expr continues to
let sc = self.find_loop_scope(opt_label, expr.id, expr.span);
@ -1145,7 +1145,7 @@ impl Liveness {
}
}
expr_assign(l, r) => {
ExprAssign(l, r) => {
// see comment on lvalues in
// propagate_through_lvalue_components()
let succ = self.write_lvalue(l, succ, ACC_WRITE);
@ -1153,7 +1153,7 @@ impl Liveness {
self.propagate_through_expr(r, succ)
}
expr_assign_op(_, _, l, r) => {
ExprAssignOp(_, _, l, r) => {
// see comment on lvalues in
// propagate_through_lvalue_components()
let succ = self.write_lvalue(l, succ, ACC_WRITE|ACC_READ);
@ -1163,27 +1163,27 @@ impl Liveness {
// Uninteresting cases: just propagate in rev exec order
expr_vstore(expr, _) => {
ExprVstore(expr, _) => {
self.propagate_through_expr(expr, succ)
}
expr_vec(ref exprs, _) => {
ExprVec(ref exprs, _) => {
self.propagate_through_exprs(*exprs, succ)
}
expr_repeat(element, count, _) => {
ExprRepeat(element, count, _) => {
let succ = self.propagate_through_expr(count, succ);
self.propagate_through_expr(element, succ)
}
expr_struct(_, ref fields, with_expr) => {
ExprStruct(_, ref fields, with_expr) => {
let succ = self.propagate_through_opt_expr(with_expr, succ);
do fields.rev_iter().fold(succ) |succ, field| {
self.propagate_through_expr(field.expr, succ)
}
}
expr_call(f, ref args, _) => {
ExprCall(f, ref args, _) => {
// calling a fn with bot return type means that the fn
// will fail, and hence the successors can be ignored
let t_ret = ty::ty_fn_ret(ty::expr_ty(self.tcx, f));
@ -1193,7 +1193,7 @@ impl Liveness {
self.propagate_through_expr(f, succ)
}
expr_method_call(callee_id, rcvr, _, _, ref args, _) => {
ExprMethodCall(callee_id, rcvr, _, _, ref args, _) => {
// calling a method with bot return type means that the method
// will fail, and hence the successors can be ignored
let t_ret = ty::ty_fn_ret(ty::node_id_to_type(self.tcx, callee_id));
@ -1203,11 +1203,11 @@ impl Liveness {
self.propagate_through_expr(rcvr, succ)
}
expr_tup(ref exprs) => {
ExprTup(ref exprs) => {
self.propagate_through_exprs(*exprs, succ)
}
expr_binary(_, op, l, r) if ast_util::lazy_binop(op) => {
ExprBinary(_, op, l, r) if ast_util::lazy_binop(op) => {
let r_succ = self.propagate_through_expr(r, succ);
let ln = self.live_node(expr.id, expr.span);
@ -1217,21 +1217,21 @@ impl Liveness {
self.propagate_through_expr(l, ln)
}
expr_log(l, r) |
expr_index(_, l, r) |
expr_binary(_, _, l, r) => {
ExprLog(l, r) |
ExprIndex(_, l, r) |
ExprBinary(_, _, l, r) => {
self.propagate_through_exprs([l, r], succ)
}
expr_addr_of(_, e) |
expr_do_body(e) |
expr_cast(e, _) |
expr_unary(_, _, e) |
expr_paren(e) => {
ExprAddrOf(_, e) |
ExprDoBody(e) |
ExprCast(e, _) |
ExprUnary(_, _, e) |
ExprParen(e) => {
self.propagate_through_expr(e, succ)
}
expr_inline_asm(ref ia) =>{
ExprInlineAsm(ref ia) =>{
let succ = do ia.inputs.rev_iter().fold(succ) |succ, &(_, expr)| {
self.propagate_through_expr(expr, succ)
};
@ -1240,22 +1240,22 @@ impl Liveness {
}
}
expr_lit(*) => {
ExprLit(*) => {
succ
}
expr_block(ref blk) => {
ExprBlock(ref blk) => {
self.propagate_through_block(blk, succ)
}
expr_mac(*) => {
ExprMac(*) => {
self.tcx.sess.span_bug(expr.span, "unexpanded macro");
}
}
}
pub fn propagate_through_lvalue_components(&self,
expr: @expr,
expr: @Expr,
succ: LiveNode)
-> LiveNode {
// # Lvalues
@ -1308,17 +1308,17 @@ impl Liveness {
// just ignore such cases and treat them as reads.
match expr.node {
expr_path(_) => succ,
expr_field(e, _, _) => self.propagate_through_expr(e, succ),
ExprPath(_) => succ,
ExprField(e, _, _) => self.propagate_through_expr(e, succ),
_ => self.propagate_through_expr(expr, succ)
}
}
// see comment on propagate_through_lvalue()
pub fn write_lvalue(&self, expr: &expr, succ: LiveNode, acc: uint)
pub fn write_lvalue(&self, expr: &Expr, succ: LiveNode, acc: uint)
-> LiveNode {
match expr.node {
expr_path(_) => self.access_path(expr, succ, acc),
ExprPath(_) => self.access_path(expr, succ, acc),
// We do not track other lvalues, so just propagate through
// to their subcomponents. Also, it may happen that
@ -1328,7 +1328,7 @@ impl Liveness {
}
}
pub fn access_path(&self, expr: &expr, succ: LiveNode, acc: uint)
pub fn access_path(&self, expr: &Expr, succ: LiveNode, acc: uint)
-> LiveNode {
let def = self.tcx.def_map.get_copy(&expr.id);
match moves::moved_variable_node_id_from_def(def) {
@ -1346,8 +1346,8 @@ impl Liveness {
}
pub fn propagate_through_loop(&self,
expr: &expr,
cond: Option<@expr>,
expr: &Expr,
cond: Option<@Expr>,
body: &Block,
succ: LiveNode)
-> LiveNode {
@ -1452,29 +1452,29 @@ fn check_local(vt: &mut ErrorCheckVisitor, local: @Local, this: @Liveness) {
visit::walk_local(vt, local, this);
}
fn check_arm(vt: &mut ErrorCheckVisitor, arm: &arm, this: @Liveness) {
fn check_arm(vt: &mut ErrorCheckVisitor, arm: &Arm, this: @Liveness) {
do this.arm_pats_bindings(arm.pats) |ln, var, sp, id| {
this.warn_about_unused(sp, id, ln, var);
}
visit::walk_arm(vt, arm, this);
}
fn check_expr(vt: &mut ErrorCheckVisitor, expr: @expr, this: @Liveness) {
fn check_expr(vt: &mut ErrorCheckVisitor, expr: @Expr, this: @Liveness) {
match expr.node {
expr_assign(l, r) => {
ExprAssign(l, r) => {
this.check_lvalue(l, vt);
vt.visit_expr(r, this);
visit::walk_expr(vt, expr, this);
}
expr_assign_op(_, _, l, _) => {
ExprAssignOp(_, _, l, _) => {
this.check_lvalue(l, vt);
visit::walk_expr(vt, expr, this);
}
expr_inline_asm(ref ia) => {
ExprInlineAsm(ref ia) => {
for &(_, input) in ia.inputs.iter() {
vt.visit_expr(input, this);
}
@ -1482,7 +1482,7 @@ fn check_expr(vt: &mut ErrorCheckVisitor, expr: @expr, this: @Liveness) {
// Output operands must be lvalues
for &(_, out) in ia.outputs.iter() {
match out.node {
expr_addr_of(_, inner) => {
ExprAddrOf(_, inner) => {
this.check_lvalue(inner, vt);
}
_ => {}
@ -1494,17 +1494,17 @@ fn check_expr(vt: &mut ErrorCheckVisitor, expr: @expr, this: @Liveness) {
}
// no correctness conditions related to liveness
expr_call(*) | expr_method_call(*) | expr_if(*) | expr_match(*) |
expr_while(*) | expr_loop(*) | expr_index(*) | expr_field(*) |
expr_vstore(*) | expr_vec(*) | expr_tup(*) | expr_log(*) |
expr_binary(*) | expr_do_body(*) |
expr_cast(*) | expr_unary(*) | expr_ret(*) | expr_break(*) |
expr_again(*) | expr_lit(_) | expr_block(*) |
expr_mac(*) | expr_addr_of(*) | expr_struct(*) | expr_repeat(*) |
expr_paren(*) | expr_fn_block(*) | expr_path(*) | expr_self(*) => {
ExprCall(*) | ExprMethodCall(*) | ExprIf(*) | ExprMatch(*) |
ExprWhile(*) | ExprLoop(*) | ExprIndex(*) | ExprField(*) |
ExprVstore(*) | ExprVec(*) | ExprTup(*) | ExprLog(*) |
ExprBinary(*) | ExprDoBody(*) |
ExprCast(*) | ExprUnary(*) | ExprRet(*) | ExprBreak(*) |
ExprAgain(*) | ExprLit(_) | ExprBlock(*) |
ExprMac(*) | ExprAddrOf(*) | ExprStruct(*) | ExprRepeat(*) |
ExprParen(*) | ExprFnBlock(*) | ExprPath(*) | ExprSelf(*) => {
visit::walk_expr(vt, expr, this);
}
expr_for_loop(*) => fail!("non-desugared expr_for_loop")
ExprForLoop(*) => fail!("non-desugared expr_for_loop")
}
}
@ -1549,11 +1549,11 @@ impl Liveness {
}
}
pub fn check_lvalue(@self, expr: @expr, vt: &mut ErrorCheckVisitor) {
pub fn check_lvalue(@self, expr: @Expr, vt: &mut ErrorCheckVisitor) {
match expr.node {
expr_path(_) => {
ExprPath(_) => {
match self.tcx.def_map.get_copy(&expr.id) {
def_local(nid, _) => {
DefLocal(nid, _) => {
// Assignment to an immutable variable or argument: only legal
// if there is no later assignment. If this local is actually
// mutable, then check for a reassignment to flag the mutability
@ -1630,7 +1630,7 @@ impl Liveness {
}
}
pub fn warn_about_unused_or_dead_vars_in_pat(&self, pat: @pat) {
pub fn warn_about_unused_or_dead_vars_in_pat(&self, pat: @Pat) {
do self.pat_bindings(pat) |ln, var, sp, id| {
if !self.warn_about_unused(sp, id, ln, var) {
self.warn_about_dead_assign(sp, id, ln, var);

View file

@ -52,7 +52,7 @@ use middle::typeck;
use util::ppaux::{ty_to_str, region_ptr_to_str, Repr};
use util::common::indenter;
use syntax::ast::{m_imm, m_mutbl};
use syntax::ast::{MutImmutable, MutMutable};
use syntax::ast;
use syntax::codemap::Span;
use syntax::print::pprust;
@ -84,9 +84,9 @@ pub struct CopiedUpvar {
#[deriving(Eq, IterBytes)]
pub enum PointerKind {
uniq_ptr,
gc_ptr(ast::mutability),
region_ptr(ast::mutability, ty::Region),
unsafe_ptr(ast::mutability)
gc_ptr(ast::Mutability),
region_ptr(ast::Mutability, ty::Region),
unsafe_ptr(ast::Mutability)
}
// We use the term "interior" to mean "something reachable from the
@ -174,7 +174,7 @@ pub fn opt_deref_kind(t: ty::t) -> Option<deref_kind> {
ty::ty_estr(ty::vstore_slice(r)) |
ty::ty_closure(ty::ClosureTy {sigil: ast::BorrowedSigil,
region: r, _}) => {
Some(deref_ptr(region_ptr(ast::m_imm, r)))
Some(deref_ptr(region_ptr(ast::MutImmutable, r)))
}
ty::ty_box(ref mt) |
@ -188,7 +188,7 @@ pub fn opt_deref_kind(t: ty::t) -> Option<deref_kind> {
ty::ty_estr(ty::vstore_box) |
ty::ty_closure(ty::ClosureTy {sigil: ast::ManagedSigil, _}) => {
Some(deref_ptr(gc_ptr(ast::m_imm)))
Some(deref_ptr(gc_ptr(ast::MutImmutable)))
}
ty::ty_ptr(ref mt) => {
@ -222,7 +222,7 @@ pub fn deref_kind(tcx: ty::ctxt, t: ty::t) -> deref_kind {
pub fn cat_expr(tcx: ty::ctxt,
method_map: typeck::method_map,
expr: @ast::expr)
expr: @ast::Expr)
-> cmt {
let mcx = &mem_categorization_ctxt {
tcx: tcx, method_map: method_map
@ -232,7 +232,7 @@ pub fn cat_expr(tcx: ty::ctxt,
pub fn cat_expr_unadjusted(tcx: ty::ctxt,
method_map: typeck::method_map,
expr: @ast::expr)
expr: @ast::Expr)
-> cmt {
let mcx = &mem_categorization_ctxt {
tcx: tcx, method_map: method_map
@ -243,7 +243,7 @@ pub fn cat_expr_unadjusted(tcx: ty::ctxt,
pub fn cat_expr_autoderefd(
tcx: ty::ctxt,
method_map: typeck::method_map,
expr: @ast::expr,
expr: @ast::Expr,
autoderefs: uint) -> cmt
{
let mcx = &mem_categorization_ctxt {
@ -258,7 +258,7 @@ pub fn cat_def(
expr_id: ast::NodeId,
expr_span: Span,
expr_ty: ty::t,
def: ast::def) -> cmt {
def: ast::Def) -> cmt {
let mcx = &mem_categorization_ctxt {
tcx: tcx, method_map: method_map
@ -271,12 +271,12 @@ pub trait ast_node {
fn span(&self) -> Span;
}
impl ast_node for @ast::expr {
impl ast_node for @ast::Expr {
fn id(&self) -> ast::NodeId { self.id }
fn span(&self) -> Span { self.span }
}
impl ast_node for @ast::pat {
impl ast_node for @ast::Pat {
fn id(&self) -> ast::NodeId { self.id }
fn span(&self) -> Span { self.span }
}
@ -293,10 +293,10 @@ impl ToStr for MutabilityCategory {
}
impl MutabilityCategory {
pub fn from_mutbl(m: ast::mutability) -> MutabilityCategory {
pub fn from_mutbl(m: ast::Mutability) -> MutabilityCategory {
match m {
m_imm => McImmutable,
m_mutbl => McDeclared
MutImmutable => McImmutable,
MutMutable => McDeclared
}
}
@ -331,15 +331,15 @@ impl MutabilityCategory {
}
impl mem_categorization_ctxt {
pub fn expr_ty(&self, expr: @ast::expr) -> ty::t {
pub fn expr_ty(&self, expr: @ast::Expr) -> ty::t {
ty::expr_ty(self.tcx, expr)
}
pub fn pat_ty(&self, pat: @ast::pat) -> ty::t {
pub fn pat_ty(&self, pat: @ast::Pat) -> ty::t {
ty::node_id_to_type(self.tcx, pat.id)
}
pub fn cat_expr(&self, expr: @ast::expr) -> cmt {
pub fn cat_expr(&self, expr: @ast::Expr) -> cmt {
match self.tcx.adjustments.find(&expr.id) {
None => {
// No adjustments.
@ -373,7 +373,7 @@ impl mem_categorization_ctxt {
}
}
pub fn cat_expr_autoderefd(&self, expr: @ast::expr, autoderefs: uint)
pub fn cat_expr_autoderefd(&self, expr: @ast::Expr, autoderefs: uint)
-> cmt {
let mut cmt = self.cat_expr_unadjusted(expr);
for deref in range(1u, autoderefs + 1) {
@ -382,13 +382,13 @@ impl mem_categorization_ctxt {
return cmt;
}
pub fn cat_expr_unadjusted(&self, expr: @ast::expr) -> cmt {
pub fn cat_expr_unadjusted(&self, expr: @ast::Expr) -> cmt {
debug!("cat_expr: id=%d expr=%s",
expr.id, pprust::expr_to_str(expr, self.tcx.sess.intr()));
let expr_ty = self.expr_ty(expr);
match expr.node {
ast::expr_unary(_, ast::deref, e_base) => {
ast::ExprUnary(_, ast::UnDeref, e_base) => {
if self.method_map.contains_key(&expr.id) {
return self.cat_rvalue_node(expr, expr_ty);
}
@ -397,7 +397,7 @@ impl mem_categorization_ctxt {
self.cat_deref(expr, base_cmt, 0)
}
ast::expr_field(base, f_name, _) => {
ast::ExprField(base, f_name, _) => {
// Method calls are now a special syntactic form,
// so `a.b` should always be a field.
assert!(!self.method_map.contains_key(&expr.id));
@ -406,7 +406,7 @@ impl mem_categorization_ctxt {
self.cat_field(expr, base_cmt, f_name, self.expr_ty(expr))
}
ast::expr_index(_, base, _) => {
ast::ExprIndex(_, base, _) => {
if self.method_map.contains_key(&expr.id) {
return self.cat_rvalue_node(expr, expr_ty);
}
@ -415,28 +415,28 @@ impl mem_categorization_ctxt {
self.cat_index(expr, base_cmt, 0)
}
ast::expr_path(_) | ast::expr_self => {
ast::ExprPath(_) | ast::ExprSelf => {
let def = self.tcx.def_map.get_copy(&expr.id);
self.cat_def(expr.id, expr.span, expr_ty, def)
}
ast::expr_paren(e) => self.cat_expr_unadjusted(e),
ast::ExprParen(e) => self.cat_expr_unadjusted(e),
ast::expr_addr_of(*) | ast::expr_call(*) |
ast::expr_assign(*) | ast::expr_assign_op(*) |
ast::expr_fn_block(*) | ast::expr_ret(*) |
ast::expr_do_body(*) | ast::expr_unary(*) |
ast::expr_method_call(*) | ast::expr_cast(*) | ast::expr_vstore(*) |
ast::expr_vec(*) | ast::expr_tup(*) | ast::expr_if(*) |
ast::expr_log(*) | ast::expr_binary(*) | ast::expr_while(*) |
ast::expr_block(*) | ast::expr_loop(*) | ast::expr_match(*) |
ast::expr_lit(*) | ast::expr_break(*) | ast::expr_mac(*) |
ast::expr_again(*) | ast::expr_struct(*) | ast::expr_repeat(*) |
ast::expr_inline_asm(*) => {
ast::ExprAddrOf(*) | ast::ExprCall(*) |
ast::ExprAssign(*) | ast::ExprAssignOp(*) |
ast::ExprFnBlock(*) | ast::ExprRet(*) |
ast::ExprDoBody(*) | ast::ExprUnary(*) |
ast::ExprMethodCall(*) | ast::ExprCast(*) | ast::ExprVstore(*) |
ast::ExprVec(*) | ast::ExprTup(*) | ast::ExprIf(*) |
ast::ExprLog(*) | ast::ExprBinary(*) | ast::ExprWhile(*) |
ast::ExprBlock(*) | ast::ExprLoop(*) | ast::ExprMatch(*) |
ast::ExprLit(*) | ast::ExprBreak(*) | ast::ExprMac(*) |
ast::ExprAgain(*) | ast::ExprStruct(*) | ast::ExprRepeat(*) |
ast::ExprInlineAsm(*) => {
return self.cat_rvalue_node(expr, expr_ty);
}
ast::expr_for_loop(*) => fail!("non-desugared expr_for_loop")
ast::ExprForLoop(*) => fail!("non-desugared expr_for_loop")
}
}
@ -444,16 +444,16 @@ impl mem_categorization_ctxt {
id: ast::NodeId,
span: Span,
expr_ty: ty::t,
def: ast::def)
def: ast::Def)
-> cmt {
match def {
ast::def_fn(*) | ast::def_static_method(*) | ast::def_mod(_) |
ast::def_foreign_mod(_) | ast::def_static(_, false) |
ast::def_use(_) | ast::def_variant(*) |
ast::def_trait(_) | ast::def_ty(_) | ast::def_prim_ty(_) |
ast::def_ty_param(*) | ast::def_struct(*) |
ast::def_typaram_binder(*) | ast::def_region(_) |
ast::def_label(_) | ast::def_self_ty(*) | ast::def_method(*) => {
ast::DefFn(*) | ast::DefStaticMethod(*) | ast::DefMod(_) |
ast::DefForeignMod(_) | ast::DefStatic(_, false) |
ast::DefUse(_) | ast::DefVariant(*) |
ast::DefTrait(_) | ast::DefTy(_) | ast::DefPrimTy(_) |
ast::DefTyParam(*) | ast::DefStruct(*) |
ast::DefTyParamBinder(*) | ast::DefRegion(_) |
ast::DefLabel(_) | ast::DefSelfTy(*) | ast::DefMethod(*) => {
@cmt_ {
id:id,
span:span,
@ -463,7 +463,7 @@ impl mem_categorization_ctxt {
}
}
ast::def_static(_, true) => {
ast::DefStatic(_, true) => {
@cmt_ {
id:id,
span:span,
@ -473,7 +473,7 @@ impl mem_categorization_ctxt {
}
}
ast::def_arg(vid, mutbl) => {
ast::DefArg(vid, mutbl) => {
// Idea: make this could be rewritten to model by-ref
// stuff as `&const` and `&mut`?
@ -488,7 +488,7 @@ impl mem_categorization_ctxt {
}
}
ast::def_self(self_id) => {
ast::DefSelf(self_id) => {
@cmt_ {
id:id,
span:span,
@ -498,7 +498,7 @@ impl mem_categorization_ctxt {
}
}
ast::def_upvar(upvar_id, inner, fn_node_id, _) => {
ast::DefUpvar(upvar_id, inner, fn_node_id, _) => {
let ty = ty::node_id_to_type(self.tcx, fn_node_id);
match ty::get(ty).sty {
ty::ty_closure(ref closure_ty) => {
@ -549,7 +549,7 @@ impl mem_categorization_ctxt {
}
}
ast::def_local(vid, mutbl) => {
ast::DefLocal(vid, mutbl) => {
let m = if mutbl {McDeclared} else {McImmutable};
@cmt_ {
id:id,
@ -560,7 +560,7 @@ impl mem_categorization_ctxt {
}
}
ast::def_binding(vid, _) => {
ast::DefBinding(vid, _) => {
// by-value/by-ref bindings are local variables
@cmt_ {
id:id,
@ -602,11 +602,11 @@ impl mem_categorization_ctxt {
/// or if the container is mutable.
pub fn inherited_mutability(&self,
base_m: MutabilityCategory,
interior_m: ast::mutability)
interior_m: ast::Mutability)
-> MutabilityCategory {
match interior_m {
m_imm => base_m.inherit(),
m_mutbl => McDeclared
MutImmutable => base_m.inherit(),
MutMutable => McDeclared
}
}
@ -824,8 +824,8 @@ impl mem_categorization_ctxt {
pub fn cat_pattern(&self,
cmt: cmt,
pat: @ast::pat,
op: &fn(cmt, @ast::pat)) {
pat: @ast::Pat,
op: &fn(cmt, @ast::Pat)) {
// Here, `cmt` is the categorization for the value being
// matched and pat is the pattern it is being matched against.
//
@ -879,16 +879,16 @@ impl mem_categorization_ctxt {
op(cmt, pat);
match pat.node {
ast::pat_wild => {
ast::PatWild => {
// _
}
ast::pat_enum(_, None) => {
ast::PatEnum(_, None) => {
// variant(*)
}
ast::pat_enum(_, Some(ref subpats)) => {
ast::PatEnum(_, Some(ref subpats)) => {
match self.tcx.def_map.find(&pat.id) {
Some(&ast::def_variant(enum_did, _)) => {
Some(&ast::DefVariant(enum_did, _)) => {
// variant(x, y, z)
let downcast_cmt = {
@ -910,8 +910,8 @@ impl mem_categorization_ctxt {
self.cat_pattern(subcmt, subpat, |x,y| op(x,y));
}
}
Some(&ast::def_fn(*)) |
Some(&ast::def_struct(*)) => {
Some(&ast::DefFn(*)) |
Some(&ast::DefStruct(*)) => {
for (i, &subpat) in subpats.iter().enumerate() {
let subpat_ty = self.pat_ty(subpat); // see (*)
let cmt_field =
@ -921,7 +921,7 @@ impl mem_categorization_ctxt {
self.cat_pattern(cmt_field, subpat, |x,y| op(x,y));
}
}
Some(&ast::def_static(*)) => {
Some(&ast::DefStatic(*)) => {
for &subpat in subpats.iter() {
self.cat_pattern(cmt, subpat, |x,y| op(x,y));
}
@ -934,15 +934,15 @@ impl mem_categorization_ctxt {
}
}
ast::pat_ident(_, _, Some(subpat)) => {
ast::PatIdent(_, _, Some(subpat)) => {
self.cat_pattern(cmt, subpat, op);
}
ast::pat_ident(_, _, None) => {
ast::PatIdent(_, _, None) => {
// nullary variant or identifier: ignore
}
ast::pat_struct(_, ref field_pats, _) => {
ast::PatStruct(_, ref field_pats, _) => {
// {f1: p1, ..., fN: pN}
for fp in field_pats.iter() {
let field_ty = self.pat_ty(fp.pat); // see (*)
@ -951,7 +951,7 @@ impl mem_categorization_ctxt {
}
}
ast::pat_tup(ref subpats) => {
ast::PatTup(ref subpats) => {
// (p1, ..., pN)
for (i, &subpat) in subpats.iter().enumerate() {
let subpat_ty = self.pat_ty(subpat); // see (*)
@ -963,14 +963,14 @@ impl mem_categorization_ctxt {
}
}
ast::pat_box(subpat) | ast::pat_uniq(subpat) |
ast::pat_region(subpat) => {
ast::PatBox(subpat) | ast::PatUniq(subpat) |
ast::PatRegion(subpat) => {
// @p1, ~p1
let subcmt = self.cat_deref(pat, cmt, 0);
self.cat_pattern(subcmt, subpat, op);
}
ast::pat_vec(ref before, slice, ref after) => {
ast::PatVec(ref before, slice, ref after) => {
let elt_cmt = self.cat_index(pat, cmt, 0);
for &before_pat in before.iter() {
self.cat_pattern(elt_cmt, before_pat, |x,y| op(x,y));
@ -985,16 +985,16 @@ impl mem_categorization_ctxt {
}
}
ast::pat_lit(_) | ast::pat_range(_, _) => {
ast::PatLit(_) | ast::PatRange(_, _) => {
/*always ok*/
}
}
}
pub fn mut_to_str(&self, mutbl: ast::mutability) -> ~str {
pub fn mut_to_str(&self, mutbl: ast::Mutability) -> ~str {
match mutbl {
m_mutbl => ~"mutable",
m_imm => ~"immutable"
MutMutable => ~"mutable",
MutImmutable => ~"immutable"
}
}
@ -1060,24 +1060,24 @@ pub fn field_mutbl(tcx: ty::ctxt,
base_ty: ty::t,
f_name: ast::Ident,
node_id: ast::NodeId)
-> Option<ast::mutability> {
-> Option<ast::Mutability> {
// Need to refactor so that struct/enum fields can be treated uniformly.
match ty::get(base_ty).sty {
ty::ty_struct(did, _) => {
let r = ty::lookup_struct_fields(tcx, did);
for fld in r.iter() {
if fld.ident == f_name {
return Some(ast::m_imm);
return Some(ast::MutImmutable);
}
}
}
ty::ty_enum(*) => {
match tcx.def_map.get_copy(&node_id) {
ast::def_variant(_, variant_id) => {
ast::DefVariant(_, variant_id) => {
let r = ty::lookup_struct_fields(tcx, variant_id);
for fld in r.iter() {
if fld.ident == f_name {
return Some(ast::m_imm);
return Some(ast::MutImmutable);
}
}
}
@ -1091,8 +1091,8 @@ pub fn field_mutbl(tcx: ty::ctxt,
}
pub enum AliasableReason {
AliasableManaged(ast::mutability),
AliasableBorrowed(ast::mutability),
AliasableManaged(ast::Mutability),
AliasableBorrowed(ast::Mutability),
AliasableOther
}
@ -1145,7 +1145,7 @@ impl cmt_ {
cat_arg(_) |
cat_self(*) |
cat_deref(_, _, unsafe_ptr(*)) | // of course it is aliasable, but...
cat_deref(_, _, region_ptr(m_mutbl, _)) => {
cat_deref(_, _, region_ptr(MutMutable, _)) => {
None
}
@ -1158,7 +1158,7 @@ impl cmt_ {
Some(AliasableManaged(m))
}
cat_deref(_, _, region_ptr(m @ m_imm, _)) => {
cat_deref(_, _, region_ptr(m @ MutImmutable, _)) => {
Some(AliasableBorrowed(m))
}

View file

@ -152,7 +152,7 @@ pub enum CaptureMode {
#[deriving(Encodable, Decodable)]
pub struct CaptureVar {
def: def, // Variable being accessed free
def: Def, // Variable being accessed free
span: Span, // Location of an access to this variable
mode: CaptureMode // How variable is being accessed
}
@ -197,7 +197,7 @@ impl visit::Visitor<VisitContext> for ComputeModesVisitor {
b:&Block, s:Span, n:NodeId, e:VisitContext) {
compute_modes_for_fn(*self, fk, fd, b, s, n, e);
}
fn visit_expr(&mut self, ex:@expr, e:VisitContext) {
fn visit_expr(&mut self, ex:@Expr, e:VisitContext) {
compute_modes_for_expr(*self, ex, e);
}
fn visit_local(&mut self, l:@Local, e:VisitContext) {
@ -223,12 +223,12 @@ pub fn compute_moves(tcx: ty::ctxt,
return visit_cx.move_maps;
}
pub fn moved_variable_node_id_from_def(def: def) -> Option<NodeId> {
pub fn moved_variable_node_id_from_def(def: Def) -> Option<NodeId> {
match def {
def_binding(nid, _) |
def_arg(nid, _) |
def_local(nid, _) |
def_self(nid) => Some(nid),
DefBinding(nid, _) |
DefArg(nid, _) |
DefLocal(nid, _) |
DefSelf(nid) => Some(nid),
_ => None
}
@ -261,20 +261,20 @@ fn compute_modes_for_fn(v: ComputeModesVisitor,
}
fn compute_modes_for_expr(v: ComputeModesVisitor,
expr: @expr,
expr: @Expr,
cx: VisitContext)
{
cx.consume_expr(expr, v);
}
impl VisitContext {
pub fn consume_exprs(&self, exprs: &[@expr], visitor: ComputeModesVisitor) {
pub fn consume_exprs(&self, exprs: &[@Expr], visitor: ComputeModesVisitor) {
for expr in exprs.iter() {
self.consume_expr(*expr, visitor);
}
}
pub fn consume_expr(&self, expr: @expr, visitor: ComputeModesVisitor) {
pub fn consume_expr(&self, expr: @Expr, visitor: ComputeModesVisitor) {
/*!
* Indicates that the value of `expr` will be consumed,
* meaning either copied or moved depending on its type.
@ -311,7 +311,7 @@ impl VisitContext {
}
pub fn use_expr(&self,
expr: @expr,
expr: @Expr,
expr_mode: UseMode,
visitor: ComputeModesVisitor) {
/*!
@ -336,7 +336,7 @@ impl VisitContext {
debug!("comp_mode = %?", comp_mode);
match expr.node {
expr_path(*) | expr_self => {
ExprPath(*) | ExprSelf => {
match comp_mode {
Move => {
let def = self.tcx.def_map.get_copy(&expr.id);
@ -349,7 +349,7 @@ impl VisitContext {
}
}
expr_unary(_, deref, base) => { // *base
ExprUnary(_, UnDeref, base) => { // *base
if !self.use_overloaded_operator(
expr, base, [], visitor)
{
@ -358,12 +358,12 @@ impl VisitContext {
}
}
expr_field(base, _, _) => { // base.f
ExprField(base, _, _) => { // base.f
// Moving out of base.f moves out of base.
self.use_expr(base, comp_mode, visitor);
}
expr_index(_, lhs, rhs) => { // lhs[rhs]
ExprIndex(_, lhs, rhs) => { // lhs[rhs]
if !self.use_overloaded_operator(
expr, lhs, [rhs], visitor)
{
@ -372,7 +372,7 @@ impl VisitContext {
}
}
expr_call(callee, ref args, _) => { // callee(args)
ExprCall(callee, ref args, _) => { // callee(args)
// Figure out whether the called function is consumed.
let mode = match ty::get(ty::expr_ty(self.tcx, callee)).sty {
ty::ty_closure(ref cty) => {
@ -397,14 +397,14 @@ impl VisitContext {
self.use_fn_args(callee.id, *args, visitor);
}
expr_method_call(callee_id, rcvr, _, _, ref args, _) => { // callee.m(args)
ExprMethodCall(callee_id, rcvr, _, _, ref args, _) => { // callee.m(args)
// Implicit self is equivalent to & mode, but every
// other kind should be + mode.
self.use_receiver(rcvr, visitor);
self.use_fn_args(callee_id, *args, visitor);
}
expr_struct(_, ref fields, opt_with) => {
ExprStruct(_, ref fields, opt_with) => {
for field in fields.iter() {
self.consume_expr(field.expr, visitor);
}
@ -441,11 +441,11 @@ impl VisitContext {
}
}
expr_tup(ref exprs) => {
ExprTup(ref exprs) => {
self.consume_exprs(*exprs, visitor);
}
expr_if(cond_expr, ref then_blk, opt_else_expr) => {
ExprIf(cond_expr, ref then_blk, opt_else_expr) => {
self.consume_expr(cond_expr, visitor);
self.consume_block(then_blk, visitor);
for else_expr in opt_else_expr.iter() {
@ -453,7 +453,7 @@ impl VisitContext {
}
}
expr_match(discr, ref arms) => {
ExprMatch(discr, ref arms) => {
// We must do this first so that `arms_have_by_move_bindings`
// below knows which bindings are moves.
for arm in arms.iter() {
@ -466,42 +466,42 @@ impl VisitContext {
self.use_expr(discr, Read, visitor);
}
expr_paren(base) => {
ExprParen(base) => {
// Note: base is not considered a *component* here, so
// use `expr_mode` not `comp_mode`.
self.use_expr(base, expr_mode, visitor);
}
expr_vec(ref exprs, _) => {
ExprVec(ref exprs, _) => {
self.consume_exprs(*exprs, visitor);
}
expr_addr_of(_, base) => { // &base
ExprAddrOf(_, base) => { // &base
self.use_expr(base, Read, visitor);
}
expr_inline_asm(*) |
expr_break(*) |
expr_again(*) |
expr_lit(*) => {}
ExprInlineAsm(*) |
ExprBreak(*) |
ExprAgain(*) |
ExprLit(*) => {}
expr_loop(ref blk, _) => {
ExprLoop(ref blk, _) => {
self.consume_block(blk, visitor);
}
expr_log(a_expr, b_expr) => {
ExprLog(a_expr, b_expr) => {
self.consume_expr(a_expr, visitor);
self.use_expr(b_expr, Read, visitor);
}
expr_while(cond_expr, ref blk) => {
ExprWhile(cond_expr, ref blk) => {
self.consume_expr(cond_expr, visitor);
self.consume_block(blk, visitor);
}
expr_for_loop(*) => fail!("non-desugared expr_for_loop"),
ExprForLoop(*) => fail!("non-desugared expr_for_loop"),
expr_unary(_, _, lhs) => {
ExprUnary(_, _, lhs) => {
if !self.use_overloaded_operator(
expr, lhs, [], visitor)
{
@ -509,7 +509,7 @@ impl VisitContext {
}
}
expr_binary(_, _, lhs, rhs) => {
ExprBinary(_, _, lhs, rhs) => {
if !self.use_overloaded_operator(
expr, lhs, [rhs], visitor)
{
@ -518,26 +518,26 @@ impl VisitContext {
}
}
expr_block(ref blk) => {
ExprBlock(ref blk) => {
self.consume_block(blk, visitor);
}
expr_ret(ref opt_expr) => {
ExprRet(ref opt_expr) => {
for expr in opt_expr.iter() {
self.consume_expr(*expr, visitor);
}
}
expr_assign(lhs, rhs) => {
ExprAssign(lhs, rhs) => {
self.use_expr(lhs, Read, visitor);
self.consume_expr(rhs, visitor);
}
expr_cast(base, _) => {
ExprCast(base, _) => {
self.consume_expr(base, visitor);
}
expr_assign_op(_, _, lhs, rhs) => {
ExprAssignOp(_, _, lhs, rhs) => {
// FIXME(#4712) --- Overloaded operators?
//
// if !self.use_overloaded_operator(
@ -548,16 +548,16 @@ impl VisitContext {
// }
}
expr_repeat(base, count, _) => {
ExprRepeat(base, count, _) => {
self.consume_expr(base, visitor);
self.consume_expr(count, visitor);
}
expr_do_body(base) => {
ExprDoBody(base) => {
self.use_expr(base, comp_mode, visitor);
}
expr_fn_block(ref decl, ref body) => {
ExprFnBlock(ref decl, ref body) => {
for a in decl.inputs.iter() {
self.use_pat(a.pat);
}
@ -566,11 +566,11 @@ impl VisitContext {
self.consume_block(body, visitor);
}
expr_vstore(base, _) => {
ExprVstore(base, _) => {
self.use_expr(base, comp_mode, visitor);
}
expr_mac(*) => {
ExprMac(*) => {
self.tcx.sess.span_bug(
expr.span,
"macro expression remains after expansion");
@ -579,9 +579,9 @@ impl VisitContext {
}
pub fn use_overloaded_operator(&self,
expr: &expr,
receiver_expr: @expr,
arg_exprs: &[@expr],
expr: &Expr,
receiver_expr: @Expr,
arg_exprs: &[@Expr],
visitor: ComputeModesVisitor)
-> bool {
if !self.method_map.contains_key(&expr.id) {
@ -599,7 +599,7 @@ impl VisitContext {
return true;
}
pub fn consume_arm(&self, arm: &arm, visitor: ComputeModesVisitor) {
pub fn consume_arm(&self, arm: &Arm, visitor: ComputeModesVisitor) {
for pat in arm.pats.iter() {
self.use_pat(*pat);
}
@ -611,7 +611,7 @@ impl VisitContext {
self.consume_block(&arm.body, visitor);
}
pub fn use_pat(&self, pat: @pat) {
pub fn use_pat(&self, pat: @Pat) {
/*!
*
* Decides whether each binding in a pattern moves the value
@ -620,8 +620,8 @@ impl VisitContext {
do pat_bindings(self.tcx.def_map, pat) |bm, id, _span, path| {
let binding_moves = match bm {
bind_by_ref(_) => false,
bind_infer => {
BindByRef(_) => false,
BindInfer => {
let pat_ty = ty::node_id_to_type(self.tcx, id);
debug!("pattern %? %s type is %s",
id,
@ -641,14 +641,14 @@ impl VisitContext {
}
pub fn use_receiver(&self,
receiver_expr: @expr,
receiver_expr: @Expr,
visitor: ComputeModesVisitor) {
self.use_fn_arg(receiver_expr, visitor);
}
pub fn use_fn_args(&self,
_: NodeId,
arg_exprs: &[@expr],
arg_exprs: &[@Expr],
visitor: ComputeModesVisitor) {
//! Uses the argument expressions.
for arg_expr in arg_exprs.iter() {
@ -656,15 +656,15 @@ impl VisitContext {
}
}
pub fn use_fn_arg(&self, arg_expr: @expr, visitor: ComputeModesVisitor) {
pub fn use_fn_arg(&self, arg_expr: @Expr, visitor: ComputeModesVisitor) {
//! Uses the argument.
self.consume_expr(arg_expr, visitor)
}
pub fn arms_have_by_move_bindings(&self,
moves_map: MovesMap,
arms: &[arm])
-> Option<@pat> {
arms: &[Arm])
-> Option<@Pat> {
let mut ret = None;
for arm in arms.iter() {
for &pat in arm.pats.iter() {

View file

@ -20,7 +20,7 @@ pub type PatIdMap = HashMap<Ident, NodeId>;
// This is used because same-named variables in alternative patterns need to
// use the NodeId of their namesake in the first pattern.
pub fn pat_id_map(dm: resolve::DefMap, pat: @pat) -> PatIdMap {
pub fn pat_id_map(dm: resolve::DefMap, pat: @Pat) -> PatIdMap {
let mut map = HashMap::new();
do pat_bindings(dm, pat) |_bm, p_id, _s, n| {
map.insert(path_to_ident(n), p_id);
@ -28,11 +28,11 @@ pub fn pat_id_map(dm: resolve::DefMap, pat: @pat) -> PatIdMap {
map
}
pub fn pat_is_variant_or_struct(dm: resolve::DefMap, pat: &pat) -> bool {
pub fn pat_is_variant_or_struct(dm: resolve::DefMap, pat: &Pat) -> bool {
match pat.node {
pat_enum(_, _) | pat_ident(_, _, None) | pat_struct(*) => {
PatEnum(_, _) | PatIdent(_, _, None) | PatStruct(*) => {
match dm.find(&pat.id) {
Some(&def_variant(*)) | Some(&def_struct(*)) => true,
Some(&DefVariant(*)) | Some(&DefStruct(*)) => true,
_ => false
}
}
@ -40,11 +40,11 @@ pub fn pat_is_variant_or_struct(dm: resolve::DefMap, pat: &pat) -> bool {
}
}
pub fn pat_is_const(dm: resolve::DefMap, pat: &pat) -> bool {
pub fn pat_is_const(dm: resolve::DefMap, pat: &Pat) -> bool {
match pat.node {
pat_ident(_, _, None) | pat_enum(*) => {
PatIdent(_, _, None) | PatEnum(*) => {
match dm.find(&pat.id) {
Some(&def_static(_, false)) => true,
Some(&DefStatic(_, false)) => true,
_ => false
}
}
@ -52,9 +52,9 @@ pub fn pat_is_const(dm: resolve::DefMap, pat: &pat) -> bool {
}
}
pub fn pat_is_binding(dm: resolve::DefMap, pat: @pat) -> bool {
pub fn pat_is_binding(dm: resolve::DefMap, pat: @Pat) -> bool {
match pat.node {
pat_ident(*) => {
PatIdent(*) => {
!pat_is_variant_or_struct(dm, pat) &&
!pat_is_const(dm, pat)
}
@ -62,19 +62,19 @@ pub fn pat_is_binding(dm: resolve::DefMap, pat: @pat) -> bool {
}
}
pub fn pat_is_binding_or_wild(dm: resolve::DefMap, pat: @pat) -> bool {
pub fn pat_is_binding_or_wild(dm: resolve::DefMap, pat: @Pat) -> bool {
match pat.node {
pat_ident(*) => pat_is_binding(dm, pat),
pat_wild => true,
PatIdent(*) => pat_is_binding(dm, pat),
PatWild => true,
_ => false
}
}
pub fn pat_bindings(dm: resolve::DefMap, pat: @pat,
it: &fn(binding_mode, NodeId, Span, &Path)) {
pub fn pat_bindings(dm: resolve::DefMap, pat: @Pat,
it: &fn(BindingMode, NodeId, Span, &Path)) {
do walk_pat(pat) |p| {
match p.node {
pat_ident(binding_mode, ref pth, _) if pat_is_binding(dm, p) => {
PatIdent(binding_mode, ref pth, _) if pat_is_binding(dm, p) => {
it(binding_mode, p.id, p.span, pth);
}
_ => {}
@ -83,7 +83,7 @@ pub fn pat_bindings(dm: resolve::DefMap, pat: @pat,
};
}
pub fn pat_binding_ids(dm: resolve::DefMap, pat: @pat) -> ~[NodeId] {
pub fn pat_binding_ids(dm: resolve::DefMap, pat: @Pat) -> ~[NodeId] {
let mut found = ~[];
pat_bindings(dm, pat, |_bm, b_id, _sp, _pt| found.push(b_id) );
return found;
@ -91,7 +91,7 @@ pub fn pat_binding_ids(dm: resolve::DefMap, pat: @pat) -> ~[NodeId] {
/// Checks if the pattern contains any patterns that bind something to
/// an ident, e.g. `foo`, or `Foo(foo)` or `foo @ Bar(*)`.
pub fn pat_contains_bindings(dm: resolve::DefMap, pat: @pat) -> bool {
pub fn pat_contains_bindings(dm: resolve::DefMap, pat: @Pat) -> bool {
let mut contains_bindings = false;
do walk_pat(pat) |p| {
if pat_is_binding(dm, p) {

View file

@ -18,12 +18,12 @@ use middle::typeck::{method_map, method_origin, method_param};
use middle::typeck::{method_static, method_object};
use std::util::ignore;
use syntax::ast::{decl_item, def, def_fn, def_id, def_static_method};
use syntax::ast::{def_variant, expr_field, expr_method_call, expr_path};
use syntax::ast::{expr_struct, expr_unary, Ident, inherited, item_enum};
use syntax::ast::{DeclItem, Def, DefFn, DefId, DefStaticMethod};
use syntax::ast::{DefVariant, ExprField, ExprMethodCall, ExprPath};
use syntax::ast::{ExprStruct, ExprUnary, Ident, inherited, item_enum};
use syntax::ast::{item_foreign_mod, item_fn, item_impl, item_struct};
use syntax::ast::{item_trait, LOCAL_CRATE, NodeId, pat_struct, Path};
use syntax::ast::{private, provided, public, required, stmt_decl, visibility};
use syntax::ast::{item_trait, LOCAL_CRATE, NodeId, PatStruct, Path};
use syntax::ast::{private, provided, public, required, StmtDecl, visibility};
use syntax::ast;
use syntax::ast_map::{node_foreign_item, node_item, node_method};
use syntax::ast_map::{node_trait_method};
@ -35,7 +35,7 @@ use syntax::codemap::Span;
use syntax::parse::token;
use syntax::visit;
use syntax::visit::Visitor;
use syntax::ast::{_mod,expr,item,Block,pat};
use syntax::ast::{_mod,Expr,item,Block,Pat};
struct PrivacyVisitor {
tcx: ty::ctxt,
@ -79,7 +79,7 @@ impl PrivacyVisitor {
}
// Checks that an enum variant is in scope
fn check_variant(&mut self, span: Span, enum_id: ast::def_id) {
fn check_variant(&mut self, span: Span, enum_id: ast::DefId) {
let variant_info = ty::enum_variants(self.tcx, enum_id)[0];
let parental_privacy = if is_local(enum_id) {
let parent_vis = ast_map::node_item_query(self.tcx.items,
@ -109,7 +109,7 @@ impl PrivacyVisitor {
// Returns true if a crate-local method is private and false otherwise.
fn method_is_private(&mut self, span: Span, method_id: NodeId) -> bool {
let check = |vis: visibility, container_id: def_id| {
let check = |vis: visibility, container_id: DefId| {
let mut is_private = false;
if vis == private {
is_private = true;
@ -203,7 +203,7 @@ impl PrivacyVisitor {
}
// Checks that a private field is in scope.
fn check_field(&mut self, span: Span, id: ast::def_id, ident: ast::Ident) {
fn check_field(&mut self, span: Span, id: ast::DefId, ident: ast::Ident) {
let fields = ty::lookup_struct_fields(self.tcx, id);
for field in fields.iter() {
if field.ident != ident { loop; }
@ -216,7 +216,7 @@ impl PrivacyVisitor {
}
// Given the ID of a method, checks to ensure it's in scope.
fn check_method_common(&mut self, span: Span, method_id: def_id, name: &Ident) {
fn check_method_common(&mut self, span: Span, method_id: DefId, name: &Ident) {
// If the method is a default method, we need to use the def_id of
// the default implementation.
// Having to do this this is really unfortunate.
@ -245,16 +245,16 @@ impl PrivacyVisitor {
}
// Checks that a private path is in scope.
fn check_path(&mut self, span: Span, def: def, path: &Path) {
fn check_path(&mut self, span: Span, def: Def, path: &Path) {
debug!("checking path");
match def {
def_static_method(method_id, _, _) => {
DefStaticMethod(method_id, _, _) => {
debug!("found static method def, checking it");
self.check_method_common(span,
method_id,
&path.segments.last().identifier)
}
def_fn(def_id, _) => {
DefFn(def_id, _) => {
if def_id.crate == LOCAL_CRATE {
if self.local_item_is_private(span, def_id.node) &&
!self.privileged_items.iter().any(|x| x == &def_id.node) {
@ -371,9 +371,9 @@ impl<'self> Visitor<&'self method_map> for PrivacyVisitor {
let mut n_added = 0;
for stmt in block.stmts.iter() {
match stmt.node {
stmt_decl(decl, _) => {
StmtDecl(decl, _) => {
match decl.node {
decl_item(item) => {
DeclItem(item) => {
self.add_privileged_item(item, &mut n_added);
}
_ => {}
@ -391,10 +391,10 @@ impl<'self> Visitor<&'self method_map> for PrivacyVisitor {
}
fn visit_expr<'mm>(&mut self, expr:@expr, method_map:&'mm method_map) {
fn visit_expr<'mm>(&mut self, expr:@Expr, method_map:&'mm method_map) {
match expr.node {
expr_field(base, ident, _) => {
ExprField(base, ident, _) => {
// Method calls are now a special syntactic form,
// so `a.b` should always be a field.
assert!(!method_map.contains_key(&expr.id));
@ -412,7 +412,7 @@ impl<'self> Visitor<&'self method_map> for PrivacyVisitor {
_ => {}
}
}
expr_method_call(_, base, ident, _, _, _) => {
ExprMethodCall(_, base, ident, _, _, _) => {
// Ditto
match ty::get(ty::type_autoderef(self.tcx, ty::expr_ty(self.tcx,
base))).sty {
@ -436,10 +436,10 @@ impl<'self> Visitor<&'self method_map> for PrivacyVisitor {
_ => {}
}
}
expr_path(ref path) => {
ExprPath(ref path) => {
self.check_path(expr.span, self.tcx.def_map.get_copy(&expr.id), path);
}
expr_struct(_, ref fields, _) => {
ExprStruct(_, ref fields, _) => {
match ty::get(ty::expr_ty(self.tcx, expr)).sty {
ty_struct(id, _) => {
if id.crate != LOCAL_CRATE ||
@ -455,7 +455,7 @@ impl<'self> Visitor<&'self method_map> for PrivacyVisitor {
if id.crate != LOCAL_CRATE ||
!self.privileged_items.iter().any(|x| x == &(id.node)) {
match self.tcx.def_map.get_copy(&expr.id) {
def_variant(_, variant_id) => {
DefVariant(_, variant_id) => {
for field in (*fields).iter() {
debug!("(privacy checking) \
checking field in \
@ -481,7 +481,7 @@ impl<'self> Visitor<&'self method_map> for PrivacyVisitor {
}
}
}
expr_unary(_, ast::deref, operand) => {
ExprUnary(_, ast::UnDeref, operand) => {
// In *e, we need to check that if e's type is an
// enum type t, then t's first variant is public or
// privileged. (We can assume it has only one variant
@ -503,10 +503,10 @@ impl<'self> Visitor<&'self method_map> for PrivacyVisitor {
}
fn visit_pat<'mm>(&mut self, pattern:@pat, method_map:&'mm method_map) {
fn visit_pat<'mm>(&mut self, pattern:@Pat, method_map:&'mm method_map) {
match pattern.node {
pat_struct(_, ref fields, _) => {
PatStruct(_, ref fields, _) => {
match ty::get(ty::pat_ty(self.tcx, pattern)).sty {
ty_struct(id, _) => {
if id.crate != LOCAL_CRATE ||
@ -522,7 +522,7 @@ impl<'self> Visitor<&'self method_map> for PrivacyVisitor {
if enum_id.crate != LOCAL_CRATE ||
!self.privileged_items.iter().any(|x| x == &enum_id.node) {
match self.tcx.def_map.find(&pattern.id) {
Some(&def_variant(_, variant_id)) => {
Some(&DefVariant(_, variant_id)) => {
for field in fields.iter() {
debug!("(privacy checking) \
checking field in \

View file

@ -205,10 +205,10 @@ struct MarkSymbolVisitor {
impl Visitor<()> for MarkSymbolVisitor {
fn visit_expr(&mut self, expr:@expr, _:()) {
fn visit_expr(&mut self, expr:@Expr, _:()) {
match expr.node {
expr_path(_) => {
ExprPath(_) => {
let def = match self.tcx.def_map.find(&expr.id) {
Some(&def) => def,
None => {
@ -225,7 +225,7 @@ impl Visitor<()> for MarkSymbolVisitor {
}
self.reachable_symbols.insert(def_id.node);
}
expr_method_call(*) => {
ExprMethodCall(*) => {
match self.method_map.find(&expr.id) {
Some(&typeck::method_map_entry {
origin: typeck::method_static(def_id),
@ -283,7 +283,7 @@ impl ReachableContext {
// Returns true if the given def ID represents a local item that is
// eligible for inlining and false otherwise.
fn def_id_represents_local_inlined_item(tcx: ty::ctxt, def_id: def_id)
fn def_id_represents_local_inlined_item(tcx: ty::ctxt, def_id: DefId)
-> bool {
if def_id.crate != LOCAL_CRATE {
return false

View file

@ -36,7 +36,7 @@ use syntax::parse::token;
use syntax::parse::token::special_idents;
use syntax::{ast, visit};
use syntax::visit::{Visitor,fn_kind};
use syntax::ast::{Block,item,fn_decl,NodeId,arm,pat,stmt,expr,Local};
use syntax::ast::{Block,item,fn_decl,NodeId,Arm,Pat,Stmt,Expr,Local};
use syntax::ast::{Ty,TypeMethod,struct_field};
/**
@ -340,13 +340,13 @@ fn resolve_block(visitor: &mut RegionResolutionVisitor,
}
fn resolve_arm(visitor: &mut RegionResolutionVisitor,
arm: &ast::arm,
arm: &ast::Arm,
cx: Context) {
visit::walk_arm(visitor, arm, cx);
}
fn resolve_pat(visitor: &mut RegionResolutionVisitor,
pat: @ast::pat,
pat: @ast::Pat,
cx: Context) {
assert_eq!(cx.var_parent, cx.parent);
parent_to_expr(cx, pat.id, pat.span);
@ -354,32 +354,32 @@ fn resolve_pat(visitor: &mut RegionResolutionVisitor,
}
fn resolve_stmt(visitor: &mut RegionResolutionVisitor,
stmt: @ast::stmt,
stmt: @ast::Stmt,
cx: Context) {
match stmt.node {
ast::stmt_decl(*) => {
ast::StmtDecl(*) => {
visit::walk_stmt(visitor, stmt, cx);
}
ast::stmt_expr(_, stmt_id) |
ast::stmt_semi(_, stmt_id) => {
ast::StmtExpr(_, stmt_id) |
ast::StmtSemi(_, stmt_id) => {
parent_to_expr(cx, stmt_id, stmt.span);
let expr_cx = Context {parent: Some(stmt_id), ..cx};
visit::walk_stmt(visitor, stmt, expr_cx);
}
ast::stmt_mac(*) => cx.sess.bug("unexpanded macro")
ast::StmtMac(*) => cx.sess.bug("unexpanded macro")
}
}
fn resolve_expr(visitor: &mut RegionResolutionVisitor,
expr: @ast::expr,
expr: @ast::Expr,
cx: Context) {
parent_to_expr(cx, expr.id, expr.span);
let mut new_cx = cx;
new_cx.parent = Some(expr.id);
match expr.node {
ast::expr_assign_op(*) | ast::expr_index(*) | ast::expr_binary(*) |
ast::expr_unary(*) | ast::expr_call(*) | ast::expr_method_call(*) => {
ast::ExprAssignOp(*) | ast::ExprIndex(*) | ast::ExprBinary(*) |
ast::ExprUnary(*) | ast::ExprCall(*) | ast::ExprMethodCall(*) => {
// FIXME(#6268) Nested method calls
//
// The lifetimes for a call or method call look as follows:
@ -400,7 +400,7 @@ fn resolve_expr(visitor: &mut RegionResolutionVisitor,
// parent_to_expr(new_cx, expr.callee_id);
}
ast::expr_match(*) => {
ast::ExprMatch(*) => {
new_cx.var_parent = Some(expr.id);
}
@ -485,16 +485,16 @@ impl Visitor<Context> for RegionResolutionVisitor {
fn visit_fn(&mut self, fk:&fn_kind, fd:&fn_decl, b:&Block, s:Span, n:NodeId, cx:Context) {
resolve_fn(self, fk, fd, b, s, n, cx);
}
fn visit_arm(&mut self, a:&arm, cx:Context) {
fn visit_arm(&mut self, a:&Arm, cx:Context) {
resolve_arm(self, a, cx);
}
fn visit_pat(&mut self, p:@pat, cx:Context) {
fn visit_pat(&mut self, p:@Pat, cx:Context) {
resolve_pat(self, p, cx);
}
fn visit_stmt(&mut self, s:@stmt, cx:Context) {
fn visit_stmt(&mut self, s:@Stmt, cx:Context) {
resolve_stmt(self, s, cx);
}
fn visit_expr(&mut self, ex:@expr, cx:Context) {
fn visit_expr(&mut self, ex:@Expr, cx:Context) {
resolve_expr(self, ex, cx);
}
fn visit_local(&mut self, l:@Local, cx:Context) {
@ -823,9 +823,9 @@ fn determine_rp_in_ty(visitor: &mut DetermineRpVisitor,
match ty.node {
ast::ty_path(ref path, _, id) => {
match cx.def_map.find(&id) {
Some(&ast::def_ty(did)) |
Some(&ast::def_trait(did)) |
Some(&ast::def_struct(did)) => {
Some(&ast::DefTy(did)) |
Some(&ast::DefTrait(did)) |
Some(&ast::DefStruct(did)) => {
if did.crate == ast::LOCAL_CRATE {
if cx.region_is_relevant(&path.segments.last().lifetime) {
cx.add_dep(did.node);
@ -890,7 +890,7 @@ fn determine_rp_in_ty(visitor: &mut DetermineRpVisitor,
mt: &ast::mt,
cx: @mut DetermineRpCtxt) {
// mutability is invariant
if mt.mutbl == ast::m_mutbl {
if mt.mutbl == ast::MutMutable {
do cx.with_ambient_variance(rv_invariant) {
visitor.visit_ty(mt.ty, cx);
}

View file

@ -43,18 +43,18 @@ use std::hashmap::{HashMap, HashSet};
use std::util;
// Definition mapping
pub type DefMap = @mut HashMap<NodeId,def>;
pub type DefMap = @mut HashMap<NodeId,Def>;
pub struct binding_info {
span: Span,
binding_mode: binding_mode,
binding_mode: BindingMode,
}
// Map from the name in a pattern to its binding mode.
pub type BindingMap = HashMap<Ident,binding_info>;
// Trait method resolution
pub type TraitMap = HashMap<NodeId,@mut ~[def_id]>;
pub type TraitMap = HashMap<NodeId,@mut ~[DefId]>;
// A summary of the generics on a trait.
struct TraitGenerics {
@ -68,7 +68,7 @@ pub type ExportMap2 = @mut HashMap<NodeId, ~[Export2]>;
pub struct Export2 {
name: @str, // The name of the target.
def_id: def_id, // The definition of the target.
def_id: DefId, // The definition of the target.
reexport: bool, // Whether this is a reexport.
}
@ -120,8 +120,8 @@ impl NamespaceResult {
pub enum NameDefinition {
NoNameDefinition, //< The name was unbound.
ChildNameDefinition(def), //< The name identifies an immediate child.
ImportNameDefinition(def) //< The name identifies an import.
ChildNameDefinition(Def), //< The name identifies an immediate child.
ImportNameDefinition(Def) //< The name identifies an import.
}
#[deriving(Eq)]
@ -143,13 +143,13 @@ impl Visitor<()> for ResolveVisitor {
fn visit_item(&mut self, item:@item, _:()) {
self.resolver.resolve_item(item, self);
}
fn visit_arm(&mut self, arm:&arm, _:()) {
fn visit_arm(&mut self, arm:&Arm, _:()) {
self.resolver.resolve_arm(arm, self);
}
fn visit_block(&mut self, block:&Block, _:()) {
self.resolver.resolve_block(block, self);
}
fn visit_expr(&mut self, expr:@expr, _:()) {
fn visit_expr(&mut self, expr:@Expr, _:()) {
self.resolver.resolve_expr(expr, self);
}
fn visit_local(&mut self, local:@Local, _:()) {
@ -293,8 +293,8 @@ enum NameSearchType {
}
pub enum BareIdentifierPatternResolution {
FoundStructOrEnumVariant(def),
FoundConst(def),
FoundStructOrEnumVariant(Def),
FoundConst(Def),
BareIdentifierPatternUnresolved
}
@ -442,7 +442,7 @@ pub enum ModuleKind {
/// One node in the tree of modules.
pub struct Module {
parent_link: ParentLink,
def_id: Option<def_id>,
def_id: Option<DefId>,
kind: ModuleKind,
children: @mut HashMap<Ident, @mut NameBindings>,
@ -485,7 +485,7 @@ pub struct Module {
impl Module {
pub fn new(parent_link: ParentLink,
def_id: Option<def_id>,
def_id: Option<DefId>,
kind: ModuleKind,
external: bool)
-> Module {
@ -514,14 +514,14 @@ impl Module {
pub struct TypeNsDef {
privacy: Privacy,
module_def: Option<@mut Module>,
type_def: Option<def>,
type_def: Option<Def>,
type_span: Option<Span>
}
// Records a possibly-private value definition.
pub struct ValueNsDef {
privacy: Privacy,
def: def,
def: Def,
value_span: Option<Span>,
}
@ -544,7 +544,7 @@ impl NameBindings {
pub fn define_module(@mut self,
privacy: Privacy,
parent_link: ParentLink,
def_id: Option<def_id>,
def_id: Option<DefId>,
kind: ModuleKind,
external: bool,
sp: Span) {
@ -574,7 +574,7 @@ impl NameBindings {
pub fn set_module_kind(@mut self,
privacy: Privacy,
parent_link: ParentLink,
def_id: Option<def_id>,
def_id: Option<DefId>,
kind: ModuleKind,
external: bool,
_sp: Span) {
@ -609,7 +609,7 @@ impl NameBindings {
}
/// Records a type definition.
pub fn define_type(@mut self, privacy: Privacy, def: def, sp: Span) {
pub fn define_type(@mut self, privacy: Privacy, def: Def, sp: Span) {
// Merges the type with the existing type def or creates a new one.
match self.type_def {
None => {
@ -632,7 +632,7 @@ impl NameBindings {
}
/// Records a value definition.
pub fn define_value(@mut self, privacy: Privacy, def: def, sp: Span) {
pub fn define_value(@mut self, privacy: Privacy, def: Def, sp: Span) {
self.value_def = Some(ValueNsDef { privacy: privacy, def: def, value_span: Some(sp) });
}
@ -678,7 +678,7 @@ impl NameBindings {
}
}
pub fn def_for_namespace(&self, namespace: Namespace) -> Option<def> {
pub fn def_for_namespace(&self, namespace: Namespace) -> Option<Def> {
match namespace {
TypeNS => {
match self.type_def {
@ -690,7 +690,7 @@ impl NameBindings {
match type_def.module_def {
Some(module) => {
match module.def_id {
Some(did) => Some(def_mod(did)),
Some(did) => Some(DefMod(did)),
None => None,
}
}
@ -814,7 +814,7 @@ pub fn Resolver(session: Session,
graph_root.define_module(Public,
NoParentLink,
Some(def_id { crate: 0, node: 0 }),
Some(DefId { crate: 0, node: 0 }),
NormalModuleKind,
false,
crate.span);
@ -873,8 +873,8 @@ pub struct Resolver {
graph_root: @mut NameBindings,
method_map: @mut HashMap<Ident, HashSet<def_id>>,
structs: HashSet<def_id>,
method_map: @mut HashMap<Ident, HashSet<DefId>>,
structs: HashSet<DefId>,
// The number of imports that are currently unresolved.
unresolved_imports: uint,
@ -897,7 +897,7 @@ pub struct Resolver {
xray_context: XrayFlag,
// The trait that the current context can refer to.
current_trait_refs: Option<~[def_id]>,
current_trait_refs: Option<~[DefId]>,
// The ident for the keyword "self".
self_ident: Ident,
@ -1071,7 +1071,7 @@ impl Resolver {
}
ForbidDuplicateTypes => {
match child.def_for_namespace(TypeNS) {
Some(def_mod(_)) | None => {}
Some(DefMod(_)) | None => {}
Some(_) => duplicate_type = TypeError
}
Some(TypeNS)
@ -1085,7 +1085,7 @@ impl Resolver {
ForbidDuplicateTypesAndValues => {
let mut n = None;
match child.def_for_namespace(TypeNS) {
Some(def_mod(_)) | None => {}
Some(DefMod(_)) | None => {}
Some(_) => {
n = Some(TypeNS);
duplicate_type = TypeError;
@ -1131,9 +1131,9 @@ impl Resolver {
// Check each statement.
for statement in block.stmts.iter() {
match statement.node {
stmt_decl(declaration, _) => {
StmtDecl(declaration, _) => {
match declaration.node {
decl_item(_) => {
DeclItem(_) => {
return true;
}
_ => {
@ -1177,7 +1177,7 @@ impl Resolver {
self.add_child(ident, parent, ForbidDuplicateModules, sp);
let parent_link = self.get_parent_link(new_parent, ident);
let def_id = def_id { crate: 0, node: item.id };
let def_id = DefId { crate: 0, node: item.id };
name_bindings.define_module(privacy,
parent_link,
Some(def_id),
@ -1200,7 +1200,7 @@ impl Resolver {
let parent_link = self.get_parent_link(new_parent,
ident);
let def_id = def_id { crate: 0, node: item.id };
let def_id = DefId { crate: 0, node: item.id };
name_bindings.define_module(privacy,
parent_link,
Some(def_id),
@ -1223,16 +1223,16 @@ impl Resolver {
item_static(_, m, _) => {
let (name_bindings, _) =
self.add_child(ident, parent, ForbidDuplicateValues, sp);
let mutbl = m == ast::m_mutbl;
let mutbl = m == ast::MutMutable;
name_bindings.define_value
(privacy, def_static(local_def(item.id), mutbl), sp);
(privacy, DefStatic(local_def(item.id), mutbl), sp);
}
item_fn(_, purity, _, _, _) => {
let (name_bindings, new_parent) =
self.add_child(ident, parent, ForbidDuplicateValues, sp);
let def = def_fn(local_def(item.id), purity);
let def = DefFn(local_def(item.id), purity);
name_bindings.define_value(privacy, def, sp);
visit::walk_item(visitor, item, new_parent);
}
@ -1243,7 +1243,7 @@ impl Resolver {
self.add_child(ident, parent, ForbidDuplicateTypes, sp);
name_bindings.define_type
(privacy, def_ty(local_def(item.id)), sp);
(privacy, DefTy(local_def(item.id)), sp);
}
item_enum(ref enum_definition, _) => {
@ -1251,7 +1251,7 @@ impl Resolver {
self.add_child(ident, parent, ForbidDuplicateTypes, sp);
name_bindings.define_type
(privacy, def_ty(local_def(item.id)), sp);
(privacy, DefTy(local_def(item.id)), sp);
for variant in (*enum_definition).variants.iter() {
self.build_reduced_graph_for_variant(
@ -1275,12 +1275,12 @@ impl Resolver {
let (name_bindings, new_parent) = self.add_child(ident, parent, forbid, sp);
// Define a name in the type namespace.
name_bindings.define_type(privacy, def_ty(local_def(item.id)), sp);
name_bindings.define_type(privacy, DefTy(local_def(item.id)), sp);
// If this is a newtype or unit-like struct, define a name
// in the value namespace as well
do ctor_id.while_some |cid| {
name_bindings.define_value(privacy, def_struct(local_def(cid)), sp);
name_bindings.define_value(privacy, DefStruct(local_def(cid)), sp);
None
}
@ -1351,7 +1351,7 @@ impl Resolver {
sty_static => {
// Static methods become
// `def_static_method`s.
def_static_method(local_def(method.id),
DefStaticMethod(local_def(method.id),
FromImpl(local_def(
item.id)),
method.purity)
@ -1359,7 +1359,7 @@ impl Resolver {
_ => {
// Non-static methods become
// `def_method`s.
def_method(local_def(method.id), None)
DefMethod(local_def(method.id), None)
}
};
@ -1404,13 +1404,13 @@ impl Resolver {
let def = match ty_m.explicit_self.node {
sty_static => {
// Static methods become `def_static_method`s.
def_static_method(local_def(ty_m.id),
DefStaticMethod(local_def(ty_m.id),
FromTrait(local_def(item.id)),
ty_m.purity)
}
_ => {
// Non-static methods become `def_method`s.
def_method(local_def(ty_m.id),
DefMethod(local_def(ty_m.id),
Some(local_def(item.id)))
}
};
@ -1442,7 +1442,7 @@ impl Resolver {
}
}
name_bindings.define_type(privacy, def_trait(def_id), sp);
name_bindings.define_type(privacy, DefTrait(def_id), sp);
visit::walk_item(visitor, item, new_parent);
}
@ -1456,7 +1456,7 @@ impl Resolver {
// type and/or value namespaces.
pub fn build_reduced_graph_for_variant(@mut self,
variant: &variant,
item_id: def_id,
item_id: DefId,
parent_privacy: Privacy,
parent: ReducedGraphParent,
_: &mut BuildReducedGraphVisitor) {
@ -1474,7 +1474,7 @@ impl Resolver {
let (child, _) = self.add_child(ident, parent, ForbidDuplicateValues,
variant.span);
child.define_value(privacy,
def_variant(item_id,
DefVariant(item_id,
local_def(variant.node.id)),
variant.span);
}
@ -1482,7 +1482,7 @@ impl Resolver {
let (child, _) = self.add_child(ident, parent, ForbidDuplicateTypesAndValues,
variant.span);
child.define_type(privacy,
def_variant(item_id,
DefVariant(item_id,
local_def(variant.node.id)),
variant.span);
self.structs.insert(local_def(variant.node.id));
@ -1573,7 +1573,7 @@ impl Resolver {
match find_extern_mod_stmt_cnum(self.session.cstore,
node_id) {
Some(crate_id) => {
let def_id = def_id { crate: crate_id, node: 0 };
let def_id = DefId { crate: crate_id, node: 0 };
let parent_link = ModuleParentLink
(self.get_module_from_parent(parent), name);
let external_module = @mut Module::new(parent_link,
@ -1607,7 +1607,7 @@ impl Resolver {
match foreign_item.node {
foreign_item_fn(_, ref generics) => {
let def = def_fn(local_def(foreign_item.id), unsafe_fn);
let def = DefFn(local_def(foreign_item.id), unsafe_fn);
name_bindings.define_value(Public, def, foreign_item.span);
do self.with_type_parameter_rib(
@ -1618,7 +1618,7 @@ impl Resolver {
}
}
foreign_item_static(_, m) => {
let def = def_static(local_def(foreign_item.id), m);
let def = DefStatic(local_def(foreign_item.id), m);
name_bindings.define_value(Public, def, foreign_item.span);
visit::walk_foreign_item(visitor, foreign_item, new_parent);
@ -1655,7 +1655,7 @@ impl Resolver {
}
fn handle_external_def(@mut self,
def: def,
def: Def,
visibility: ast::visibility,
child_name_bindings: @mut NameBindings,
final_ident: &str,
@ -1663,8 +1663,8 @@ impl Resolver {
new_parent: ReducedGraphParent) {
let privacy = visibility_to_privacy(visibility);
match def {
def_mod(def_id) | def_foreign_mod(def_id) | def_struct(def_id) |
def_ty(def_id) => {
DefMod(def_id) | DefForeignMod(def_id) | DefStruct(def_id) |
DefTy(def_id) => {
match child_name_bindings.type_def {
Some(TypeNsDef { module_def: Some(module_def), _ }) => {
debug!("(building reduced graph for external crate) \
@ -1690,8 +1690,8 @@ impl Resolver {
}
match def {
def_mod(_) | def_foreign_mod(_) => {}
def_variant(*) => {
DefMod(_) | DefForeignMod(_) => {}
DefVariant(*) => {
debug!("(building reduced graph for external crate) building \
variant %s",
final_ident);
@ -1700,12 +1700,12 @@ impl Resolver {
let privacy = variant_visibility_to_privacy(visibility, true);
child_name_bindings.define_value(privacy, def, dummy_sp());
}
def_fn(*) | def_static_method(*) | def_static(*) => {
DefFn(*) | DefStaticMethod(*) | DefStatic(*) => {
debug!("(building reduced graph for external \
crate) building value (fn/static) %s", final_ident);
child_name_bindings.define_value(privacy, def, dummy_sp());
}
def_trait(def_id) => {
DefTrait(def_id) => {
debug!("(building reduced graph for external \
crate) building type %s", final_ident);
@ -1751,13 +1751,13 @@ impl Resolver {
true,
dummy_sp())
}
def_ty(_) => {
DefTy(_) => {
debug!("(building reduced graph for external \
crate) building type %s", final_ident);
child_name_bindings.define_type(privacy, def, dummy_sp());
}
def_struct(def_id) => {
DefStruct(def_id) => {
debug!("(building reduced graph for external \
crate) building type and value for %s",
final_ident);
@ -1767,13 +1767,13 @@ impl Resolver {
}
self.structs.insert(def_id);
}
def_method(*) => {
DefMethod(*) => {
// Ignored; handled elsewhere.
}
def_self(*) | def_arg(*) | def_local(*) |
def_prim_ty(*) | def_ty_param(*) | def_binding(*) |
def_use(*) | def_upvar(*) | def_region(*) |
def_typaram_binder(*) | def_label(*) | def_self_ty(*) => {
DefSelf(*) | DefArg(*) | DefLocal(*) |
DefPrimTy(*) | DefTyParam(*) | DefBinding(*) |
DefUse(*) | DefUpvar(*) | DefRegion(*) |
DefTyParamBinder(*) | DefLabel(*) | DefSelfTy(*) => {
fail!("didn't expect `%?`", def);
}
}
@ -1788,7 +1788,7 @@ impl Resolver {
DlDef(def) => {
// Add the new child item, if necessary.
match def {
def_foreign_mod(def_id) => {
DefForeignMod(def_id) => {
// Foreign modules have no names. Recur and populate
// eagerly.
do csearch::each_child_of_item(self.session.cstore,
@ -1889,7 +1889,7 @@ impl Resolver {
new_parent,
OverwriteDuplicates,
dummy_sp());
let def = def_fn(
let def = DefFn(
static_method_info.def_id,
static_method_info.purity);
method_name_bindings.define_value(
@ -3395,16 +3395,16 @@ impl Resolver {
let is_ty_param;
match def_like {
DlDef(d @ def_local(*)) | DlDef(d @ def_upvar(*)) |
DlDef(d @ def_arg(*)) | DlDef(d @ def_binding(*)) => {
DlDef(d @ DefLocal(*)) | DlDef(d @ DefUpvar(*)) |
DlDef(d @ DefArg(*)) | DlDef(d @ DefBinding(*)) => {
def = d;
is_ty_param = false;
}
DlDef(d @ def_ty_param(*)) => {
DlDef(d @ DefTyParam(*)) => {
def = d;
is_ty_param = true;
}
DlDef(d @ def_self(*))
DlDef(d @ DefSelf(*))
if allow_capturing_self == DontAllowCapturingSelf => {
def = d;
is_ty_param = false;
@ -3422,7 +3422,7 @@ impl Resolver {
}
FunctionRibKind(function_id, body_id) => {
if !is_ty_param {
def = def_upvar(def_id_of_def(def).node,
def = DefUpvar(def_id_of_def(def).node,
@def,
function_id,
body_id);
@ -3432,9 +3432,9 @@ impl Resolver {
// If the def is a ty param, and came from the parent
// item, it's ok
match def {
def_ty_param(did, _)
DefTyParam(did, _)
if self.def_map.find(&did.node).map_move(|x| *x)
== Some(def_typaram_binder(item_id)) => {
== Some(DefTyParamBinder(item_id)) => {
// ok
}
_ => {
@ -3592,7 +3592,7 @@ impl Resolver {
let self_type_rib = @Rib::new(NormalRibKind);
self.type_ribs.push(self_type_rib);
self_type_rib.bindings.insert(self.type_self_ident,
DlDef(def_self_ty(item.id)));
DlDef(DefSelfTy(item.id)));
// Create a new rib for the trait-wide type parameters.
do self.with_type_parameter_rib
@ -3726,13 +3726,13 @@ impl Resolver {
let name = type_parameter.ident;
debug!("with_type_parameter_rib: %d %d", node_id,
type_parameter.id);
let def_like = DlDef(def_ty_param
let def_like = DlDef(DefTyParam
(local_def(type_parameter.id),
index + initial_index));
// Associate this type parameter with
// the item that bound it
self.record_def(type_parameter.id,
def_typaram_binder(node_id));
DefTyParamBinder(node_id));
function_type_rib.bindings.insert(name, def_like);
}
}
@ -3801,7 +3801,7 @@ impl Resolver {
// Nothing to do.
}
HasSelfBinding(self_node_id) => {
let def_like = DlDef(def_self(self_node_id));
let def_like = DlDef(DefSelf(self_node_id));
*function_value_rib.self_binding = Some(def_like);
}
}
@ -4064,7 +4064,7 @@ impl Resolver {
None, visitor);
}
pub fn binding_mode_map(@mut self, pat: @pat) -> BindingMap {
pub fn binding_mode_map(@mut self, pat: @Pat) -> BindingMap {
let mut result = HashMap::new();
do pat_bindings(self.def_map, pat) |binding_mode, _id, sp, path| {
let ident = path_to_ident(path);
@ -4075,7 +4075,7 @@ impl Resolver {
return result;
}
pub fn check_consistent_bindings(@mut self, arm: &arm) {
pub fn check_consistent_bindings(@mut self, arm: &Arm) {
if arm.pats.len() == 0 { return; }
let map_0 = self.binding_mode_map(arm.pats[0]);
for (i, p) in arm.pats.iter().enumerate() {
@ -4114,7 +4114,7 @@ impl Resolver {
}
}
pub fn resolve_arm(@mut self, arm: &arm, visitor: &mut ResolveVisitor) {
pub fn resolve_arm(@mut self, arm: &Arm, visitor: &mut ResolveVisitor) {
self.value_ribs.push(@Rib::new(NormalRibKind));
let bindings_list = @mut HashMap::new();
@ -4178,7 +4178,7 @@ impl Resolver {
Some(&primitive_type) => {
result_def =
Some(def_prim_ty(primitive_type));
Some(DefPrimTy(primitive_type));
if path.segments
.iter()
@ -4267,7 +4267,7 @@ impl Resolver {
}
pub fn resolve_pattern(@mut self,
pattern: @pat,
pattern: @Pat,
mode: PatternBindingMode,
mutability: Mutability,
// Maps idents to the node ID for the (outermost)
@ -4277,7 +4277,7 @@ impl Resolver {
let pat_id = pattern.id;
do walk_pat(pattern) |pattern| {
match pattern.node {
pat_ident(binding_mode, ref path, _)
PatIdent(binding_mode, ref path, _)
if !path.global && path.segments.len() == 1 => {
// The meaning of pat_ident with no type parameters
@ -4340,15 +4340,15 @@ impl Resolver {
// For pattern arms, we must use
// `def_binding` definitions.
def_binding(pattern.id, binding_mode)
DefBinding(pattern.id, binding_mode)
}
LocalIrrefutableMode => {
// But for locals, we use `def_local`.
def_local(pattern.id, is_mutable)
DefLocal(pattern.id, is_mutable)
}
ArgumentIrrefutableMode => {
// And for function arguments, `def_arg`.
def_arg(pattern.id, is_mutable)
DefArg(pattern.id, is_mutable)
}
};
@ -4406,14 +4406,14 @@ impl Resolver {
}
}
pat_ident(binding_mode, ref path, _) => {
PatIdent(binding_mode, ref path, _) => {
// This must be an enum variant, struct, or constant.
match self.resolve_path(pat_id, path, ValueNS, false, visitor) {
Some(def @ def_variant(*)) |
Some(def @ def_struct(*)) => {
Some(def @ DefVariant(*)) |
Some(def @ DefStruct(*)) => {
self.record_def(pattern.id, def);
}
Some(def @ def_static(*)) => {
Some(def @ DefStatic(*)) => {
self.enforce_default_binding_mode(
pattern,
binding_mode,
@ -4441,13 +4441,13 @@ impl Resolver {
}
}
pat_enum(ref path, _) => {
PatEnum(ref path, _) => {
// This must be an enum variant, struct or const.
match self.resolve_path(pat_id, path, ValueNS, false, visitor) {
Some(def @ def_fn(*)) |
Some(def @ def_variant(*)) |
Some(def @ def_struct(*)) |
Some(def @ def_static(*)) => {
Some(def @ DefFn(*)) |
Some(def @ DefVariant(*)) |
Some(def @ DefStruct(*)) |
Some(def @ DefStatic(*)) => {
self.record_def(pattern.id, def);
}
Some(_) => {
@ -4461,8 +4461,12 @@ impl Resolver {
}
None => {
self.resolve_error(path.span,
"unresolved enum variant, \
struct or const");
fmt!("unresolved enum variant, \
struct or const `%s`",
self.session
.str_of(path.segments
.last()
.identifier)));
}
}
@ -4474,27 +4478,27 @@ impl Resolver {
}
}
pat_lit(expr) => {
PatLit(expr) => {
self.resolve_expr(expr, visitor);
}
pat_range(first_expr, last_expr) => {
PatRange(first_expr, last_expr) => {
self.resolve_expr(first_expr, visitor);
self.resolve_expr(last_expr, visitor);
}
pat_struct(ref path, _, _) => {
PatStruct(ref path, _, _) => {
match self.resolve_path(pat_id, path, TypeNS, false, visitor) {
Some(def_ty(class_id))
Some(DefTy(class_id))
if self.structs.contains(&class_id) => {
let class_def = def_struct(class_id);
let class_def = DefStruct(class_id);
self.record_def(pattern.id, class_def);
}
Some(definition @ def_struct(class_id)) => {
Some(definition @ DefStruct(class_id)) => {
assert!(self.structs.contains(&class_id));
self.record_def(pattern.id, definition);
}
Some(definition @ def_variant(_, variant_id))
Some(definition @ DefVariant(_, variant_id))
if self.structs.contains(&variant_id) => {
self.record_def(pattern.id, definition);
}
@ -4532,10 +4536,10 @@ impl Resolver {
}
Some(def) => {
match def.def {
def @ def_variant(*) | def @ def_struct(*) => {
def @ DefVariant(*) | def @ DefStruct(*) => {
return FoundStructOrEnumVariant(def);
}
def @ def_static(_, false) => {
def @ DefStatic(_, false) => {
return FoundConst(def);
}
_ => {
@ -4564,7 +4568,7 @@ impl Resolver {
namespace: Namespace,
check_ribs: bool,
visitor: &mut ResolveVisitor)
-> Option<def> {
-> Option<Def> {
// First, resolve the types.
for ty in path.segments.iter().flat_map(|s| s.types.iter()) {
self.resolve_type(ty, visitor);
@ -4608,7 +4612,7 @@ impl Resolver {
namespace: Namespace,
check_ribs: bool,
span: Span)
-> Option<def> {
-> Option<Def> {
if check_ribs {
match self.resolve_identifier_in_local_ribs(identifier,
namespace,
@ -4692,7 +4696,7 @@ impl Resolver {
match module.def_id {
None => {} // Continue.
Some(def_id) => {
return ChildNameDefinition(def_mod(def_id));
return ChildNameDefinition(DefMod(def_id));
}
}
}
@ -4719,7 +4723,7 @@ impl Resolver {
path: &Path,
xray: XrayFlag,
namespace: Namespace)
-> Option<def> {
-> Option<Def> {
let module_path_idents = self.intern_module_part_of_path(path);
let containing_module;
@ -4785,7 +4789,7 @@ impl Resolver {
path: &Path,
xray: XrayFlag,
namespace: Namespace)
-> Option<def> {
-> Option<Def> {
let module_path_idents = self.intern_module_part_of_path(path);
let root_module = self.graph_root.get_module();
@ -4832,7 +4836,7 @@ impl Resolver {
ident: Ident,
namespace: Namespace,
span: Span)
-> Option<def> {
-> Option<Def> {
// Check the local set of ribs.
let search_result;
match namespace {
@ -4862,7 +4866,7 @@ impl Resolver {
}
pub fn resolve_self_value_in_local_ribs(@mut self, span: Span)
-> Option<def> {
-> Option<Def> {
// FIXME #4950: This should not use a while loop.
let ribs = &mut self.value_ribs;
let mut i = ribs.len();
@ -4897,7 +4901,7 @@ impl Resolver {
pub fn resolve_item_by_identifier_in_lexical_scope(@mut self,
ident: Ident,
namespace: Namespace)
-> Option<def> {
-> Option<Def> {
// Check the items.
match self.resolve_item_in_lexical_scope(self.current_module,
ident,
@ -5014,7 +5018,7 @@ impl Resolver {
return false;
}
pub fn resolve_expr(@mut self, expr: @expr, visitor: &mut ResolveVisitor) {
pub fn resolve_expr(@mut self, expr: @Expr, visitor: &mut ResolveVisitor) {
// First, record candidate traits for this expression if it could
// result in the invocation of a method call.
@ -5025,7 +5029,7 @@ impl Resolver {
// The interpretation of paths depends on whether the path has
// multiple elements in it or not.
expr_path(ref path) => {
ExprPath(ref path) => {
// This is a local path in the value namespace. Walk through
// scopes looking for it.
@ -5038,7 +5042,7 @@ impl Resolver {
// First-class methods are not supported yet; error
// out here.
match def {
def_method(*) => {
DefMethod(*) => {
self.resolve_error(expr.span,
"first-class methods \
are not supported");
@ -5068,7 +5072,7 @@ impl Resolver {
// structs, which wouldn't result in this error.)
match self.with_no_errors(||
self.resolve_path(expr.id, path, TypeNS, false, visitor)) {
Some(def_ty(struct_id))
Some(DefTy(struct_id))
if self.structs.contains(&struct_id) => {
self.resolve_error(expr.span,
fmt!("`%s` is a structure name, but this expression \
@ -5102,7 +5106,7 @@ impl Resolver {
visit::walk_expr(visitor, expr, ());
}
expr_fn_block(ref fn_decl, ref block) => {
ExprFnBlock(ref fn_decl, ref block) => {
self.resolve_function(FunctionRibKind(expr.id, block.id),
Some(fn_decl),
NoTypeParameters,
@ -5111,15 +5115,15 @@ impl Resolver {
visitor);
}
expr_struct(ref path, _, _) => {
ExprStruct(ref path, _, _) => {
// Resolve the path to the structure it goes to.
match self.resolve_path(expr.id, path, TypeNS, false, visitor) {
Some(def_ty(class_id)) | Some(def_struct(class_id))
Some(DefTy(class_id)) | Some(DefStruct(class_id))
if self.structs.contains(&class_id) => {
let class_def = def_struct(class_id);
let class_def = DefStruct(class_id);
self.record_def(expr.id, class_def);
}
Some(definition @ def_variant(_, class_id))
Some(definition @ DefVariant(_, class_id))
if self.structs.contains(&class_id) => {
self.record_def(expr.id, definition);
}
@ -5136,11 +5140,11 @@ impl Resolver {
visit::walk_expr(visitor, expr, ());
}
expr_loop(_, Some(label)) => {
ExprLoop(_, Some(label)) => {
do self.with_label_rib {
{
let this = &mut *self;
let def_like = DlDef(def_label(expr.id));
let def_like = DlDef(DefLabel(expr.id));
let rib = this.label_ribs[this.label_ribs.len() - 1];
rib.bindings.insert(label, def_like);
}
@ -5149,9 +5153,9 @@ impl Resolver {
}
}
expr_for_loop(*) => fail!("non-desugared expr_for_loop"),
ExprForLoop(*) => fail!("non-desugared expr_for_loop"),
expr_break(Some(label)) | expr_again(Some(label)) => {
ExprBreak(Some(label)) | ExprAgain(Some(label)) => {
match self.search_ribs(self.label_ribs, label, expr.span,
DontAllowCapturingSelf) {
None =>
@ -5160,7 +5164,7 @@ impl Resolver {
`%s`",
self.session.str_of(
label))),
Some(DlDef(def @ def_label(_))) => {
Some(DlDef(def @ DefLabel(_))) => {
self.record_def(expr.id, def)
}
Some(_) => {
@ -5171,7 +5175,7 @@ impl Resolver {
}
}
expr_self => {
ExprSelf => {
match self.resolve_self_value_in_local_ribs(expr.span) {
None => {
self.resolve_error(expr.span,
@ -5189,9 +5193,9 @@ impl Resolver {
}
pub fn record_candidate_traits_for_expr_if_necessary(@mut self,
expr: @expr) {
expr: @Expr) {
match expr.node {
expr_field(_, ident, _) => {
ExprField(_, ident, _) => {
// FIXME(#6890): Even though you can't treat a method like a
// field, we need to add any trait methods we find that match
// the field name so that we can do some nice error reporting
@ -5199,71 +5203,71 @@ impl Resolver {
let traits = self.search_for_traits_containing_method(ident);
self.trait_map.insert(expr.id, @mut traits);
}
expr_method_call(_, _, ident, _, _, _) => {
ExprMethodCall(_, _, ident, _, _, _) => {
debug!("(recording candidate traits for expr) recording \
traits for %d",
expr.id);
let traits = self.search_for_traits_containing_method(ident);
self.trait_map.insert(expr.id, @mut traits);
}
expr_binary(_, add, _, _) | expr_assign_op(_, add, _, _) => {
ExprBinary(_, BiAdd, _, _) | ExprAssignOp(_, BiAdd, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.add_trait());
}
expr_binary(_, subtract, _, _) | expr_assign_op(_, subtract, _, _) => {
ExprBinary(_, BiSub, _, _) | ExprAssignOp(_, BiSub, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.sub_trait());
}
expr_binary(_, mul, _, _) | expr_assign_op(_, mul, _, _) => {
ExprBinary(_, BiMul, _, _) | ExprAssignOp(_, BiMul, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.mul_trait());
}
expr_binary(_, div, _, _) | expr_assign_op(_, div, _, _) => {
ExprBinary(_, BiDiv, _, _) | ExprAssignOp(_, BiDiv, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.div_trait());
}
expr_binary(_, rem, _, _) | expr_assign_op(_, rem, _, _) => {
ExprBinary(_, BiRem, _, _) | ExprAssignOp(_, BiRem, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.rem_trait());
}
expr_binary(_, bitxor, _, _) | expr_assign_op(_, bitxor, _, _) => {
ExprBinary(_, BiBitXor, _, _) | ExprAssignOp(_, BiBitXor, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.bitxor_trait());
}
expr_binary(_, bitand, _, _) | expr_assign_op(_, bitand, _, _) => {
ExprBinary(_, BiBitAnd, _, _) | ExprAssignOp(_, BiBitAnd, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.bitand_trait());
}
expr_binary(_, bitor, _, _) | expr_assign_op(_, bitor, _, _) => {
ExprBinary(_, BiBitOr, _, _) | ExprAssignOp(_, BiBitOr, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.bitor_trait());
}
expr_binary(_, shl, _, _) | expr_assign_op(_, shl, _, _) => {
ExprBinary(_, BiShl, _, _) | ExprAssignOp(_, BiShl, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.shl_trait());
}
expr_binary(_, shr, _, _) | expr_assign_op(_, shr, _, _) => {
ExprBinary(_, BiShr, _, _) | ExprAssignOp(_, BiShr, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.shr_trait());
}
expr_binary(_, lt, _, _) | expr_binary(_, le, _, _) |
expr_binary(_, ge, _, _) | expr_binary(_, gt, _, _) => {
ExprBinary(_, BiLt, _, _) | ExprBinary(_, BiLe, _, _) |
ExprBinary(_, BiGe, _, _) | ExprBinary(_, BiGt, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.ord_trait());
}
expr_binary(_, eq, _, _) | expr_binary(_, ne, _, _) => {
ExprBinary(_, BiEq, _, _) | ExprBinary(_, BiNe, _, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.eq_trait());
}
expr_unary(_, neg, _) => {
ExprUnary(_, UnNeg, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.neg_trait());
}
expr_unary(_, not, _) => {
ExprUnary(_, UnNot, _) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.not_trait());
}
expr_index(*) => {
ExprIndex(*) => {
self.add_fixed_trait_for_expr(expr.id,
self.lang_items.index_trait());
}
@ -5274,7 +5278,7 @@ impl Resolver {
}
pub fn search_for_traits_containing_method(@mut self, name: Ident)
-> ~[def_id] {
-> ~[DefId] {
debug!("(searching for traits containing method) looking for '%s'",
self.session.str_of(name));
@ -5305,7 +5309,7 @@ impl Resolver {
match child_name_bindings.def_for_namespace(TypeNS) {
Some(def) => {
match def {
def_trait(trait_def_id) => {
DefTrait(trait_def_id) => {
if candidate_traits.contains(&trait_def_id) {
self.add_trait_info(
&mut found_traits,
@ -5333,7 +5337,7 @@ impl Resolver {
match target.bindings.def_for_namespace(TypeNS) {
Some(def) => {
match def {
def_trait(trait_def_id) => {
DefTrait(trait_def_id) => {
if candidate_traits.contains(&trait_def_id) {
self.add_trait_info(
&mut found_traits,
@ -5374,8 +5378,8 @@ impl Resolver {
}
pub fn add_trait_info(&self,
found_traits: &mut ~[def_id],
trait_def_id: def_id,
found_traits: &mut ~[DefId],
trait_def_id: DefId,
name: Ident) {
debug!("(adding trait info) found trait %d:%d for method '%s'",
trait_def_id.crate,
@ -5386,7 +5390,7 @@ impl Resolver {
pub fn add_fixed_trait_for_expr(@mut self,
expr_id: NodeId,
trait_id: Option<def_id>) {
trait_id: Option<DefId>) {
match trait_id {
Some(trait_id) => {
self.trait_map.insert(expr_id, @mut ~[trait_id]);
@ -5395,18 +5399,18 @@ impl Resolver {
}
}
pub fn record_def(@mut self, node_id: NodeId, def: def) {
pub fn record_def(@mut self, node_id: NodeId, def: Def) {
debug!("(recording def) recording %? for %?", def, node_id);
self.def_map.insert(node_id, def);
}
pub fn enforce_default_binding_mode(@mut self,
pat: @pat,
pat_binding_mode: binding_mode,
pat: @Pat,
pat_binding_mode: BindingMode,
descr: &str) {
match pat_binding_mode {
bind_infer => {}
bind_by_ref(*) => {
BindInfer => {}
BindByRef(*) => {
self.resolve_error(
pat.span,
fmt!("cannot use `ref` binding mode with %s",

View file

@ -42,7 +42,7 @@ impl Visitor<Context> for StackCheckVisitor {
b:&ast::Block, s:Span, n:ast::NodeId, e:Context) {
stack_check_fn(*self, fk, fd, b, s, n, e);
}
fn visit_expr(&mut self, ex:@ast::expr, e:Context) {
fn visit_expr(&mut self, ex:@ast::Expr, e:Context) {
stack_check_expr(*self, ex, e);
}
}
@ -121,13 +121,13 @@ fn stack_check_fn<'a>(v: StackCheckVisitor,
}
fn stack_check_expr<'a>(v: StackCheckVisitor,
expr: @ast::expr,
expr: @ast::Expr,
cx: Context) {
debug!("stack_check_expr(safe_stack=%b, expr=%s)",
cx.safe_stack, expr.repr(cx.tcx));
if !cx.safe_stack {
match expr.node {
ast::expr_call(callee, _, _) => {
ast::ExprCall(callee, _, _) => {
let callee_ty = ty::expr_ty(cx.tcx, callee);
debug!("callee_ty=%s", callee_ty.repr(cx.tcx));
match ty::get(callee_ty).sty {
@ -146,13 +146,13 @@ fn stack_check_expr<'a>(v: StackCheckVisitor,
visit::walk_expr(&mut v, expr, cx);
}
fn call_to_extern_fn(cx: Context, callee: @ast::expr) {
fn call_to_extern_fn(cx: Context, callee: @ast::Expr) {
// Permit direct calls to extern fns that are annotated with
// #[rust_stack]. This is naturally a horrible pain to achieve.
match callee.node {
ast::expr_path(*) => {
ast::ExprPath(*) => {
match cx.tcx.def_map.find(&callee.id) {
Some(&ast::def_fn(id, _)) if id.crate == ast::LOCAL_CRATE => {
Some(&ast::DefFn(id, _)) if id.crate == ast::LOCAL_CRATE => {
match cx.tcx.items.find(&id.node) {
Some(&ast_map::node_foreign_item(item, _, _, _)) => {
if attr::contains_name(item.attrs, "rust_stack") {

View file

@ -231,8 +231,8 @@ use syntax::codemap::{Span, dummy_sp};
// expression.
enum Lit {
UnitLikeStructLit(ast::NodeId), // the node ID of the pattern
ExprLit(@ast::expr),
ConstLit(ast::def_id), // the def ID of the constant
ExprLit(@ast::Expr),
ConstLit(ast::DefId), // the def ID of the constant
}
#[deriving(Eq)]
@ -246,7 +246,7 @@ pub enum VecLenOpt {
enum Opt {
lit(Lit),
var(ty::Disr, @adt::Repr),
range(@ast::expr, @ast::expr),
range(@ast::Expr, @ast::Expr),
vec_len(/* length */ uint, VecLenOpt, /*range of matches*/(uint, uint))
}
@ -347,7 +347,7 @@ fn variant_opt(bcx: @mut Block, pat_id: ast::NodeId)
-> Opt {
let ccx = bcx.ccx();
match ccx.tcx.def_map.get_copy(&pat_id) {
ast::def_variant(enum_id, var_id) => {
ast::DefVariant(enum_id, var_id) => {
let variants = ty::enum_variants(ccx.tcx, enum_id);
for v in (*variants).iter() {
if var_id == v.id {
@ -357,8 +357,8 @@ fn variant_opt(bcx: @mut Block, pat_id: ast::NodeId)
}
::std::util::unreachable();
}
ast::def_fn(*) |
ast::def_struct(_) => {
ast::DefFn(*) |
ast::DefStruct(_) => {
return lit(UnitLikeStructLit(pat_id));
}
_ => {
@ -395,7 +395,7 @@ type BindingsMap = HashMap<Ident, BindingInfo>;
#[deriving(Clone)]
struct ArmData<'self> {
bodycx: @mut Block,
arm: &'self ast::arm,
arm: &'self ast::Arm,
bindings_map: @BindingsMap
}
@ -407,7 +407,7 @@ struct ArmData<'self> {
*/
#[deriving(Clone)]
struct Match<'self> {
pats: ~[@ast::pat],
pats: ~[@ast::Pat],
data: ArmData<'self>,
bound_ptrs: ~[(Ident, ValueRef)]
}
@ -426,7 +426,7 @@ impl<'self> Repr for Match<'self> {
fn has_nested_bindings(m: &[Match], col: uint) -> bool {
for br in m.iter() {
match br.pats[col].node {
ast::pat_ident(_, _, Some(_)) => return true,
ast::PatIdent(_, _, Some(_)) => return true,
_ => ()
}
}
@ -447,7 +447,7 @@ fn expand_nested_bindings<'r>(bcx: @mut Block,
do m.map |br| {
match br.pats[col].node {
ast::pat_ident(_, ref path, Some(inner)) => {
ast::PatIdent(_, ref path, Some(inner)) => {
let pats = vec::append(
br.pats.slice(0u, col).to_owned(),
vec::append(~[inner],
@ -467,7 +467,7 @@ fn expand_nested_bindings<'r>(bcx: @mut Block,
}
}
fn assert_is_binding_or_wild(bcx: @mut Block, p: @ast::pat) {
fn assert_is_binding_or_wild(bcx: @mut Block, p: @ast::Pat) {
if !pat_is_binding_or_wild(bcx.tcx().def_map, p) {
bcx.sess().span_bug(
p.span,
@ -476,7 +476,7 @@ fn assert_is_binding_or_wild(bcx: @mut Block, p: @ast::pat) {
}
}
type enter_pat<'self> = &'self fn(@ast::pat) -> Option<~[@ast::pat]>;
type enter_pat<'self> = &'self fn(@ast::Pat) -> Option<~[@ast::Pat]>;
fn enter_match<'r>(bcx: @mut Block,
dm: DefMap,
@ -504,7 +504,7 @@ fn enter_match<'r>(bcx: @mut Block,
let this = br.pats[col];
let mut bound_ptrs = br.bound_ptrs.clone();
match this.node {
ast::pat_ident(_, ref path, None) => {
ast::PatIdent(_, ref path, None) => {
if pat_is_binding(dm, this) {
bound_ptrs.push((path_to_ident(path), val));
}
@ -544,8 +544,8 @@ fn enter_default<'r>(bcx: @mut Block,
// Collect all of the matches that can match against anything.
let matches = do enter_match(bcx, dm, m, col, val) |p| {
match p.node {
ast::pat_wild | ast::pat_tup(_) => Some(~[]),
ast::pat_ident(_, _, None) if pat_is_binding(dm, p) => Some(~[]),
ast::PatWild | ast::PatTup(_) => Some(~[]),
ast::PatIdent(_, _, None) if pat_is_binding(dm, p) => Some(~[]),
_ => None
}
};
@ -613,12 +613,12 @@ fn enter_opt<'r>(bcx: @mut Block,
let _indenter = indenter();
let tcx = bcx.tcx();
let dummy = @ast::pat {id: 0, node: ast::pat_wild, span: dummy_sp()};
let dummy = @ast::Pat {id: 0, node: ast::PatWild, span: dummy_sp()};
let mut i = 0;
do enter_match(bcx, tcx.def_map, m, col, val) |p| {
let answer = match p.node {
ast::pat_enum(*) |
ast::pat_ident(_, _, None) if pat_is_const(tcx.def_map, p) => {
ast::PatEnum(*) |
ast::PatIdent(_, _, None) if pat_is_const(tcx.def_map, p) => {
let const_def = tcx.def_map.get_copy(&p.id);
let const_def_id = ast_util::def_id_of_def(const_def);
if opt_eq(tcx, &lit(ConstLit(const_def_id)), opt) {
@ -627,7 +627,7 @@ fn enter_opt<'r>(bcx: @mut Block,
None
}
}
ast::pat_enum(_, ref subpats) => {
ast::PatEnum(_, ref subpats) => {
if opt_eq(tcx, &variant_opt(bcx, p.id), opt) {
// XXX: Must we clone?
match *subpats {
@ -638,7 +638,7 @@ fn enter_opt<'r>(bcx: @mut Block,
None
}
}
ast::pat_ident(_, _, None)
ast::PatIdent(_, _, None)
if pat_is_variant_or_struct(tcx.def_map, p) => {
if opt_eq(tcx, &variant_opt(bcx, p.id), opt) {
Some(~[])
@ -646,18 +646,18 @@ fn enter_opt<'r>(bcx: @mut Block,
None
}
}
ast::pat_lit(l) => {
ast::PatLit(l) => {
if opt_eq(tcx, &lit(ExprLit(l)), opt) {Some(~[])} else {None}
}
ast::pat_range(l1, l2) => {
ast::PatRange(l1, l2) => {
if opt_eq(tcx, &range(l1, l2), opt) {Some(~[])} else {None}
}
ast::pat_struct(_, ref field_pats, _) => {
ast::PatStruct(_, ref field_pats, _) => {
if opt_eq(tcx, &variant_opt(bcx, p.id), opt) {
// Look up the struct variant ID.
let struct_id;
match tcx.def_map.get_copy(&p.id) {
ast::def_variant(_, found_struct_id) => {
ast::DefVariant(_, found_struct_id) => {
struct_id = found_struct_id;
}
_ => {
@ -681,7 +681,7 @@ fn enter_opt<'r>(bcx: @mut Block,
None
}
}
ast::pat_vec(ref before, slice, ref after) => {
ast::PatVec(ref before, slice, ref after) => {
let (lo, hi) = match *opt {
vec_len(_, _, (lo, hi)) => (lo, hi),
_ => tcx.sess.span_bug(p.span,
@ -746,10 +746,10 @@ fn enter_rec_or_struct<'r>(bcx: @mut Block,
bcx.val_to_str(val));
let _indenter = indenter();
let dummy = @ast::pat {id: 0, node: ast::pat_wild, span: dummy_sp()};
let dummy = @ast::Pat {id: 0, node: ast::PatWild, span: dummy_sp()};
do enter_match(bcx, dm, m, col, val) |p| {
match p.node {
ast::pat_struct(_, ref fpats, _) => {
ast::PatStruct(_, ref fpats, _) => {
let mut pats = ~[];
for fname in fields.iter() {
match fpats.iter().find(|p| p.ident == *fname) {
@ -781,10 +781,10 @@ fn enter_tup<'r>(bcx: @mut Block,
bcx.val_to_str(val));
let _indenter = indenter();
let dummy = @ast::pat {id: 0, node: ast::pat_wild, span: dummy_sp()};
let dummy = @ast::Pat {id: 0, node: ast::PatWild, span: dummy_sp()};
do enter_match(bcx, dm, m, col, val) |p| {
match p.node {
ast::pat_tup(ref elts) => Some((*elts).clone()),
ast::PatTup(ref elts) => Some((*elts).clone()),
_ => {
assert_is_binding_or_wild(bcx, p);
Some(vec::from_elem(n_elts, dummy))
@ -807,10 +807,10 @@ fn enter_tuple_struct<'r>(bcx: @mut Block,
bcx.val_to_str(val));
let _indenter = indenter();
let dummy = @ast::pat {id: 0, node: ast::pat_wild, span: dummy_sp()};
let dummy = @ast::Pat {id: 0, node: ast::PatWild, span: dummy_sp()};
do enter_match(bcx, dm, m, col, val) |p| {
match p.node {
ast::pat_enum(_, Some(ref elts)) => Some((*elts).clone()),
ast::PatEnum(_, Some(ref elts)) => Some((*elts).clone()),
_ => {
assert_is_binding_or_wild(bcx, p);
Some(vec::from_elem(n_elts, dummy))
@ -832,10 +832,10 @@ fn enter_box<'r>(bcx: @mut Block,
bcx.val_to_str(val));
let _indenter = indenter();
let dummy = @ast::pat {id: 0, node: ast::pat_wild, span: dummy_sp()};
let dummy = @ast::Pat {id: 0, node: ast::PatWild, span: dummy_sp()};
do enter_match(bcx, dm, m, col, val) |p| {
match p.node {
ast::pat_box(sub) => {
ast::PatBox(sub) => {
Some(~[sub])
}
_ => {
@ -859,10 +859,10 @@ fn enter_uniq<'r>(bcx: @mut Block,
bcx.val_to_str(val));
let _indenter = indenter();
let dummy = @ast::pat {id: 0, node: ast::pat_wild, span: dummy_sp()};
let dummy = @ast::Pat {id: 0, node: ast::PatWild, span: dummy_sp()};
do enter_match(bcx, dm, m, col, val) |p| {
match p.node {
ast::pat_uniq(sub) => {
ast::PatUniq(sub) => {
Some(~[sub])
}
_ => {
@ -886,10 +886,10 @@ fn enter_region<'r>(bcx: @mut Block,
bcx.val_to_str(val));
let _indenter = indenter();
let dummy = @ast::pat { id: 0, node: ast::pat_wild, span: dummy_sp() };
let dummy = @ast::Pat { id: 0, node: ast::PatWild, span: dummy_sp() };
do enter_match(bcx, dm, m, col, val) |p| {
match p.node {
ast::pat_region(sub) => {
ast::PatRegion(sub) => {
Some(~[sub])
}
_ => {
@ -930,48 +930,48 @@ fn get_options(bcx: @mut Block, m: &[Match], col: uint) -> ~[Opt] {
for (i, br) in m.iter().enumerate() {
let cur = br.pats[col];
match cur.node {
ast::pat_lit(l) => {
ast::PatLit(l) => {
add_to_set(ccx.tcx, &mut found, lit(ExprLit(l)));
}
ast::pat_ident(*) => {
ast::PatIdent(*) => {
// This is one of: an enum variant, a unit-like struct, or a
// variable binding.
match ccx.tcx.def_map.find(&cur.id) {
Some(&ast::def_variant(*)) => {
Some(&ast::DefVariant(*)) => {
add_to_set(ccx.tcx, &mut found,
variant_opt(bcx, cur.id));
}
Some(&ast::def_struct(*)) => {
Some(&ast::DefStruct(*)) => {
add_to_set(ccx.tcx, &mut found,
lit(UnitLikeStructLit(cur.id)));
}
Some(&ast::def_static(const_did, false)) => {
Some(&ast::DefStatic(const_did, false)) => {
add_to_set(ccx.tcx, &mut found,
lit(ConstLit(const_did)));
}
_ => {}
}
}
ast::pat_enum(*) | ast::pat_struct(*) => {
ast::PatEnum(*) | ast::PatStruct(*) => {
// This could be one of: a tuple-like enum variant, a
// struct-like enum variant, or a struct.
match ccx.tcx.def_map.find(&cur.id) {
Some(&ast::def_fn(*)) |
Some(&ast::def_variant(*)) => {
Some(&ast::DefFn(*)) |
Some(&ast::DefVariant(*)) => {
add_to_set(ccx.tcx, &mut found,
variant_opt(bcx, cur.id));
}
Some(&ast::def_static(const_did, false)) => {
Some(&ast::DefStatic(const_did, false)) => {
add_to_set(ccx.tcx, &mut found,
lit(ConstLit(const_did)));
}
_ => {}
}
}
ast::pat_range(l1, l2) => {
ast::PatRange(l1, l2) => {
add_to_set(ccx.tcx, &mut found, range(l1, l2));
}
ast::pat_vec(ref before, slice, ref after) => {
ast::PatVec(ref before, slice, ref after) => {
let (len, vec_opt) = match slice {
None => (before.len(), vec_len_eq),
Some(_) => (before.len() + after.len(),
@ -1050,7 +1050,7 @@ fn extract_vec_elems(bcx: @mut Block,
);
let slice_len = Sub(bcx, len, slice_len_offset);
let slice_ty = ty::mk_evec(bcx.tcx(),
ty::mt {ty: vt.unit_ty, mutbl: ast::m_imm},
ty::mt {ty: vt.unit_ty, mutbl: ast::MutImmutable},
ty::vstore_slice(ty::re_static)
);
let scratch = scratch_datum(bcx, slice_ty, "", false);
@ -1081,7 +1081,7 @@ fn collect_record_or_struct_fields(bcx: @mut Block,
let mut found = false;
for br in m.iter() {
match br.pats[col].node {
ast::pat_struct(_, ref fs, _) => {
ast::PatStruct(_, ref fs, _) => {
match ty::get(node_id_type(bcx, br.pats[col].id)).sty {
ty::ty_struct(*) => {
extend(&mut fields, *fs);
@ -1099,7 +1099,7 @@ fn collect_record_or_struct_fields(bcx: @mut Block,
return None;
}
fn extend(idents: &mut ~[ast::Ident], field_pats: &[ast::field_pat]) {
fn extend(idents: &mut ~[ast::Ident], field_pats: &[ast::FieldPat]) {
for field_pat in field_pats.iter() {
let field_ident = field_pat.ident;
if !idents.iter().any(|x| *x == field_ident) {
@ -1152,29 +1152,29 @@ macro_rules! any_pat (
)
fn any_box_pat(m: &[Match], col: uint) -> bool {
any_pat!(m, ast::pat_box(_))
any_pat!(m, ast::PatBox(_))
}
fn any_uniq_pat(m: &[Match], col: uint) -> bool {
any_pat!(m, ast::pat_uniq(_))
any_pat!(m, ast::PatUniq(_))
}
fn any_region_pat(m: &[Match], col: uint) -> bool {
any_pat!(m, ast::pat_region(_))
any_pat!(m, ast::PatRegion(_))
}
fn any_tup_pat(m: &[Match], col: uint) -> bool {
any_pat!(m, ast::pat_tup(_))
any_pat!(m, ast::PatTup(_))
}
fn any_tuple_struct_pat(bcx: @mut Block, m: &[Match], col: uint) -> bool {
do m.iter().any |br| {
let pat = br.pats[col];
match pat.node {
ast::pat_enum(_, Some(_)) => {
ast::PatEnum(_, Some(_)) => {
match bcx.tcx().def_map.find(&pat.id) {
Some(&ast::def_fn(*)) |
Some(&ast::def_struct(*)) => true,
Some(&ast::DefFn(*)) |
Some(&ast::DefStruct(*)) => true,
_ => false
}
}
@ -1186,10 +1186,10 @@ fn any_tuple_struct_pat(bcx: @mut Block, m: &[Match], col: uint) -> bool {
type mk_fail = @fn() -> BasicBlockRef;
fn pick_col(m: &[Match]) -> uint {
fn score(p: &ast::pat) -> uint {
fn score(p: &ast::Pat) -> uint {
match p.node {
ast::pat_lit(_) | ast::pat_enum(_, _) | ast::pat_range(_, _) => 1u,
ast::pat_ident(_, _, Some(p)) => score(p),
ast::PatLit(_) | ast::PatEnum(_, _) | ast::PatRange(_, _) => 1u,
ast::PatIdent(_, _, Some(p)) => score(p),
_ => 0u
}
}
@ -1227,7 +1227,7 @@ fn compare_values(cx: @mut Block,
-> Result {
let _icx = push_ctxt("compare_values");
if ty::type_is_scalar(rhs_t) {
let rs = compare_scalar_types(cx, lhs, rhs, rhs_t, ast::eq);
let rs = compare_scalar_types(cx, lhs, rhs, rhs_t, ast::BiEq);
return rslt(rs.bcx, rs.val);
}
@ -1341,7 +1341,7 @@ fn insert_lllocals(bcx: @mut Block,
}
fn compile_guard(bcx: @mut Block,
guard_expr: @ast::expr,
guard_expr: @ast::Expr,
data: &ArmData,
m: &[Match],
vals: &[ValueRef],
@ -1659,7 +1659,7 @@ fn compile_submatch_continue(mut bcx: @mut Block,
Result {bcx, val}) => {
compare_scalar_types(
bcx, test_val, val,
t, ast::ge)
t, ast::BiGe)
}
range_result(
Result {val: vbegin, _},
@ -1667,11 +1667,11 @@ fn compile_submatch_continue(mut bcx: @mut Block,
let Result {bcx, val: llge} =
compare_scalar_types(
bcx, test_val,
vbegin, t, ast::ge);
vbegin, t, ast::BiGe);
let Result {bcx, val: llle} =
compare_scalar_types(
bcx, test_val, vend,
t, ast::le);
t, ast::BiLe);
rslt(bcx, And(bcx, llge, llle))
}
}
@ -1689,14 +1689,14 @@ fn compile_submatch_continue(mut bcx: @mut Block,
Result {bcx, val}) => {
let value = compare_scalar_values(
bcx, test_val, val,
signed_int, ast::eq);
signed_int, ast::BiEq);
rslt(bcx, value)
}
lower_bound(
Result {bcx, val: val}) => {
let value = compare_scalar_values(
bcx, test_val, val,
signed_int, ast::ge);
signed_int, ast::BiGe);
rslt(bcx, value)
}
range_result(
@ -1705,11 +1705,11 @@ fn compile_submatch_continue(mut bcx: @mut Block,
let llge =
compare_scalar_values(
bcx, test_val,
vbegin, signed_int, ast::ge);
vbegin, signed_int, ast::BiGe);
let llle =
compare_scalar_values(
bcx, test_val, vend,
signed_int, ast::le);
signed_int, ast::BiLe);
rslt(bcx, And(bcx, llge, llle))
}
}
@ -1768,9 +1768,9 @@ fn compile_submatch_continue(mut bcx: @mut Block,
}
pub fn trans_match(bcx: @mut Block,
match_expr: &ast::expr,
discr_expr: @ast::expr,
arms: &[ast::arm],
match_expr: &ast::Expr,
discr_expr: @ast::Expr,
arms: &[ast::Arm],
dest: Dest) -> @mut Block {
let _icx = push_ctxt("match::trans_match");
do with_scope(bcx, match_expr.info(), "match") |bcx| {
@ -1778,7 +1778,7 @@ pub fn trans_match(bcx: @mut Block,
}
}
fn create_bindings_map(bcx: @mut Block, pat: @ast::pat) -> BindingsMap {
fn create_bindings_map(bcx: @mut Block, pat: @ast::Pat) -> BindingsMap {
// Create the bindings map, which is a mapping from each binding name
// to an alloca() that will be the value for that local variable.
// Note that we use the names because each binding will have many ids
@ -1794,7 +1794,7 @@ fn create_bindings_map(bcx: @mut Block, pat: @ast::pat) -> BindingsMap {
let llmatch;
let trmode;
match bm {
ast::bind_infer => {
ast::BindInfer => {
// in this case, the final type of the variable will be T,
// but during matching we need to store a *T as explained
// above
@ -1802,7 +1802,7 @@ fn create_bindings_map(bcx: @mut Block, pat: @ast::pat) -> BindingsMap {
trmode = TrByValue(alloca(bcx, llvariable_ty,
bcx.ident(ident)));
}
ast::bind_by_ref(_) => {
ast::BindByRef(_) => {
llmatch = alloca(bcx, llvariable_ty, bcx.ident(ident));
trmode = TrByRef;
}
@ -1819,8 +1819,8 @@ fn create_bindings_map(bcx: @mut Block, pat: @ast::pat) -> BindingsMap {
}
fn trans_match_inner(scope_cx: @mut Block,
discr_expr: @ast::expr,
arms: &[ast::arm],
discr_expr: @ast::Expr,
arms: &[ast::Arm],
dest: Dest) -> @mut Block {
let _icx = push_ctxt("match::trans_match_inner");
let mut bcx = scope_cx;
@ -1909,8 +1909,8 @@ enum IrrefutablePatternBindingMode {
}
pub fn store_local(bcx: @mut Block,
pat: @ast::pat,
opt_init_expr: Option<@ast::expr>)
pat: @ast::Pat,
opt_init_expr: Option<@ast::Expr>)
-> @mut Block {
/*!
* Generates code for a local variable declaration like
@ -1962,7 +1962,7 @@ pub fn store_local(bcx: @mut Block,
}
};
fn create_dummy_locals(mut bcx: @mut Block, pat: @ast::pat) -> @mut Block {
fn create_dummy_locals(mut bcx: @mut Block, pat: @ast::Pat) -> @mut Block {
// create dummy memory for the variables if we have no
// value to store into them immediately
let tcx = bcx.tcx();
@ -1976,7 +1976,7 @@ pub fn store_local(bcx: @mut Block,
}
pub fn store_arg(mut bcx: @mut Block,
pat: @ast::pat,
pat: @ast::Pat,
llval: ValueRef)
-> @mut Block {
/*!
@ -2037,7 +2037,7 @@ fn mk_binding_alloca(mut bcx: @mut Block,
}
fn bind_irrefutable_pat(bcx: @mut Block,
pat: @ast::pat,
pat: @ast::Pat,
val: ValueRef,
binding_mode: IrrefutablePatternBindingMode)
-> @mut Block {
@ -2077,7 +2077,7 @@ fn bind_irrefutable_pat(bcx: @mut Block,
let tcx = bcx.tcx();
let ccx = bcx.ccx();
match pat.node {
ast::pat_ident(pat_binding_mode, ref path, inner) => {
ast::PatIdent(pat_binding_mode, ref path, inner) => {
if pat_is_binding(tcx.def_map, pat) {
// Allocate the stack slot where the value of this
// binding will live and place it into the appropriate
@ -2086,7 +2086,7 @@ fn bind_irrefutable_pat(bcx: @mut Block,
bcx, pat.id, path, binding_mode,
|bcx, variable_ty, llvariable_val| {
match pat_binding_mode {
ast::bind_infer => {
ast::BindInfer => {
// By value binding: move the value that `val`
// points at into the binding's stack slot.
let datum = Datum {val: val,
@ -2095,7 +2095,7 @@ fn bind_irrefutable_pat(bcx: @mut Block,
datum.store_to(bcx, INIT, llvariable_val)
}
ast::bind_by_ref(_) => {
ast::BindByRef(_) => {
// By ref binding: the value of the variable
// is the pointer `val` itself.
Store(bcx, val, llvariable_val);
@ -2109,9 +2109,9 @@ fn bind_irrefutable_pat(bcx: @mut Block,
bcx = bind_irrefutable_pat(bcx, inner_pat, val, binding_mode);
}
}
ast::pat_enum(_, ref sub_pats) => {
ast::PatEnum(_, ref sub_pats) => {
match bcx.tcx().def_map.find(&pat.id) {
Some(&ast::def_variant(enum_id, var_id)) => {
Some(&ast::DefVariant(enum_id, var_id)) => {
let repr = adt::represent_node(bcx, pat.id);
let vinfo = ty::enum_variant_with_id(ccx.tcx,
enum_id,
@ -2127,8 +2127,8 @@ fn bind_irrefutable_pat(bcx: @mut Block,
}
}
}
Some(&ast::def_fn(*)) |
Some(&ast::def_struct(*)) => {
Some(&ast::DefFn(*)) |
Some(&ast::DefStruct(*)) => {
match *sub_pats {
None => {
// This is a unit-like struct. Nothing to do here.
@ -2145,14 +2145,14 @@ fn bind_irrefutable_pat(bcx: @mut Block,
}
}
}
Some(&ast::def_static(_, false)) => {
Some(&ast::DefStatic(_, false)) => {
}
_ => {
// Nothing to do here.
}
}
}
ast::pat_struct(_, ref fields, _) => {
ast::PatStruct(_, ref fields, _) => {
let tcx = bcx.tcx();
let pat_ty = node_id_type(bcx, pat.id);
let pat_repr = adt::represent_type(bcx.ccx(), pat_ty);
@ -2165,14 +2165,14 @@ fn bind_irrefutable_pat(bcx: @mut Block,
}
}
}
ast::pat_tup(ref elems) => {
ast::PatTup(ref elems) => {
let repr = adt::represent_node(bcx, pat.id);
for (i, elem) in elems.iter().enumerate() {
let fldptr = adt::trans_field_ptr(bcx, repr, val, 0, i);
bcx = bind_irrefutable_pat(bcx, *elem, fldptr, binding_mode);
}
}
ast::pat_box(inner) | ast::pat_uniq(inner) => {
ast::PatBox(inner) | ast::PatUniq(inner) => {
let pat_ty = node_id_type(bcx, pat.id);
let llbox = Load(bcx, val);
let unboxed = match ty::get(pat_ty).sty {
@ -2181,23 +2181,23 @@ fn bind_irrefutable_pat(bcx: @mut Block,
};
bcx = bind_irrefutable_pat(bcx, inner, unboxed, binding_mode);
}
ast::pat_region(inner) => {
ast::PatRegion(inner) => {
let loaded_val = Load(bcx, val);
bcx = bind_irrefutable_pat(bcx, inner, loaded_val, binding_mode);
}
ast::pat_vec(*) => {
ast::PatVec(*) => {
bcx.tcx().sess.span_bug(
pat.span,
fmt!("vector patterns are never irrefutable!"));
}
ast::pat_wild | ast::pat_lit(_) | ast::pat_range(_, _) => ()
ast::PatWild | ast::PatLit(_) | ast::PatRange(_, _) => ()
}
return bcx;
}
fn simple_identifier<'a>(pat: &'a ast::pat) -> Option<&'a ast::Path> {
fn simple_identifier<'a>(pat: &'a ast::Pat) -> Option<&'a ast::Path> {
match pat.node {
ast::pat_ident(ast::bind_infer, ref path, None) => {
ast::PatIdent(ast::BindInfer, ref path, None) => {
Some(path)
}
_ => {

View file

@ -46,7 +46,7 @@ pub fn trans_inline_asm(bcx: @mut Block, ia: &ast::inline_asm) -> @mut Block {
}));
let e = match out.node {
ast::expr_addr_of(_, e) => e,
ast::ExprAddrOf(_, e) => e,
_ => fail!("Expression must be addr of")
};

View file

@ -292,7 +292,7 @@ pub fn malloc_raw_dyn(bcx: @mut Block,
let _icx = push_ctxt("malloc_raw");
let ccx = bcx.ccx();
fn require_alloc_fn(bcx: @mut Block, t: ty::t, it: LangItem) -> ast::def_id {
fn require_alloc_fn(bcx: @mut Block, t: ty::t, it: LangItem) -> ast::DefId {
let li = &bcx.tcx().lang_items;
match li.require(it) {
Ok(id) => id,
@ -498,8 +498,8 @@ pub fn note_unique_llvm_symbol(ccx: &mut CrateContext, sym: @str) {
pub fn get_res_dtor(ccx: @mut CrateContext,
did: ast::def_id,
parent_id: ast::def_id,
did: ast::DefId,
parent_id: ast::DefId,
substs: &[ty::t])
-> ValueRef {
let _icx = push_ctxt("trans_res_dtor");
@ -559,7 +559,7 @@ pub fn compare_scalar_types(cx: @mut Block,
lhs: ValueRef,
rhs: ValueRef,
t: ty::t,
op: ast::binop)
op: ast::BinOp)
-> Result {
let f = |a| compare_scalar_values(cx, lhs, rhs, a, op);
@ -590,7 +590,7 @@ pub fn compare_scalar_values(cx: @mut Block,
lhs: ValueRef,
rhs: ValueRef,
nt: scalar_type,
op: ast::binop)
op: ast::BinOp)
-> ValueRef {
let _icx = push_ctxt("compare_scalar_values");
fn die(cx: @mut Block) -> ! {
@ -602,44 +602,44 @@ pub fn compare_scalar_values(cx: @mut Block,
// We don't need to do actual comparisons for nil.
// () == () holds but () < () does not.
match op {
ast::eq | ast::le | ast::ge => return C_i1(true),
ast::ne | ast::lt | ast::gt => return C_i1(false),
ast::BiEq | ast::BiLe | ast::BiGe => return C_i1(true),
ast::BiNe | ast::BiLt | ast::BiGt => return C_i1(false),
// refinements would be nice
_ => die(cx)
}
}
floating_point => {
let cmp = match op {
ast::eq => lib::llvm::RealOEQ,
ast::ne => lib::llvm::RealUNE,
ast::lt => lib::llvm::RealOLT,
ast::le => lib::llvm::RealOLE,
ast::gt => lib::llvm::RealOGT,
ast::ge => lib::llvm::RealOGE,
ast::BiEq => lib::llvm::RealOEQ,
ast::BiNe => lib::llvm::RealUNE,
ast::BiLt => lib::llvm::RealOLT,
ast::BiLe => lib::llvm::RealOLE,
ast::BiGt => lib::llvm::RealOGT,
ast::BiGe => lib::llvm::RealOGE,
_ => die(cx)
};
return FCmp(cx, cmp, lhs, rhs);
}
signed_int => {
let cmp = match op {
ast::eq => lib::llvm::IntEQ,
ast::ne => lib::llvm::IntNE,
ast::lt => lib::llvm::IntSLT,
ast::le => lib::llvm::IntSLE,
ast::gt => lib::llvm::IntSGT,
ast::ge => lib::llvm::IntSGE,
ast::BiEq => lib::llvm::IntEQ,
ast::BiNe => lib::llvm::IntNE,
ast::BiLt => lib::llvm::IntSLT,
ast::BiLe => lib::llvm::IntSLE,
ast::BiGt => lib::llvm::IntSGT,
ast::BiGe => lib::llvm::IntSGE,
_ => die(cx)
};
return ICmp(cx, cmp, lhs, rhs);
}
unsigned_int => {
let cmp = match op {
ast::eq => lib::llvm::IntEQ,
ast::ne => lib::llvm::IntNE,
ast::lt => lib::llvm::IntULT,
ast::le => lib::llvm::IntULE,
ast::gt => lib::llvm::IntUGT,
ast::ge => lib::llvm::IntUGE,
ast::BiEq => lib::llvm::IntEQ,
ast::BiNe => lib::llvm::IntNE,
ast::BiLt => lib::llvm::IntULT,
ast::BiLe => lib::llvm::IntULE,
ast::BiGt => lib::llvm::IntUGT,
ast::BiGe => lib::llvm::IntUGE,
_ => die(cx)
};
return ICmp(cx, cmp, lhs, rhs);
@ -750,21 +750,21 @@ pub fn iter_structural_ty(cx: @mut Block, av: ValueRef, t: ty::t,
return cx;
}
pub fn cast_shift_expr_rhs(cx: @mut Block, op: ast::binop,
pub fn cast_shift_expr_rhs(cx: @mut Block, op: ast::BinOp,
lhs: ValueRef, rhs: ValueRef) -> ValueRef {
cast_shift_rhs(op, lhs, rhs,
|a,b| Trunc(cx, a, b),
|a,b| ZExt(cx, a, b))
}
pub fn cast_shift_const_rhs(op: ast::binop,
pub fn cast_shift_const_rhs(op: ast::BinOp,
lhs: ValueRef, rhs: ValueRef) -> ValueRef {
cast_shift_rhs(op, lhs, rhs,
|a, b| unsafe { llvm::LLVMConstTrunc(a, b.to_ref()) },
|a, b| unsafe { llvm::LLVMConstZExt(a, b.to_ref()) })
}
pub fn cast_shift_rhs(op: ast::binop,
pub fn cast_shift_rhs(op: ast::BinOp,
lhs: ValueRef, rhs: ValueRef,
trunc: &fn(ValueRef, Type) -> ValueRef,
zext: &fn(ValueRef, Type) -> ValueRef)
@ -791,9 +791,9 @@ pub fn cast_shift_rhs(op: ast::binop,
}
}
pub fn fail_if_zero(cx: @mut Block, span: Span, divrem: ast::binop,
pub fn fail_if_zero(cx: @mut Block, span: Span, divrem: ast::BinOp,
rhs: ValueRef, rhs_t: ty::t) -> @mut Block {
let text = if divrem == ast::div {
let text = if divrem == ast::BiDiv {
@"attempted to divide by zero"
} else {
@"attempted remainder with a divisor of zero"
@ -821,7 +821,7 @@ pub fn null_env_ptr(ccx: &CrateContext) -> ValueRef {
C_null(Type::opaque_box(ccx).ptr_to())
}
pub fn trans_external_path(ccx: &mut CrateContext, did: ast::def_id, t: ty::t)
pub fn trans_external_path(ccx: &mut CrateContext, did: ast::DefId, t: ty::t)
-> ValueRef {
let name = csearch::get_symbol(ccx.sess.cstore, did);
match ty::get(t).sty {
@ -1088,7 +1088,7 @@ pub fn trans_trace(bcx: @mut Block, sp_opt: Option<Span>, trace_str: @str) {
pub fn ignore_lhs(_bcx: @mut Block, local: &ast::Local) -> bool {
match local.pat.node {
ast::pat_wild => true, _ => false
ast::PatWild => true, _ => false
}
}
@ -1113,7 +1113,7 @@ pub fn init_local(bcx: @mut Block, local: &ast::Local) -> @mut Block {
_match::store_local(bcx, local.pat, local.init)
}
pub fn trans_stmt(cx: @mut Block, s: &ast::stmt) -> @mut Block {
pub fn trans_stmt(cx: @mut Block, s: &ast::Stmt) -> @mut Block {
let _icx = push_ctxt("trans_stmt");
debug!("trans_stmt(%s)", stmt_to_str(s, cx.tcx().sess.intr()));
@ -1124,22 +1124,22 @@ pub fn trans_stmt(cx: @mut Block, s: &ast::stmt) -> @mut Block {
let mut bcx = cx;
match s.node {
ast::stmt_expr(e, _) | ast::stmt_semi(e, _) => {
ast::StmtExpr(e, _) | ast::StmtSemi(e, _) => {
bcx = expr::trans_into(cx, e, expr::Ignore);
}
ast::stmt_decl(d, _) => {
ast::StmtDecl(d, _) => {
match d.node {
ast::decl_local(ref local) => {
ast::DeclLocal(ref local) => {
bcx = init_local(bcx, *local);
if cx.sess().opts.extra_debuginfo
&& fcx_has_nonzero_span(bcx.fcx) {
debuginfo::create_local_var_metadata(bcx, *local);
}
}
ast::decl_item(i) => trans_item(cx.fcx.ccx, i)
ast::DeclItem(i) => trans_item(cx.fcx.ccx, i)
}
}
ast::stmt_mac(*) => cx.tcx().sess.bug("unexpanded macro")
ast::StmtMac(*) => cx.tcx().sess.bug("unexpanded macro")
}
return bcx;
@ -1444,9 +1444,9 @@ pub fn with_scope_datumblock(bcx: @mut Block, opt_node_info: Option<NodeInfo>,
pub fn block_locals(b: &ast::Block, it: &fn(@ast::Local)) {
for s in b.stmts.iter() {
match s.node {
ast::stmt_decl(d, _) => {
ast::StmtDecl(d, _) => {
match d.node {
ast::decl_local(ref local) => it(*local),
ast::DeclLocal(ref local) => it(*local),
_ => {} /* fall through */
}
}
@ -2231,7 +2231,7 @@ pub fn trans_item(ccx: @mut CrateContext, item: &ast::item) {
// Do static_assert checking. It can't really be done much earlier
// because we need to get the value of the bool out of LLVM
if attr::contains_name(item.attrs, "static_assert") {
if m == ast::m_mutbl {
if m == ast::MutMutable {
ccx.sess.span_fatal(expr.span,
"cannot have static_assert on a mutable \
static");
@ -2488,7 +2488,7 @@ pub fn get_item_val(ccx: @mut CrateContext, id: ast::NodeId) -> ValueRef {
// LLVM type is not fully determined by the Rust type.
let v = consts::const_expr(ccx, expr);
ccx.const_values.insert(id, v);
exprt = (m == ast::m_mutbl || i.vis == ast::public);
exprt = (m == ast::MutMutable || i.vis == ast::public);
unsafe {
let llty = llvm::LLVMTypeOf(v);

View file

@ -77,13 +77,13 @@ pub struct Callee {
data: CalleeData
}
pub fn trans(bcx: @mut Block, expr: @ast::expr) -> Callee {
pub fn trans(bcx: @mut Block, expr: @ast::Expr) -> Callee {
let _icx = push_ctxt("trans_callee");
debug!("callee::trans(expr=%s)", expr.repr(bcx.tcx()));
// pick out special kinds of expressions that can be called:
match expr.node {
ast::expr_path(_) => {
ast::ExprPath(_) => {
return trans_def(bcx, bcx.def(expr.id), expr);
}
_ => {}
@ -92,7 +92,7 @@ pub fn trans(bcx: @mut Block, expr: @ast::expr) -> Callee {
// any other expressions are closures:
return datum_callee(bcx, expr);
fn datum_callee(bcx: @mut Block, expr: @ast::expr) -> Callee {
fn datum_callee(bcx: @mut Block, expr: @ast::Expr) -> Callee {
let DatumBlock {bcx, datum} = expr::trans_to_datum(bcx, expr);
match ty::get(datum.ty).sty {
ty::ty_bare_fn(*) => {
@ -115,42 +115,42 @@ pub fn trans(bcx: @mut Block, expr: @ast::expr) -> Callee {
return Callee {bcx: bcx, data: Fn(fd)};
}
fn trans_def(bcx: @mut Block, def: ast::def, ref_expr: @ast::expr) -> Callee {
fn trans_def(bcx: @mut Block, def: ast::Def, ref_expr: @ast::Expr) -> Callee {
match def {
ast::def_fn(did, _) |
ast::def_static_method(did, ast::FromImpl(_), _) => {
ast::DefFn(did, _) |
ast::DefStaticMethod(did, ast::FromImpl(_), _) => {
fn_callee(bcx, trans_fn_ref(bcx, did, ref_expr.id))
}
ast::def_static_method(impl_did,
ast::DefStaticMethod(impl_did,
ast::FromTrait(trait_did),
_) => {
fn_callee(bcx, meth::trans_static_method_callee(bcx, impl_did,
trait_did,
ref_expr.id))
}
ast::def_variant(tid, vid) => {
ast::DefVariant(tid, vid) => {
// nullary variants are not callable
assert!(ty::enum_variant_with_id(bcx.tcx(),
tid,
vid).args.len() > 0u);
fn_callee(bcx, trans_fn_ref(bcx, vid, ref_expr.id))
}
ast::def_struct(def_id) => {
ast::DefStruct(def_id) => {
fn_callee(bcx, trans_fn_ref(bcx, def_id, ref_expr.id))
}
ast::def_static(*) |
ast::def_arg(*) |
ast::def_local(*) |
ast::def_binding(*) |
ast::def_upvar(*) |
ast::def_self(*) => {
ast::DefStatic(*) |
ast::DefArg(*) |
ast::DefLocal(*) |
ast::DefBinding(*) |
ast::DefUpvar(*) |
ast::DefSelf(*) => {
datum_callee(bcx, ref_expr)
}
ast::def_mod(*) | ast::def_foreign_mod(*) | ast::def_trait(*) |
ast::def_ty(*) | ast::def_prim_ty(*) |
ast::def_use(*) | ast::def_typaram_binder(*) |
ast::def_region(*) | ast::def_label(*) | ast::def_ty_param(*) |
ast::def_self_ty(*) | ast::def_method(*) => {
ast::DefMod(*) | ast::DefForeignMod(*) | ast::DefTrait(*) |
ast::DefTy(*) | ast::DefPrimTy(*) |
ast::DefUse(*) | ast::DefTyParamBinder(*) |
ast::DefRegion(*) | ast::DefLabel(*) | ast::DefTyParam(*) |
ast::DefSelfTy(*) | ast::DefMethod(*) => {
bcx.tcx().sess.span_bug(
ref_expr.span,
fmt!("Cannot translate def %? \
@ -161,14 +161,14 @@ pub fn trans(bcx: @mut Block, expr: @ast::expr) -> Callee {
}
pub fn trans_fn_ref_to_callee(bcx: @mut Block,
def_id: ast::def_id,
def_id: ast::DefId,
ref_id: ast::NodeId) -> Callee {
Callee {bcx: bcx,
data: Fn(trans_fn_ref(bcx, def_id, ref_id))}
}
pub fn trans_fn_ref(bcx: @mut Block,
def_id: ast::def_id,
def_id: ast::DefId,
ref_id: ast::NodeId) -> FnData {
/*!
*
@ -188,7 +188,7 @@ pub fn trans_fn_ref(bcx: @mut Block,
pub fn trans_fn_ref_with_vtables_to_callee(
bcx: @mut Block,
def_id: ast::def_id,
def_id: ast::DefId,
ref_id: ast::NodeId,
type_params: &[ty::t],
vtables: Option<typeck::vtable_res>)
@ -199,7 +199,7 @@ pub fn trans_fn_ref_with_vtables_to_callee(
}
fn resolve_default_method_vtables(bcx: @mut Block,
impl_id: ast::def_id,
impl_id: ast::DefId,
method: &ty::Method,
substs: &ty::substs,
impl_vtables: Option<typeck::vtable_res>)
@ -242,7 +242,7 @@ fn resolve_default_method_vtables(bcx: @mut Block,
pub fn trans_fn_ref_with_vtables(
bcx: @mut Block, //
def_id: ast::def_id, // def id of fn
def_id: ast::DefId, // def id of fn
ref_id: ast::NodeId, // node id of use of fn; may be zero if N/A
type_params: &[ty::t], // values for fn's ty params
vtables: Option<typeck::vtable_res>) // vtables for the call
@ -447,8 +447,8 @@ pub fn trans_fn_ref_with_vtables(
// Translating calls
pub fn trans_call(in_cx: @mut Block,
call_ex: @ast::expr,
f: @ast::expr,
call_ex: @ast::Expr,
f: @ast::Expr,
args: CallArgs,
id: ast::NodeId,
dest: expr::Dest)
@ -465,9 +465,9 @@ pub fn trans_call(in_cx: @mut Block,
}
pub fn trans_method_call(in_cx: @mut Block,
call_ex: @ast::expr,
call_ex: @ast::Expr,
callee_id: ast::NodeId,
rcvr: @ast::expr,
rcvr: @ast::Expr,
args: CallArgs,
dest: expr::Dest)
-> @mut Block {
@ -503,7 +503,7 @@ pub fn trans_method_call(in_cx: @mut Block,
}
pub fn trans_lang_call(bcx: @mut Block,
did: ast::def_id,
did: ast::DefId,
args: &[ValueRef],
dest: Option<expr::Dest>)
-> Result {
@ -530,7 +530,7 @@ pub fn trans_lang_call(bcx: @mut Block,
}
pub fn trans_lang_call_with_type_params(bcx: @mut Block,
did: ast::def_id,
did: ast::DefId,
args: &[ValueRef],
type_params: &[ty::t],
dest: expr::Dest)
@ -576,11 +576,11 @@ impl Visitor<@mut bool> for CalleeTranslationVisitor {
fn visit_item(&mut self, _:@ast::item, _:@mut bool) { }
fn visit_expr(&mut self, e:@ast::expr, cx:@mut bool) {
fn visit_expr(&mut self, e:@ast::Expr, cx:@mut bool) {
if !*cx {
match e.node {
ast::expr_ret(_) => *cx = true,
ast::ExprRet(_) => *cx = true,
_ => visit::walk_expr(self, e, cx),
}
}
@ -757,7 +757,7 @@ pub fn trans_call_inner(in_cx: @mut Block,
}
pub enum CallArgs<'self> {
ArgExprs(&'self [@ast::expr]),
ArgExprs(&'self [@ast::Expr]),
ArgVals(&'self [ValueRef])
}
@ -815,7 +815,7 @@ pub enum AutorefArg {
pub fn trans_arg_expr(bcx: @mut Block,
formal_arg_ty: ty::t,
self_mode: ty::SelfMode,
arg_expr: @ast::expr,
arg_expr: @ast::Expr,
temp_cleanups: &mut ~[ValueRef],
autoref_arg: AutorefArg) -> Result {
let _icx = push_ctxt("trans_arg_expr");

View file

@ -208,7 +208,7 @@ pub fn store_environment(bcx: @mut Block,
// tuple. This could be a ptr in uniq or a box or on stack,
// whatever.
let cbox_ty = tuplify_box_ty(tcx, cdata_ty);
let cboxptr_ty = ty::mk_ptr(tcx, ty::mt {ty:cbox_ty, mutbl:ast::m_imm});
let cboxptr_ty = ty::mk_ptr(tcx, ty::mt {ty:cbox_ty, mutbl:ast::MutImmutable});
let llboxptr_ty = type_of(ccx, cboxptr_ty);
// If there are no bound values, no point in allocating anything.

View file

@ -484,7 +484,7 @@ pub trait get_node_info {
fn info(&self) -> Option<NodeInfo>;
}
impl get_node_info for ast::expr {
impl get_node_info for ast::Expr {
fn info(&self) -> Option<NodeInfo> {
Some(NodeInfo {id: self.id,
callee_id: self.get_callee_id(),
@ -500,7 +500,7 @@ impl get_node_info for ast::Block {
}
}
impl get_node_info for Option<@ast::expr> {
impl get_node_info for Option<@ast::Expr> {
fn info(&self) -> Option<NodeInfo> {
self.chain_ref(|s| s.info())
}
@ -570,19 +570,19 @@ impl Block {
ast_map::node_id_to_str(self.tcx().items, id, self.sess().intr())
}
pub fn expr_to_str(&self, e: @ast::expr) -> ~str {
pub fn expr_to_str(&self, e: @ast::Expr) -> ~str {
e.repr(self.tcx())
}
pub fn expr_is_lval(&self, e: &ast::expr) -> bool {
pub fn expr_is_lval(&self, e: &ast::Expr) -> bool {
ty::expr_is_lval(self.tcx(), self.ccx().maps.method_map, e)
}
pub fn expr_kind(&self, e: &ast::expr) -> ty::ExprKind {
pub fn expr_kind(&self, e: &ast::Expr) -> ty::ExprKind {
ty::expr_kind(self.tcx(), self.ccx().maps.method_map, e)
}
pub fn def(&self, nid: ast::NodeId) -> ast::def {
pub fn def(&self, nid: ast::NodeId) -> ast::Def {
match self.tcx().def_map.find(&nid) {
Some(&v) => v,
None => {
@ -681,7 +681,7 @@ pub fn block_parent(cx: @mut Block) -> @mut Block {
pub fn tuplify_box_ty(tcx: ty::ctxt, t: ty::t) -> ty::t {
let ptr = ty::mk_ptr(
tcx,
ty::mt {ty: ty::mk_i8(), mutbl: ast::m_imm}
ty::mt {ty: ty::mk_i8(), mutbl: ast::MutImmutable}
);
return ty::mk_tup(tcx, ~[ty::mk_uint(), ty::mk_type(tcx),
ptr, ptr,
@ -920,7 +920,7 @@ pub fn mono_data_classify(t: ty::t) -> MonoDataClass {
#[deriving(Eq,IterBytes)]
pub struct mono_id_ {
def: ast::def_id,
def: ast::DefId,
params: ~[mono_param_id]
}
@ -979,11 +979,11 @@ pub fn node_id_type(bcx: @mut Block, id: ast::NodeId) -> ty::t {
monomorphize_type(bcx, t)
}
pub fn expr_ty(bcx: @mut Block, ex: &ast::expr) -> ty::t {
pub fn expr_ty(bcx: @mut Block, ex: &ast::Expr) -> ty::t {
node_id_type(bcx, ex.id)
}
pub fn expr_ty_adjusted(bcx: @mut Block, ex: &ast::expr) -> ty::t {
pub fn expr_ty_adjusted(bcx: @mut Block, ex: &ast::Expr) -> ty::t {
let tcx = bcx.tcx();
let t = ty::expr_ty_adjusted(tcx, ex);
monomorphize_type(bcx, t)
@ -1124,7 +1124,7 @@ pub fn bool_to_i1(bcx: @mut Block, llval: ValueRef) -> ValueRef {
}
pub fn langcall(bcx: @mut Block, span: Option<Span>, msg: &str,
li: LangItem) -> ast::def_id {
li: LangItem) -> ast::DefId {
match bcx.tcx().lang_items.require(li) {
Ok(id) => id,
Err(s) => {

View file

@ -35,7 +35,7 @@ use std::libc::c_uint;
use std::vec;
use syntax::{ast, ast_util, ast_map};
pub fn const_lit(cx: &mut CrateContext, e: &ast::expr, lit: ast::lit)
pub fn const_lit(cx: &mut CrateContext, e: &ast::Expr, lit: ast::lit)
-> ValueRef {
let _icx = push_ctxt("trans_lit");
match lit.node {
@ -82,7 +82,7 @@ pub fn const_ptrcast(cx: &mut CrateContext, a: ValueRef, t: Type) -> ValueRef {
}
}
pub fn const_vec(cx: @mut CrateContext, e: &ast::expr, es: &[@ast::expr])
pub fn const_vec(cx: @mut CrateContext, e: &ast::Expr, es: &[@ast::Expr])
-> (ValueRef, ValueRef, Type) {
unsafe {
let vec_ty = ty::expr_ty(cx.tcx, e);
@ -134,7 +134,7 @@ fn const_deref(cx: &mut CrateContext, v: ValueRef, t: ty::t, explicit: bool)
-> (ValueRef, ty::t) {
match ty::deref(cx.tcx, t, explicit) {
Some(ref mt) => {
assert!(mt.mutbl != ast::m_mutbl);
assert!(mt.mutbl != ast::MutMutable);
let dv = match ty::get(t).sty {
ty::ty_ptr(*) | ty::ty_rptr(*) => {
const_deref_ptr(cx, v)
@ -156,7 +156,7 @@ fn const_deref(cx: &mut CrateContext, v: ValueRef, t: ty::t, explicit: bool)
}
}
pub fn get_const_val(cx: @mut CrateContext, mut def_id: ast::def_id) -> ValueRef {
pub fn get_const_val(cx: @mut CrateContext, mut def_id: ast::DefId) -> ValueRef {
let contains_key = cx.const_values.contains_key(&def_id.node);
if !ast_util::is_local(def_id) || !contains_key {
if !ast_util::is_local(def_id) {
@ -164,9 +164,9 @@ pub fn get_const_val(cx: @mut CrateContext, mut def_id: ast::def_id) -> ValueRef
}
match cx.tcx.items.get_copy(&def_id.node) {
ast_map::node_item(@ast::item {
node: ast::item_static(_, ast::m_imm, _), _
node: ast::item_static(_, ast::MutImmutable, _), _
}, _) => {
trans_const(cx, ast::m_imm, def_id.node);
trans_const(cx, ast::MutImmutable, def_id.node);
}
_ => cx.tcx.sess.bug("expected a const to be an item")
}
@ -174,7 +174,7 @@ pub fn get_const_val(cx: @mut CrateContext, mut def_id: ast::def_id) -> ValueRef
cx.const_values.get_copy(&def_id.node)
}
pub fn const_expr(cx: @mut CrateContext, e: @ast::expr) -> ValueRef {
pub fn const_expr(cx: @mut CrateContext, e: @ast::Expr) -> ValueRef {
let mut llconst = const_expr_unadjusted(cx, e);
let ety = ty::expr_ty(cx.tcx, e);
let adjustment = cx.tcx.adjustments.find_copy(&e.id);
@ -208,11 +208,11 @@ pub fn const_expr(cx: @mut CrateContext, e: @ast::expr) -> ValueRef {
match *autoref {
ty::AutoUnsafe(m) |
ty::AutoPtr(ty::re_static, m) => {
assert!(m != ast::m_mutbl);
assert!(m != ast::MutMutable);
llconst = llptr;
}
ty::AutoBorrowVec(ty::re_static, m) => {
assert!(m != ast::m_mutbl);
assert!(m != ast::MutMutable);
assert_eq!(abi::slice_elt_base, 0);
assert_eq!(abi::slice_elt_len, 1);
@ -252,12 +252,12 @@ pub fn const_expr(cx: @mut CrateContext, e: @ast::expr) -> ValueRef {
llconst
}
fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::Expr) -> ValueRef {
unsafe {
let _icx = push_ctxt("const_expr");
return match e.node {
ast::expr_lit(lit) => consts::const_lit(cx, e, *lit),
ast::expr_binary(_, b, e1, e2) => {
ast::ExprLit(lit) => consts::const_lit(cx, e, *lit),
ast::ExprBinary(_, b, e1, e2) => {
let te1 = const_expr(cx, e1);
let te2 = const_expr(cx, e2);
@ -269,68 +269,68 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
let is_float = ty::type_is_fp(ty);
let signed = ty::type_is_signed(ty);
return match b {
ast::add => {
ast::BiAdd => {
if is_float { llvm::LLVMConstFAdd(te1, te2) }
else { llvm::LLVMConstAdd(te1, te2) }
}
ast::subtract => {
ast::BiSub => {
if is_float { llvm::LLVMConstFSub(te1, te2) }
else { llvm::LLVMConstSub(te1, te2) }
}
ast::mul => {
ast::BiMul => {
if is_float { llvm::LLVMConstFMul(te1, te2) }
else { llvm::LLVMConstMul(te1, te2) }
}
ast::div => {
ast::BiDiv => {
if is_float { llvm::LLVMConstFDiv(te1, te2) }
else if signed { llvm::LLVMConstSDiv(te1, te2) }
else { llvm::LLVMConstUDiv(te1, te2) }
}
ast::rem => {
ast::BiRem => {
if is_float { llvm::LLVMConstFRem(te1, te2) }
else if signed { llvm::LLVMConstSRem(te1, te2) }
else { llvm::LLVMConstURem(te1, te2) }
}
ast::and => llvm::LLVMConstAnd(te1, te2),
ast::or => llvm::LLVMConstOr(te1, te2),
ast::bitxor => llvm::LLVMConstXor(te1, te2),
ast::bitand => llvm::LLVMConstAnd(te1, te2),
ast::bitor => llvm::LLVMConstOr(te1, te2),
ast::shl => llvm::LLVMConstShl(te1, te2),
ast::shr => {
ast::BiAnd => llvm::LLVMConstAnd(te1, te2),
ast::BiOr => llvm::LLVMConstOr(te1, te2),
ast::BiBitXor => llvm::LLVMConstXor(te1, te2),
ast::BiBitAnd => llvm::LLVMConstAnd(te1, te2),
ast::BiBitOr => llvm::LLVMConstOr(te1, te2),
ast::BiShl => llvm::LLVMConstShl(te1, te2),
ast::BiShr => {
if signed { llvm::LLVMConstAShr(te1, te2) }
else { llvm::LLVMConstLShr(te1, te2) }
}
ast::eq => {
ast::BiEq => {
if is_float { ConstFCmp(RealOEQ, te1, te2) }
else { ConstICmp(IntEQ, te1, te2) }
},
ast::lt => {
ast::BiLt => {
if is_float { ConstFCmp(RealOLT, te1, te2) }
else {
if signed { ConstICmp(IntSLT, te1, te2) }
else { ConstICmp(IntULT, te1, te2) }
}
},
ast::le => {
ast::BiLe => {
if is_float { ConstFCmp(RealOLE, te1, te2) }
else {
if signed { ConstICmp(IntSLE, te1, te2) }
else { ConstICmp(IntULE, te1, te2) }
}
},
ast::ne => {
ast::BiNe => {
if is_float { ConstFCmp(RealONE, te1, te2) }
else { ConstICmp(IntNE, te1, te2) }
},
ast::ge => {
ast::BiGe => {
if is_float { ConstFCmp(RealOGE, te1, te2) }
else {
if signed { ConstICmp(IntSGE, te1, te2) }
else { ConstICmp(IntUGE, te1, te2) }
}
},
ast::gt => {
ast::BiGt => {
if is_float { ConstFCmp(RealOGT, te1, te2) }
else {
if signed { ConstICmp(IntSGT, te1, te2) }
@ -339,18 +339,18 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
},
};
},
ast::expr_unary(_, u, e) => {
ast::ExprUnary(_, u, e) => {
let te = const_expr(cx, e);
let ty = ty::expr_ty(cx.tcx, e);
let is_float = ty::type_is_fp(ty);
return match u {
ast::box(_) |
ast::uniq |
ast::deref => {
ast::UnBox(_) |
ast::UnUniq |
ast::UnDeref => {
let (dv, _dt) = const_deref(cx, te, ty, true);
dv
}
ast::not => {
ast::UnNot => {
match ty::get(ty).sty {
ty::ty_bool => {
// Somewhat questionable, but I believe this is
@ -362,13 +362,13 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
_ => llvm::LLVMConstNot(te),
}
}
ast::neg => {
ast::UnNeg => {
if is_float { llvm::LLVMConstFNeg(te) }
else { llvm::LLVMConstNeg(te) }
}
}
}
ast::expr_field(base, field, _) => {
ast::ExprField(base, field, _) => {
let bt = ty::expr_ty_adjusted(cx.tcx, base);
let brepr = adt::represent_type(cx, bt);
let bv = const_expr(cx, base);
@ -378,7 +378,7 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
}
}
ast::expr_index(_, base, index) => {
ast::ExprIndex(_, base, index) => {
let bt = ty::expr_ty_adjusted(cx.tcx, base);
let bv = const_expr(cx, base);
let iv = match const_eval::eval_const_expr(cx.tcx, index) {
@ -423,7 +423,7 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
}
const_get_elt(cx, arr, [iv as c_uint])
}
ast::expr_cast(base, _) => {
ast::ExprCast(base, _) => {
let ety = ty::expr_ty(cx.tcx, e);
let llty = type_of::type_of(cx, ety);
let basety = ty::expr_ty(cx.tcx, base);
@ -477,17 +477,17 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
}
}
}
ast::expr_addr_of(ast::m_imm, sub) => {
ast::ExprAddrOf(ast::MutImmutable, sub) => {
let e = const_expr(cx, sub);
const_addr_of(cx, e)
}
ast::expr_tup(ref es) => {
ast::ExprTup(ref es) => {
let ety = ty::expr_ty(cx.tcx, e);
let repr = adt::represent_type(cx, ety);
let vals = es.map(|&e| const_expr(cx, e));
adt::trans_const(cx, repr, 0, vals)
}
ast::expr_struct(_, ref fs, ref base_opt) => {
ast::ExprStruct(_, ref fs, ref base_opt) => {
let ety = ty::expr_ty(cx.tcx, e);
let repr = adt::represent_type(cx, ety);
let tcx = cx.tcx;
@ -514,19 +514,19 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
adt::trans_const(cx, repr, discr, cs)
}
}
ast::expr_vec(ref es, ast::m_imm) => {
ast::ExprVec(ref es, ast::MutImmutable) => {
let (v, _, _) = const_vec(cx, e, *es);
v
}
ast::expr_vstore(sub, ast::expr_vstore_slice) => {
ast::ExprVstore(sub, ast::ExprVstoreSlice) => {
match sub.node {
ast::expr_lit(ref lit) => {
ast::ExprLit(ref lit) => {
match lit.node {
ast::lit_str(*) => { const_expr(cx, sub) }
_ => { cx.sess.span_bug(e.span, "bad const-slice lit") }
}
}
ast::expr_vec(ref es, ast::m_imm) => {
ast::ExprVec(ref es, ast::MutImmutable) => {
let (cv, sz, llunitty) = const_vec(cx, e, *es);
let llty = val_ty(cv);
let gv = do "const".with_c_str |name| {
@ -541,7 +541,7 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
_ => cx.sess.span_bug(e.span, "bad const-slice expr")
}
}
ast::expr_repeat(elem, count, _) => {
ast::ExprRepeat(elem, count, _) => {
let vec_ty = ty::expr_ty(cx.tcx, e);
let unit_ty = ty::sequence_element_type(cx.tcx, vec_ty);
let llunitty = type_of::type_of(cx, unit_ty);
@ -558,13 +558,13 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
};
v
}
ast::expr_path(ref pth) => {
ast::ExprPath(ref pth) => {
// Assert that there are no type parameters in this path.
assert!(pth.segments.iter().all(|seg| seg.types.is_empty()));
let tcx = cx.tcx;
match tcx.def_map.find(&e.id) {
Some(&ast::def_fn(def_id, _purity)) => {
Some(&ast::DefFn(def_id, _purity)) => {
if !ast_util::is_local(def_id) {
let ty = csearch::get_type(cx.tcx, def_id).ty;
base::trans_external_path(cx, def_id, ty)
@ -573,10 +573,10 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
base::get_item_val(cx, def_id.node)
}
}
Some(&ast::def_static(def_id, false)) => {
Some(&ast::DefStatic(def_id, false)) => {
get_const_val(cx, def_id)
}
Some(&ast::def_variant(enum_did, variant_did)) => {
Some(&ast::DefVariant(enum_did, variant_did)) => {
let ety = ty::expr_ty(cx.tcx, e);
let repr = adt::represent_type(cx, ety);
let vinfo = ty::enum_variant_with_id(cx.tcx,
@ -584,7 +584,7 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
variant_did);
adt::trans_const(cx, repr, vinfo.disr_val, [])
}
Some(&ast::def_struct(_)) => {
Some(&ast::DefStruct(_)) => {
let ety = ty::expr_ty(cx.tcx, e);
let llty = type_of::type_of(cx, ety);
C_null(llty)
@ -594,16 +594,16 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
}
}
}
ast::expr_call(callee, ref args, _) => {
ast::ExprCall(callee, ref args, _) => {
let tcx = cx.tcx;
match tcx.def_map.find(&callee.id) {
Some(&ast::def_struct(_)) => {
Some(&ast::DefStruct(_)) => {
let ety = ty::expr_ty(cx.tcx, e);
let repr = adt::represent_type(cx, ety);
let arg_vals = args.map(|a| const_expr(cx, *a));
adt::trans_const(cx, repr, 0, arg_vals)
}
Some(&ast::def_variant(enum_did, variant_did)) => {
Some(&ast::DefVariant(enum_did, variant_did)) => {
let ety = ty::expr_ty(cx.tcx, e);
let repr = adt::represent_type(cx, ety);
let vinfo = ty::enum_variant_with_id(cx.tcx,
@ -615,14 +615,14 @@ fn const_expr_unadjusted(cx: @mut CrateContext, e: &ast::expr) -> ValueRef {
_ => cx.sess.span_bug(e.span, "expected a struct or variant def")
}
}
ast::expr_paren(e) => { return const_expr(cx, e); }
ast::ExprParen(e) => { return const_expr(cx, e); }
_ => cx.sess.span_bug(e.span,
"bad constant expression type in consts::const_expr")
};
}
}
pub fn trans_const(ccx: @mut CrateContext, m: ast::mutability, id: ast::NodeId) {
pub fn trans_const(ccx: @mut CrateContext, m: ast::Mutability, id: ast::NodeId) {
unsafe {
let _icx = push_ctxt("trans_const");
let g = base::get_item_val(ccx, id);
@ -630,7 +630,7 @@ pub fn trans_const(ccx: @mut CrateContext, m: ast::mutability, id: ast::NodeId)
// constant's initializer to determine its LLVM type.
let v = ccx.const_values.get_copy(&id);
llvm::LLVMSetInitializer(g, v);
if m != ast::m_mutbl {
if m != ast::MutMutable {
llvm::LLVMSetGlobalConstant(g, True);
}
}

View file

@ -53,19 +53,19 @@ pub struct CrateContext {
item_symbols: HashMap<ast::NodeId, ~str>,
link_meta: LinkMeta,
enum_sizes: HashMap<ty::t, uint>,
discrims: HashMap<ast::def_id, ValueRef>,
discrims: HashMap<ast::DefId, ValueRef>,
discrim_symbols: HashMap<ast::NodeId, @str>,
tydescs: HashMap<ty::t, @mut tydesc_info>,
// Set when running emit_tydescs to enforce that no more tydescs are
// created.
finished_tydescs: bool,
// Track mapping of external ids to local items imported for inlining
external: HashMap<ast::def_id, Option<ast::NodeId>>,
external: HashMap<ast::DefId, Option<ast::NodeId>>,
// Cache instances of monomorphized functions
monomorphized: HashMap<mono_id, ValueRef>,
monomorphizing: HashMap<ast::def_id, uint>,
monomorphizing: HashMap<ast::DefId, uint>,
// Cache computed type parameter uses (see type_use.rs)
type_use_cache: HashMap<ast::def_id, @~[type_use::type_uses]>,
type_use_cache: HashMap<ast::DefId, @~[type_use::type_uses]>,
// Cache generated vtables
vtables: HashMap<(ty::t, mono_id), ValueRef>,
// Cache of constant strings,
@ -85,9 +85,9 @@ pub struct CrateContext {
const_values: HashMap<ast::NodeId, ValueRef>,
// Cache of external const values
extern_const_values: HashMap<ast::def_id, ValueRef>,
extern_const_values: HashMap<ast::DefId, ValueRef>,
impl_method_cache: HashMap<(ast::def_id, ast::Ident), ast::def_id>,
impl_method_cache: HashMap<(ast::DefId, ast::Ident), ast::DefId>,
module_data: HashMap<~str, ValueRef>,
lltypes: HashMap<ty::t, Type>,

View file

@ -50,9 +50,9 @@ pub fn trans_block(bcx: @mut Block, b: &ast::Block, dest: expr::Dest) -> @mut Bl
}
pub fn trans_if(bcx: @mut Block,
cond: @ast::expr,
cond: @ast::Expr,
thn: &ast::Block,
els: Option<@ast::expr>,
els: Option<@ast::Expr>,
dest: expr::Dest)
-> @mut Block {
debug!("trans_if(bcx=%s, cond=%s, thn=%?, dest=%s)",
@ -121,14 +121,14 @@ pub fn trans_if(bcx: @mut Block,
return next_bcx;
// trans `else [ if { .. } ... | { .. } ]`
fn trans_if_else(else_bcx_in: @mut Block, elexpr: @ast::expr,
fn trans_if_else(else_bcx_in: @mut Block, elexpr: @ast::Expr,
dest: expr::Dest) -> @mut Block {
let else_bcx_out = match elexpr.node {
ast::expr_if(_, _, _) => {
ast::ExprIf(_, _, _) => {
let elseif_blk = ast_util::block_from_expr(elexpr);
trans_block(else_bcx_in, &elseif_blk, dest)
}
ast::expr_block(ref blk) => {
ast::ExprBlock(ref blk) => {
trans_block(else_bcx_in, blk, dest)
}
// would be nice to have a constraint on ifs
@ -153,7 +153,7 @@ pub fn join_blocks(parent_bcx: @mut Block, in_cxs: &[@mut Block]) -> @mut Block
return out;
}
pub fn trans_while(bcx: @mut Block, cond: @ast::expr, body: &ast::Block) -> @mut Block {
pub fn trans_while(bcx: @mut Block, cond: @ast::Expr, body: &ast::Block) -> @mut Block {
let _icx = push_ctxt("trans_while");
let next_bcx = sub_block(bcx, "while next");
@ -206,10 +206,10 @@ pub fn trans_loop(bcx:@mut Block,
return next_bcx;
}
pub fn trans_log(log_ex: &ast::expr,
lvl: @ast::expr,
pub fn trans_log(log_ex: &ast::Expr,
lvl: @ast::Expr,
bcx: @mut Block,
e: @ast::expr) -> @mut Block {
e: @ast::Expr) -> @mut Block {
let _icx = push_ctxt("trans_log");
let ccx = bcx.ccx();
let mut bcx = bcx;
@ -334,7 +334,7 @@ pub fn trans_cont(bcx: @mut Block, label_opt: Option<Ident>) -> @mut Block {
return trans_break_cont(bcx, label_opt, false);
}
pub fn trans_ret(bcx: @mut Block, e: Option<@ast::expr>) -> @mut Block {
pub fn trans_ret(bcx: @mut Block, e: Option<@ast::Expr>) -> @mut Block {
let _icx = push_ctxt("trans_ret");
let mut bcx = bcx;
let dest = match bcx.fcx.llretptr {
@ -354,7 +354,7 @@ pub fn trans_ret(bcx: @mut Block, e: Option<@ast::expr>) -> @mut Block {
pub fn trans_fail_expr(bcx: @mut Block,
sp_opt: Option<Span>,
fail_expr: Option<@ast::expr>)
fail_expr: Option<@ast::Expr>)
-> @mut Block {
let _icx = push_ctxt("trans_fail_expr");
let mut bcx = bcx;

View file

@ -726,7 +726,7 @@ impl Datum {
}
/// expr: The deref expression.
pub fn deref(&self, bcx: @mut Block, expr: &ast::expr, derefs: uint)
pub fn deref(&self, bcx: @mut Block, expr: &ast::Expr, derefs: uint)
-> DatumBlock {
match self.try_deref(bcx, expr.span, expr.id, derefs, false) {
(Some(lvres), bcx) => DatumBlock { bcx: bcx, datum: lvres },

View file

@ -357,7 +357,7 @@ pub fn create_function_debug_context(cx: &mut CrateContext,
}
ast_map::node_expr(ref expr) => {
match expr.node {
ast::expr_fn_block(ref fn_decl, ref top_level_block) => {
ast::ExprFnBlock(ref fn_decl, ref top_level_block) => {
let name = gensym_name("fn");
(name, fn_decl,
// This is not quite right. It should actually inherit the generics of the
@ -864,7 +864,7 @@ fn tuple_metadata(cx: &mut CrateContext,
fn enum_metadata(cx: &mut CrateContext,
enum_type: ty::t,
enum_def_id: ast::def_id,
enum_def_id: ast::DefId,
span: Span)
-> DIType {
@ -1236,7 +1236,7 @@ fn vec_slice_metadata(cx: &mut CrateContext,
assert!(slice_layout_is_correct(cx, member_llvm_types, element_type));
let data_ptr_type = ty::mk_ptr(cx.tcx, ty::mt { ty: element_type, mutbl: ast::m_imm });
let data_ptr_type = ty::mk_ptr(cx.tcx, ty::mt { ty: element_type, mutbl: ast::MutImmutable });
let member_type_metadata = &[type_metadata(cx, data_ptr_type, span),
type_metadata(cx, ty::mk_uint(), span)];
@ -1531,7 +1531,7 @@ fn assert_fcx_has_span(fcx: &FunctionContext) {
// descriptors where necessary. These artificial scopes allow GDB to correctly handle name
// shadowing.
fn populate_scope_map(cx: &mut CrateContext,
arg_pats: &[@ast::pat],
arg_pats: &[@ast::Pat],
fn_entry_block: Option<&ast::Block>,
fn_metadata: DISubprogram,
scope_map: &mut HashMap<ast::NodeId, DIScope>) {
@ -1608,10 +1608,10 @@ fn populate_scope_map(cx: &mut CrateContext,
scope_map.insert(ast_util::stmt_id(statement), scope_stack.last().scope_metadata);
match statement.node {
ast::stmt_decl(@ref decl, _) => walk_decl(cx, decl, scope_stack, scope_map),
ast::stmt_expr(@ref exp, _) |
ast::stmt_semi(@ref exp, _) => walk_expr(cx, exp, scope_stack, scope_map),
ast::stmt_mac(*) => () // ignore macros (which should be expanded anyway)
ast::StmtDecl(@ref decl, _) => walk_decl(cx, decl, scope_stack, scope_map),
ast::StmtExpr(@ref exp, _) |
ast::StmtSemi(@ref exp, _) => walk_expr(cx, exp, scope_stack, scope_map),
ast::StmtMac(*) => () // ignore macros (which should be expanded anyway)
}
}
@ -1621,11 +1621,11 @@ fn populate_scope_map(cx: &mut CrateContext,
}
fn walk_decl(cx: &mut CrateContext,
decl: &ast::decl,
decl: &ast::Decl,
scope_stack: &mut ~[ScopeStackEntry],
scope_map: &mut HashMap<ast::NodeId, DIScope>) {
match *decl {
codemap::Spanned { node: ast::decl_local(@ref local), _ } => {
codemap::Spanned { node: ast::DeclLocal(@ref local), _ } => {
scope_map.insert(local.id, scope_stack.last().scope_metadata);
walk_pattern(cx, local.pat, scope_stack, scope_map);
@ -1639,7 +1639,7 @@ fn populate_scope_map(cx: &mut CrateContext,
}
fn walk_pattern(cx: &mut CrateContext,
pat: @ast::pat,
pat: @ast::Pat,
scope_stack: &mut ~[ScopeStackEntry],
scope_map: &mut HashMap<ast::NodeId, DIScope>) {
@ -1649,7 +1649,7 @@ fn populate_scope_map(cx: &mut CrateContext,
// because we have to visit *all* nodes in order to put them into the scope map. The above
// functions don't do that.
match pat.node {
ast::pat_ident(_, ref path_ref, ref sub_pat_opt) => {
ast::PatIdent(_, ref path_ref, ref sub_pat_opt) => {
// Check if this is a binding. If so we need to put it on the scope stack and maybe
// introduce an articial scope
@ -1716,11 +1716,11 @@ fn populate_scope_map(cx: &mut CrateContext,
}
}
ast::pat_wild => {
ast::PatWild => {
scope_map.insert(pat.id, scope_stack.last().scope_metadata);
}
ast::pat_enum(_, ref sub_pats_opt) => {
ast::PatEnum(_, ref sub_pats_opt) => {
scope_map.insert(pat.id, scope_stack.last().scope_metadata);
for ref sub_pats in sub_pats_opt.iter() {
@ -1730,15 +1730,15 @@ fn populate_scope_map(cx: &mut CrateContext,
}
}
ast::pat_struct(_, ref field_pats, _) => {
ast::PatStruct(_, ref field_pats, _) => {
scope_map.insert(pat.id, scope_stack.last().scope_metadata);
for &ast::field_pat { pat: sub_pat, _ } in field_pats.iter() {
for &ast::FieldPat { pat: sub_pat, _ } in field_pats.iter() {
walk_pattern(cx, sub_pat, scope_stack, scope_map);
}
}
ast::pat_tup(ref sub_pats) => {
ast::PatTup(ref sub_pats) => {
scope_map.insert(pat.id, scope_stack.last().scope_metadata);
for &sub_pat in sub_pats.iter() {
@ -1746,25 +1746,25 @@ fn populate_scope_map(cx: &mut CrateContext,
}
}
ast::pat_box(sub_pat) |
ast::pat_uniq(sub_pat) |
ast::pat_region(sub_pat) => {
ast::PatBox(sub_pat) |
ast::PatUniq(sub_pat) |
ast::PatRegion(sub_pat) => {
scope_map.insert(pat.id, scope_stack.last().scope_metadata);
walk_pattern(cx, sub_pat, scope_stack, scope_map);
}
ast::pat_lit(@ref exp) => {
ast::PatLit(@ref exp) => {
scope_map.insert(pat.id, scope_stack.last().scope_metadata);
walk_expr(cx, exp, scope_stack, scope_map);
}
ast::pat_range(@ref exp1, @ref exp2) => {
ast::PatRange(@ref exp1, @ref exp2) => {
scope_map.insert(pat.id, scope_stack.last().scope_metadata);
walk_expr(cx, exp1, scope_stack, scope_map);
walk_expr(cx, exp2, scope_stack, scope_map);
}
ast::pat_vec(ref front_sub_pats, ref middle_sub_pats, ref back_sub_pats) => {
ast::PatVec(ref front_sub_pats, ref middle_sub_pats, ref back_sub_pats) => {
scope_map.insert(pat.id, scope_stack.last().scope_metadata);
for &sub_pat in front_sub_pats.iter() {
@ -1783,58 +1783,58 @@ fn populate_scope_map(cx: &mut CrateContext,
}
fn walk_expr(cx: &mut CrateContext,
exp: &ast::expr,
exp: &ast::Expr,
scope_stack: &mut ~[ScopeStackEntry],
scope_map: &mut HashMap<ast::NodeId, DIScope>) {
scope_map.insert(exp.id, scope_stack.last().scope_metadata);
match exp.node {
ast::expr_self |
ast::expr_lit(_) |
ast::expr_break(_) |
ast::expr_again(_) |
ast::expr_path(_) => (),
ast::ExprSelf |
ast::ExprLit(_) |
ast::ExprBreak(_) |
ast::ExprAgain(_) |
ast::ExprPath(_) => (),
ast::expr_vstore(@ref sub_exp, _) |
ast::expr_cast(@ref sub_exp, _) |
ast::expr_addr_of(_, @ref sub_exp) |
ast::expr_field(@ref sub_exp, _, _) |
ast::expr_paren(@ref sub_exp) => walk_expr(cx, sub_exp, scope_stack, scope_map),
ast::ExprVstore(@ref sub_exp, _) |
ast::ExprCast(@ref sub_exp, _) |
ast::ExprAddrOf(_, @ref sub_exp) |
ast::ExprField(@ref sub_exp, _, _) |
ast::ExprParen(@ref sub_exp) => walk_expr(cx, sub_exp, scope_stack, scope_map),
ast::expr_ret(exp_opt) => match exp_opt {
ast::ExprRet(exp_opt) => match exp_opt {
Some(@ref sub_exp) => walk_expr(cx, sub_exp, scope_stack, scope_map),
None => ()
},
ast::expr_unary(node_id, _, @ref sub_exp) => {
ast::ExprUnary(node_id, _, @ref sub_exp) => {
scope_map.insert(node_id, scope_stack.last().scope_metadata);
walk_expr(cx, sub_exp, scope_stack, scope_map);
}
ast::expr_assign_op(node_id, _, @ref lhs, @ref rhs) |
ast::expr_index(node_id, @ref lhs, @ref rhs) |
ast::expr_binary(node_id, _, @ref lhs, @ref rhs) => {
ast::ExprAssignOp(node_id, _, @ref lhs, @ref rhs) |
ast::ExprIndex(node_id, @ref lhs, @ref rhs) |
ast::ExprBinary(node_id, _, @ref lhs, @ref rhs) => {
scope_map.insert(node_id, scope_stack.last().scope_metadata);
walk_expr(cx, lhs, scope_stack, scope_map);
walk_expr(cx, rhs, scope_stack, scope_map);
}
ast::expr_vec(ref init_expressions, _) |
ast::expr_tup(ref init_expressions) => {
ast::ExprVec(ref init_expressions, _) |
ast::ExprTup(ref init_expressions) => {
for &@ref ie in init_expressions.iter() {
walk_expr(cx, ie, scope_stack, scope_map);
}
}
ast::expr_assign(@ref sub_exp1, @ref sub_exp2) |
ast::expr_log(@ref sub_exp1, @ref sub_exp2) |
ast::expr_repeat(@ref sub_exp1, @ref sub_exp2, _) => {
ast::ExprAssign(@ref sub_exp1, @ref sub_exp2) |
ast::ExprLog(@ref sub_exp1, @ref sub_exp2) |
ast::ExprRepeat(@ref sub_exp1, @ref sub_exp2, _) => {
walk_expr(cx, sub_exp1, scope_stack, scope_map);
walk_expr(cx, sub_exp2, scope_stack, scope_map);
}
ast::expr_if(@ref cond_exp, ref then_block, ref opt_else_exp) => {
ast::ExprIf(@ref cond_exp, ref then_block, ref opt_else_exp) => {
walk_expr(cx, cond_exp, scope_stack, scope_map);
do with_new_scope(cx, then_block.span, scope_stack, scope_map) |cx,
@ -1849,7 +1849,7 @@ fn populate_scope_map(cx: &mut CrateContext,
}
}
ast::expr_while(@ref cond_exp, ref loop_body) => {
ast::ExprWhile(@ref cond_exp, ref loop_body) => {
walk_expr(cx, cond_exp, scope_stack, scope_map);
do with_new_scope(cx, loop_body.span, scope_stack, scope_map) |cx,
@ -1859,18 +1859,18 @@ fn populate_scope_map(cx: &mut CrateContext,
}
}
ast::expr_for_loop(_, _, _) => {
ast::ExprForLoop(_, _, _) => {
cx.sess.span_bug(exp.span, "debuginfo::populate_scope_map() - \
Found unexpanded for-loop.");
}
ast::expr_mac(_) => {
ast::ExprMac(_) => {
cx.sess.span_bug(exp.span, "debuginfo::populate_scope_map() - \
Found unexpanded macro.");
}
ast::expr_loop(ref block, _) |
ast::expr_block(ref block) => {
ast::ExprLoop(ref block, _) |
ast::ExprBlock(ref block) => {
do with_new_scope(cx, block.span, scope_stack, scope_map) |cx,
scope_stack,
scope_map| {
@ -1878,7 +1878,7 @@ fn populate_scope_map(cx: &mut CrateContext,
}
}
ast::expr_fn_block(ast::fn_decl { inputs: ref inputs, _ }, ref block) => {
ast::ExprFnBlock(ast::fn_decl { inputs: ref inputs, _ }, ref block) => {
do with_new_scope(cx, block.span, scope_stack, scope_map) |cx,
scope_stack,
scope_map| {
@ -1891,9 +1891,9 @@ fn populate_scope_map(cx: &mut CrateContext,
}
// ast::expr_loop_body(@ref inner_exp) |
ast::expr_do_body(@ref inner_exp) => {
ast::ExprDoBody(@ref inner_exp) => {
let inner_expr_is_expr_fn_block = match *inner_exp {
ast::expr { node: ast::expr_fn_block(*), _ } => true,
ast::Expr { node: ast::ExprFnBlock(*), _ } => true,
_ => false
};
@ -1905,7 +1905,7 @@ fn populate_scope_map(cx: &mut CrateContext,
walk_expr(cx, inner_exp, scope_stack, scope_map);
}
ast::expr_call(@ref fn_exp, ref args, _) => {
ast::ExprCall(@ref fn_exp, ref args, _) => {
walk_expr(cx, fn_exp, scope_stack, scope_map);
for &@ref arg_exp in args.iter() {
@ -1913,7 +1913,7 @@ fn populate_scope_map(cx: &mut CrateContext,
}
}
ast::expr_method_call(node_id, @ref receiver_exp, _, _, ref args, _) => {
ast::ExprMethodCall(node_id, @ref receiver_exp, _, _, ref args, _) => {
scope_map.insert(node_id, scope_stack.last().scope_metadata);
walk_expr(cx, receiver_exp, scope_stack, scope_map);
@ -1922,7 +1922,7 @@ fn populate_scope_map(cx: &mut CrateContext,
}
}
ast::expr_match(@ref discriminant_exp, ref arms) => {
ast::ExprMatch(@ref discriminant_exp, ref arms) => {
walk_expr(cx, discriminant_exp, scope_stack, scope_map);
// for each arm we have to first walk the pattern as these might introduce new
@ -1948,7 +1948,7 @@ fn populate_scope_map(cx: &mut CrateContext,
}
}
ast::expr_struct(_, ref fields, ref base_exp) => {
ast::ExprStruct(_, ref fields, ref base_exp) => {
for &ast::Field { expr: @ref exp, _ } in fields.iter() {
walk_expr(cx, exp, scope_stack, scope_map);
}
@ -1959,7 +1959,7 @@ fn populate_scope_map(cx: &mut CrateContext,
}
}
ast::expr_inline_asm(ast::inline_asm { inputs: ref inputs,
ast::ExprInlineAsm(ast::inline_asm { inputs: ref inputs,
outputs: ref outputs,
_ }) => {
// inputs, outputs: ~[(@str, @expr)]

View file

@ -178,7 +178,7 @@ fn drop_and_cancel_clean(bcx: @mut Block, dat: Datum) -> @mut Block {
return bcx;
}
pub fn trans_to_datum(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
pub fn trans_to_datum(bcx: @mut Block, expr: @ast::Expr) -> DatumBlock {
debug!("trans_to_datum(expr=%s)", bcx.expr_to_str(expr));
let mut bcx = bcx;
@ -249,7 +249,7 @@ pub fn trans_to_datum(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
fn auto_slice(bcx: @mut Block,
autoderefs: uint,
expr: &ast::expr,
expr: &ast::Expr,
datum: Datum) -> DatumBlock {
// This is not the most efficient thing possible; since slices
// are two words it'd be better if this were compiled in
@ -266,7 +266,7 @@ pub fn trans_to_datum(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
// this type may have a different region/mutability than the
// real one, but it will have the same runtime representation
let slice_ty = ty::mk_evec(tcx,
ty::mt { ty: unit_ty, mutbl: ast::m_imm },
ty::mt { ty: unit_ty, mutbl: ast::MutImmutable },
ty::vstore_slice(ty::re_static));
let scratch = scratch_datum(bcx, slice_ty, "__adjust", false);
@ -275,7 +275,7 @@ pub fn trans_to_datum(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
DatumBlock {bcx: bcx, datum: scratch}
}
fn add_env(bcx: @mut Block, expr: &ast::expr, datum: Datum) -> DatumBlock {
fn add_env(bcx: @mut Block, expr: &ast::Expr, datum: Datum) -> DatumBlock {
// This is not the most efficient thing possible; since closures
// are two words it'd be better if this were compiled in
// 'dest' mode, but I can't find a nice way to structure the
@ -296,7 +296,7 @@ pub fn trans_to_datum(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
fn auto_slice_and_ref(bcx: @mut Block,
autoderefs: uint,
expr: &ast::expr,
expr: &ast::Expr,
datum: Datum) -> DatumBlock {
let DatumBlock { bcx, datum } = auto_slice(bcx, autoderefs, expr, datum);
auto_ref(bcx, datum)
@ -304,7 +304,7 @@ pub fn trans_to_datum(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
fn auto_borrow_obj(mut bcx: @mut Block,
autoderefs: uint,
expr: @ast::expr,
expr: @ast::Expr,
source_datum: Datum) -> DatumBlock {
let tcx = bcx.tcx();
let target_obj_ty = expr_ty_adjusted(bcx, expr);
@ -395,7 +395,7 @@ pub fn trans_to_datum(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
}
}
pub fn trans_into(bcx: @mut Block, expr: @ast::expr, dest: Dest) -> @mut Block {
pub fn trans_into(bcx: @mut Block, expr: @ast::Expr, dest: Dest) -> @mut Block {
if bcx.tcx().adjustments.contains_key(&expr.id) {
// use trans_to_datum, which is mildly less efficient but
// which will perform the adjustments:
@ -453,7 +453,7 @@ pub fn trans_into(bcx: @mut Block, expr: @ast::expr, dest: Dest) -> @mut Block {
};
}
fn trans_lvalue(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
fn trans_lvalue(bcx: @mut Block, expr: @ast::Expr) -> DatumBlock {
/*!
*
* Translates an lvalue expression, always yielding a by-ref
@ -472,7 +472,7 @@ fn trans_lvalue(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
};
}
fn trans_to_datum_unadjusted(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
fn trans_to_datum_unadjusted(bcx: @mut Block, expr: @ast::Expr) -> DatumBlock {
/*!
* Translates an expression into a datum. If this expression
* is an rvalue, this will result in a temporary value being
@ -538,44 +538,44 @@ fn trans_to_datum_unadjusted(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
}
}
fn trans_rvalue_datum_unadjusted(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
fn trans_rvalue_datum_unadjusted(bcx: @mut Block, expr: @ast::Expr) -> DatumBlock {
let _icx = push_ctxt("trans_rvalue_datum_unadjusted");
trace_span!(bcx, expr.span, shorten(bcx.expr_to_str(expr)));
match expr.node {
ast::expr_path(_) | ast::expr_self => {
ast::ExprPath(_) | ast::ExprSelf => {
return trans_def_datum_unadjusted(bcx, expr, bcx.def(expr.id));
}
ast::expr_vstore(contents, ast::expr_vstore_box) |
ast::expr_vstore(contents, ast::expr_vstore_mut_box) => {
ast::ExprVstore(contents, ast::ExprVstoreBox) |
ast::ExprVstore(contents, ast::ExprVstoreMutBox) => {
return tvec::trans_uniq_or_managed_vstore(bcx, heap_managed,
expr, contents);
}
ast::expr_vstore(contents, ast::expr_vstore_uniq) => {
ast::ExprVstore(contents, ast::ExprVstoreUniq) => {
let heap = heap_for_unique(bcx, expr_ty(bcx, contents));
return tvec::trans_uniq_or_managed_vstore(bcx, heap,
expr, contents);
}
ast::expr_lit(lit) => {
ast::ExprLit(lit) => {
return trans_immediate_lit(bcx, expr, *lit);
}
ast::expr_binary(_, op, lhs, rhs) => {
ast::ExprBinary(_, op, lhs, rhs) => {
// if overloaded, would be RvalueDpsExpr
assert!(!bcx.ccx().maps.method_map.contains_key(&expr.id));
return trans_binary(bcx, expr, op, lhs, rhs);
}
ast::expr_unary(_, op, x) => {
ast::ExprUnary(_, op, x) => {
return trans_unary_datum(bcx, expr, op, x);
}
ast::expr_addr_of(_, x) => {
ast::ExprAddrOf(_, x) => {
return trans_addr_of(bcx, expr, x);
}
ast::expr_cast(val, _) => {
ast::ExprCast(val, _) => {
return trans_imm_cast(bcx, val, expr.id);
}
ast::expr_paren(e) => {
ast::ExprParen(e) => {
return trans_rvalue_datum_unadjusted(bcx, e);
}
_ => {
@ -588,7 +588,7 @@ fn trans_rvalue_datum_unadjusted(bcx: @mut Block, expr: @ast::expr) -> DatumBloc
}
}
fn trans_rvalue_stmt_unadjusted(bcx: @mut Block, expr: @ast::expr) -> @mut Block {
fn trans_rvalue_stmt_unadjusted(bcx: @mut Block, expr: @ast::Expr) -> @mut Block {
let mut bcx = bcx;
let _icx = push_ctxt("trans_rvalue_stmt");
@ -599,25 +599,25 @@ fn trans_rvalue_stmt_unadjusted(bcx: @mut Block, expr: @ast::expr) -> @mut Block
trace_span!(bcx, expr.span, shorten(bcx.expr_to_str(expr)));
match expr.node {
ast::expr_break(label_opt) => {
ast::ExprBreak(label_opt) => {
return controlflow::trans_break(bcx, label_opt);
}
ast::expr_again(label_opt) => {
ast::ExprAgain(label_opt) => {
return controlflow::trans_cont(bcx, label_opt);
}
ast::expr_ret(ex) => {
ast::ExprRet(ex) => {
return controlflow::trans_ret(bcx, ex);
}
ast::expr_log(lvl, a) => {
ast::ExprLog(lvl, a) => {
return controlflow::trans_log(expr, lvl, bcx, a);
}
ast::expr_while(cond, ref body) => {
ast::ExprWhile(cond, ref body) => {
return controlflow::trans_while(bcx, cond, body);
}
ast::expr_loop(ref body, opt_label) => {
ast::ExprLoop(ref body, opt_label) => {
return controlflow::trans_loop(bcx, body, opt_label);
}
ast::expr_assign(dst, src) => {
ast::ExprAssign(dst, src) => {
let src_datum = unpack_datum!(
bcx, trans_to_datum(bcx, src));
let dst_datum = unpack_datum!(
@ -625,13 +625,13 @@ fn trans_rvalue_stmt_unadjusted(bcx: @mut Block, expr: @ast::expr) -> @mut Block
return src_datum.store_to_datum(
bcx, DROP_EXISTING, dst_datum);
}
ast::expr_assign_op(callee_id, op, dst, src) => {
ast::ExprAssignOp(callee_id, op, dst, src) => {
return trans_assign_op(bcx, expr, callee_id, op, dst, src);
}
ast::expr_paren(a) => {
ast::ExprParen(a) => {
return trans_rvalue_stmt_unadjusted(bcx, a);
}
ast::expr_inline_asm(ref a) => {
ast::ExprInlineAsm(ref a) => {
return asm::trans_inline_asm(bcx, a);
}
_ => {
@ -644,7 +644,7 @@ fn trans_rvalue_stmt_unadjusted(bcx: @mut Block, expr: @ast::expr) -> @mut Block
};
}
fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::expr,
fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::Expr,
dest: Dest) -> @mut Block {
let _icx = push_ctxt("trans_rvalue_dps_unadjusted");
let tcx = bcx.tcx();
@ -652,45 +652,45 @@ fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::expr,
trace_span!(bcx, expr.span, shorten(bcx.expr_to_str(expr)));
match expr.node {
ast::expr_paren(e) => {
ast::ExprParen(e) => {
return trans_rvalue_dps_unadjusted(bcx, e, dest);
}
ast::expr_path(_) | ast::expr_self => {
ast::ExprPath(_) | ast::ExprSelf => {
return trans_def_dps_unadjusted(bcx, expr,
bcx.def(expr.id), dest);
}
ast::expr_if(cond, ref thn, els) => {
ast::ExprIf(cond, ref thn, els) => {
return controlflow::trans_if(bcx, cond, thn, els, dest);
}
ast::expr_match(discr, ref arms) => {
ast::ExprMatch(discr, ref arms) => {
return _match::trans_match(bcx, expr, discr, *arms, dest);
}
ast::expr_block(ref blk) => {
ast::ExprBlock(ref blk) => {
return do base::with_scope(bcx, blk.info(),
"block-expr body") |bcx| {
controlflow::trans_block(bcx, blk, dest)
};
}
ast::expr_struct(_, ref fields, base) => {
ast::ExprStruct(_, ref fields, base) => {
return trans_rec_or_struct(bcx, (*fields), base, expr.span, expr.id, dest);
}
ast::expr_tup(ref args) => {
ast::ExprTup(ref args) => {
let repr = adt::represent_type(bcx.ccx(), expr_ty(bcx, expr));
let numbered_fields: ~[(uint, @ast::expr)] =
let numbered_fields: ~[(uint, @ast::Expr)] =
args.iter().enumerate().map(|(i, arg)| (i, *arg)).collect();
return trans_adt(bcx, repr, 0, numbered_fields, None, dest);
}
ast::expr_lit(@codemap::Spanned {node: ast::lit_str(s), _}) => {
ast::ExprLit(@codemap::Spanned {node: ast::lit_str(s), _}) => {
return tvec::trans_lit_str(bcx, expr, s, dest);
}
ast::expr_vstore(contents, ast::expr_vstore_slice) |
ast::expr_vstore(contents, ast::expr_vstore_mut_slice) => {
ast::ExprVstore(contents, ast::ExprVstoreSlice) |
ast::ExprVstore(contents, ast::ExprVstoreMutSlice) => {
return tvec::trans_slice_vstore(bcx, expr, contents, dest);
}
ast::expr_vec(*) | ast::expr_repeat(*) => {
ast::ExprVec(*) | ast::ExprRepeat(*) => {
return tvec::trans_fixed_vstore(bcx, expr, expr, dest);
}
ast::expr_fn_block(ref decl, ref body) => {
ast::ExprFnBlock(ref decl, ref body) => {
let expr_ty = expr_ty(bcx, expr);
let sigil = ty::ty_closure_sigil(expr_ty);
debug!("translating fn_block %s with type %s",
@ -699,14 +699,14 @@ fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::expr,
return closure::trans_expr_fn(bcx, sigil, decl, body,
expr.id, expr.id, dest);
}
ast::expr_do_body(blk) => {
ast::ExprDoBody(blk) => {
return trans_into(bcx, blk, dest);
}
ast::expr_call(f, ref args, _) => {
ast::ExprCall(f, ref args, _) => {
return callee::trans_call(
bcx, expr, f, callee::ArgExprs(*args), expr.id, dest);
}
ast::expr_method_call(callee_id, rcvr, _, _, ref args, _) => {
ast::ExprMethodCall(callee_id, rcvr, _, _, ref args, _) => {
return callee::trans_method_call(bcx,
expr,
callee_id,
@ -714,7 +714,7 @@ fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::expr,
callee::ArgExprs(*args),
dest);
}
ast::expr_binary(callee_id, _, lhs, rhs) => {
ast::ExprBinary(callee_id, _, lhs, rhs) => {
// if not overloaded, would be RvalueDatumExpr
return trans_overloaded_op(bcx,
expr,
@ -724,7 +724,7 @@ fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::expr,
expr_ty(bcx, expr),
dest);
}
ast::expr_unary(callee_id, _, subexpr) => {
ast::ExprUnary(callee_id, _, subexpr) => {
// if not overloaded, would be RvalueDatumExpr
return trans_overloaded_op(bcx,
expr,
@ -734,7 +734,7 @@ fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::expr,
expr_ty(bcx, expr),
dest);
}
ast::expr_index(callee_id, base, idx) => {
ast::ExprIndex(callee_id, base, idx) => {
// if not overloaded, would be RvalueDatumExpr
return trans_overloaded_op(bcx,
expr,
@ -744,7 +744,7 @@ fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::expr,
expr_ty(bcx, expr),
dest);
}
ast::expr_cast(val, _) => {
ast::ExprCast(val, _) => {
match ty::get(node_id_type(bcx, expr.id)).sty {
ty::ty_trait(_, _, store, _, _) => {
return meth::trans_trait_cast(bcx, val, expr.id, dest,
@ -756,7 +756,7 @@ fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::expr,
}
}
}
ast::expr_assign_op(callee_id, op, dst, src) => {
ast::ExprAssignOp(callee_id, op, dst, src) => {
return trans_assign_op(bcx, expr, callee_id, op, dst, src);
}
_ => {
@ -768,8 +768,8 @@ fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::expr,
}
}
fn trans_def_dps_unadjusted(bcx: @mut Block, ref_expr: &ast::expr,
def: ast::def, dest: Dest) -> @mut Block {
fn trans_def_dps_unadjusted(bcx: @mut Block, ref_expr: &ast::Expr,
def: ast::Def, dest: Dest) -> @mut Block {
let _icx = push_ctxt("trans_def_dps_unadjusted");
let ccx = bcx.ccx();
@ -779,7 +779,7 @@ fn trans_def_dps_unadjusted(bcx: @mut Block, ref_expr: &ast::expr,
};
match def {
ast::def_variant(tid, vid) => {
ast::DefVariant(tid, vid) => {
let variant_info = ty::enum_variant_with_id(ccx.tcx, tid, vid);
if variant_info.args.len() > 0u {
// N-ary variant.
@ -795,7 +795,7 @@ fn trans_def_dps_unadjusted(bcx: @mut Block, ref_expr: &ast::expr,
return bcx;
}
}
ast::def_struct(def_id) => {
ast::DefStruct(def_id) => {
let ty = expr_ty(bcx, ref_expr);
match ty::get(ty).sty {
ty::ty_struct(did, _) if ty::has_dtor(ccx.tcx, did) => {
@ -819,17 +819,17 @@ fn trans_def_dps_unadjusted(bcx: @mut Block, ref_expr: &ast::expr,
}
fn trans_def_datum_unadjusted(bcx: @mut Block,
ref_expr: &ast::expr,
def: ast::def) -> DatumBlock
ref_expr: &ast::Expr,
def: ast::Def) -> DatumBlock
{
let _icx = push_ctxt("trans_def_datum_unadjusted");
let fn_data = match def {
ast::def_fn(did, _) |
ast::def_static_method(did, ast::FromImpl(_), _) => {
ast::DefFn(did, _) |
ast::DefStaticMethod(did, ast::FromImpl(_), _) => {
callee::trans_fn_ref(bcx, did, ref_expr.id)
}
ast::def_static_method(impl_did, ast::FromTrait(trait_did), _) => {
ast::DefStaticMethod(impl_did, ast::FromTrait(trait_did), _) => {
meth::trans_static_method_callee(bcx,
impl_did,
trait_did,
@ -853,7 +853,7 @@ fn trans_def_datum_unadjusted(bcx: @mut Block,
}
}
fn trans_lvalue_unadjusted(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
fn trans_lvalue_unadjusted(bcx: @mut Block, expr: @ast::Expr) -> DatumBlock {
/*!
*
* Translates an lvalue expression, always yielding a by-ref
@ -868,19 +868,19 @@ fn trans_lvalue_unadjusted(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
trace_span!(bcx, expr.span, shorten(bcx.expr_to_str(expr)));
return match expr.node {
ast::expr_paren(e) => {
ast::ExprParen(e) => {
trans_lvalue_unadjusted(bcx, e)
}
ast::expr_path(_) | ast::expr_self => {
ast::ExprPath(_) | ast::ExprSelf => {
trans_def_lvalue(bcx, expr, bcx.def(expr.id))
}
ast::expr_field(base, ident, _) => {
ast::ExprField(base, ident, _) => {
trans_rec_field(bcx, base, ident)
}
ast::expr_index(_, base, idx) => {
ast::ExprIndex(_, base, idx) => {
trans_index(bcx, expr, base, idx)
}
ast::expr_unary(_, ast::deref, base) => {
ast::ExprUnary(_, ast::UnDeref, base) => {
let basedatum = unpack_datum!(bcx, trans_to_datum(bcx, base));
basedatum.deref(bcx, expr, 0)
}
@ -893,7 +893,7 @@ fn trans_lvalue_unadjusted(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
};
fn trans_rec_field(bcx: @mut Block,
base: @ast::expr,
base: @ast::Expr,
field: ast::Ident) -> DatumBlock {
//! Translates `base.field`.
@ -916,9 +916,9 @@ fn trans_lvalue_unadjusted(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
}
fn trans_index(bcx: @mut Block,
index_expr: &ast::expr,
base: @ast::expr,
idx: @ast::expr) -> DatumBlock {
index_expr: &ast::Expr,
base: @ast::Expr,
idx: @ast::Expr) -> DatumBlock {
//! Translates `base[idx]`.
let _icx = push_ctxt("trans_index");
@ -973,18 +973,18 @@ fn trans_lvalue_unadjusted(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
}
fn trans_def_lvalue(bcx: @mut Block,
ref_expr: &ast::expr,
def: ast::def)
ref_expr: &ast::Expr,
def: ast::Def)
-> DatumBlock
{
//! Translates a reference to a path.
let _icx = push_ctxt("trans_def_lvalue");
match def {
ast::def_static(did, _) => {
ast::DefStatic(did, _) => {
let const_ty = expr_ty(bcx, ref_expr);
fn get_val(bcx: @mut Block, did: ast::def_id, const_ty: ty::t)
fn get_val(bcx: @mut Block, did: ast::DefId, const_ty: ty::t)
-> ValueRef {
// For external constants, we don't inline.
if did.crate == ast::LOCAL_CRATE {
@ -1041,11 +1041,11 @@ fn trans_lvalue_unadjusted(bcx: @mut Block, expr: @ast::expr) -> DatumBlock {
}
}
pub fn trans_local_var(bcx: @mut Block, def: ast::def) -> Datum {
pub fn trans_local_var(bcx: @mut Block, def: ast::Def) -> Datum {
let _icx = push_ctxt("trans_local_var");
return match def {
ast::def_upvar(nid, _, _, _) => {
ast::DefUpvar(nid, _, _, _) => {
// Can't move upvars, so this is never a ZeroMemLastUse.
let local_ty = node_id_type(bcx, nid);
match bcx.fcx.llupvars.find(&nid) {
@ -1062,13 +1062,13 @@ pub fn trans_local_var(bcx: @mut Block, def: ast::def) -> Datum {
}
}
}
ast::def_arg(nid, _) => {
ast::DefArg(nid, _) => {
take_local(bcx, bcx.fcx.llargs, nid)
}
ast::def_local(nid, _) | ast::def_binding(nid, _) => {
ast::DefLocal(nid, _) | ast::DefBinding(nid, _) => {
take_local(bcx, bcx.fcx.lllocals, nid)
}
ast::def_self(nid) => {
ast::DefSelf(nid) => {
let self_info: ValSelfData = match bcx.fcx.llself {
Some(ref self_info) => *self_info,
None => {
@ -1137,7 +1137,7 @@ pub fn with_field_tys<R>(tcx: ty::ctxt,
}
Some(node_id) => {
match tcx.def_map.get_copy(&node_id) {
ast::def_variant(enum_id, variant_id) => {
ast::DefVariant(enum_id, variant_id) => {
let variant_info = ty::enum_variant_with_id(
tcx, enum_id, variant_id);
op(variant_info.disr_val,
@ -1162,7 +1162,7 @@ pub fn with_field_tys<R>(tcx: ty::ctxt,
fn trans_rec_or_struct(bcx: @mut Block,
fields: &[ast::Field],
base: Option<@ast::expr>,
base: Option<@ast::Expr>,
expr_span: codemap::Span,
id: ast::NodeId,
dest: Dest) -> @mut Block
@ -1222,7 +1222,7 @@ fn trans_rec_or_struct(bcx: @mut Block,
*/
struct StructBaseInfo {
/// The base expression; will be evaluated after all explicit fields.
expr: @ast::expr,
expr: @ast::Expr,
/// The indices of fields to copy paired with their types.
fields: ~[(uint, ty::t)]
}
@ -1238,7 +1238,7 @@ struct StructBaseInfo {
* which remaining fields are copied; see comments on `StructBaseInfo`.
*/
fn trans_adt(bcx: @mut Block, repr: &adt::Repr, discr: ty::Disr,
fields: &[(uint, @ast::expr)],
fields: &[(uint, @ast::Expr)],
optbase: Option<StructBaseInfo>,
dest: Dest) -> @mut Block {
let _icx = push_ctxt("trans_adt");
@ -1285,7 +1285,7 @@ fn trans_adt(bcx: @mut Block, repr: &adt::Repr, discr: ty::Disr,
}
fn trans_immediate_lit(bcx: @mut Block, expr: @ast::expr,
fn trans_immediate_lit(bcx: @mut Block, expr: @ast::Expr,
lit: ast::lit) -> DatumBlock {
// must not be a string constant, that is a RvalueDpsExpr
let _icx = push_ctxt("trans_immediate_lit");
@ -1294,13 +1294,13 @@ fn trans_immediate_lit(bcx: @mut Block, expr: @ast::expr,
}
fn trans_unary_datum(bcx: @mut Block,
un_expr: &ast::expr,
op: ast::unop,
sub_expr: @ast::expr) -> DatumBlock {
un_expr: &ast::Expr,
op: ast::UnOp,
sub_expr: @ast::Expr) -> DatumBlock {
let _icx = push_ctxt("trans_unary_datum");
// if deref, would be LvalueExpr
assert!(op != ast::deref);
assert!(op != ast::UnDeref);
// if overloaded, would be RvalueDpsExpr
assert!(!bcx.ccx().maps.method_map.contains_key(&un_expr.id));
@ -1309,7 +1309,7 @@ fn trans_unary_datum(bcx: @mut Block,
let sub_ty = expr_ty(bcx, sub_expr);
return match op {
ast::not => {
ast::UnNot => {
let Result {bcx, val} = trans_to_datum(bcx, sub_expr).to_result();
// If this is a boolean type, we must not use the LLVM Not
@ -1327,7 +1327,7 @@ fn trans_unary_datum(bcx: @mut Block,
};
immediate_rvalue_bcx(bcx, llresult, un_ty)
}
ast::neg => {
ast::UnNeg => {
let Result {bcx, val} = trans_to_datum(bcx, sub_expr).to_result();
let llneg = {
if ty::type_is_fp(un_ty) {
@ -1338,15 +1338,15 @@ fn trans_unary_datum(bcx: @mut Block,
};
immediate_rvalue_bcx(bcx, llneg, un_ty)
}
ast::box(_) => {
ast::UnBox(_) => {
trans_boxed_expr(bcx, un_ty, sub_expr, sub_ty,
heap_managed)
}
ast::uniq => {
ast::UnUniq => {
let heap = heap_for_unique(bcx, un_ty);
trans_boxed_expr(bcx, un_ty, sub_expr, sub_ty, heap)
}
ast::deref => {
ast::UnDeref => {
bcx.sess().bug("deref expressions should have been \
translated using trans_lvalue(), not \
trans_unary_datum()")
@ -1355,7 +1355,7 @@ fn trans_unary_datum(bcx: @mut Block,
fn trans_boxed_expr(bcx: @mut Block,
box_ty: ty::t,
contents: @ast::expr,
contents: @ast::Expr,
contents_ty: ty::t,
heap: heap) -> DatumBlock {
let _icx = push_ctxt("trans_boxed_expr");
@ -1379,8 +1379,8 @@ fn trans_unary_datum(bcx: @mut Block,
}
}
fn trans_addr_of(bcx: @mut Block, expr: &ast::expr,
subexpr: @ast::expr) -> DatumBlock {
fn trans_addr_of(bcx: @mut Block, expr: &ast::Expr,
subexpr: @ast::Expr) -> DatumBlock {
let _icx = push_ctxt("trans_addr_of");
let mut bcx = bcx;
let sub_datum = unpack_datum!(bcx, trans_to_datum(bcx, subexpr));
@ -1391,9 +1391,9 @@ fn trans_addr_of(bcx: @mut Block, expr: &ast::expr,
// Important to get types for both lhs and rhs, because one might be _|_
// and the other not.
fn trans_eager_binop(bcx: @mut Block,
binop_expr: &ast::expr,
binop_expr: &ast::Expr,
binop_ty: ty::t,
op: ast::binop,
op: ast::BinOp,
lhs_datum: &Datum,
rhs_datum: &Datum)
-> DatumBlock {
@ -1420,19 +1420,19 @@ fn trans_eager_binop(bcx: @mut Block,
let mut bcx = bcx;
let val = match op {
ast::add => {
ast::BiAdd => {
if is_float { FAdd(bcx, lhs, rhs) }
else { Add(bcx, lhs, rhs) }
}
ast::subtract => {
ast::BiSub => {
if is_float { FSub(bcx, lhs, rhs) }
else { Sub(bcx, lhs, rhs) }
}
ast::mul => {
ast::BiMul => {
if is_float { FMul(bcx, lhs, rhs) }
else { Mul(bcx, lhs, rhs) }
}
ast::div => {
ast::BiDiv => {
if is_float {
FDiv(bcx, lhs, rhs)
} else {
@ -1446,7 +1446,7 @@ fn trans_eager_binop(bcx: @mut Block,
}
}
}
ast::rem => {
ast::BiRem => {
if is_float {
FRem(bcx, lhs, rhs)
} else {
@ -1460,16 +1460,16 @@ fn trans_eager_binop(bcx: @mut Block,
}
}
}
ast::bitor => Or(bcx, lhs, rhs),
ast::bitand => And(bcx, lhs, rhs),
ast::bitxor => Xor(bcx, lhs, rhs),
ast::shl => Shl(bcx, lhs, rhs),
ast::shr => {
ast::BiBitOr => Or(bcx, lhs, rhs),
ast::BiBitAnd => And(bcx, lhs, rhs),
ast::BiBitXor => Xor(bcx, lhs, rhs),
ast::BiShl => Shl(bcx, lhs, rhs),
ast::BiShr => {
if signed {
AShr(bcx, lhs, rhs)
} else { LShr(bcx, lhs, rhs) }
}
ast::eq | ast::ne | ast::lt | ast::ge | ast::le | ast::gt => {
ast::BiEq | ast::BiNe | ast::BiLt | ast::BiGe | ast::BiLe | ast::BiGt => {
if ty::type_is_bot(rhs_t) {
C_bool(false)
} else {
@ -1494,10 +1494,10 @@ fn trans_eager_binop(bcx: @mut Block,
enum lazy_binop_ty { lazy_and, lazy_or }
fn trans_lazy_binop(bcx: @mut Block,
binop_expr: &ast::expr,
binop_expr: &ast::Expr,
op: lazy_binop_ty,
a: @ast::expr,
b: @ast::expr) -> DatumBlock {
a: @ast::Expr,
b: @ast::Expr) -> DatumBlock {
let _icx = push_ctxt("trans_lazy_binop");
let binop_ty = expr_ty(bcx, binop_expr);
let bcx = bcx;
@ -1539,18 +1539,18 @@ fn trans_lazy_binop(bcx: @mut Block,
}
fn trans_binary(bcx: @mut Block,
binop_expr: &ast::expr,
op: ast::binop,
lhs: @ast::expr,
rhs: @ast::expr) -> DatumBlock
binop_expr: &ast::Expr,
op: ast::BinOp,
lhs: @ast::Expr,
rhs: @ast::Expr) -> DatumBlock
{
let _icx = push_ctxt("trans_binary");
match op {
ast::and => {
ast::BiAnd => {
trans_lazy_binop(bcx, binop_expr, lazy_and, lhs, rhs)
}
ast::or => {
ast::BiOr => {
trans_lazy_binop(bcx, binop_expr, lazy_or, lhs, rhs)
}
_ => {
@ -1565,10 +1565,10 @@ fn trans_binary(bcx: @mut Block,
}
fn trans_overloaded_op(bcx: @mut Block,
expr: &ast::expr,
expr: &ast::Expr,
callee_id: ast::NodeId,
rcvr: @ast::expr,
args: ~[@ast::expr],
rcvr: @ast::Expr,
args: ~[@ast::Expr],
ret_ty: ty::t,
dest: Dest)
-> @mut Block {
@ -1642,7 +1642,7 @@ pub fn cast_type_kind(t: ty::t) -> cast_kind {
}
}
fn trans_imm_cast(bcx: @mut Block, expr: @ast::expr,
fn trans_imm_cast(bcx: @mut Block, expr: @ast::Expr,
id: ast::NodeId) -> DatumBlock {
let _icx = push_ctxt("trans_cast");
let ccx = bcx.ccx();
@ -1711,11 +1711,11 @@ fn trans_imm_cast(bcx: @mut Block, expr: @ast::expr,
}
fn trans_assign_op(bcx: @mut Block,
expr: @ast::expr,
expr: @ast::Expr,
callee_id: ast::NodeId,
op: ast::binop,
dst: @ast::expr,
src: @ast::expr) -> @mut Block
op: ast::BinOp,
dst: @ast::Expr,
src: @ast::Expr) -> @mut Block
{
let _icx = push_ctxt("trans_assign_op");
let mut bcx = bcx;

View file

@ -400,8 +400,8 @@ pub fn make_free_glue(bcx: @mut Block, v: ValueRef, t: ty::t) -> @mut Block {
}
}
pub fn trans_struct_drop_flag(bcx: @mut Block, t: ty::t, v0: ValueRef, dtor_did: ast::def_id,
class_did: ast::def_id, substs: &ty::substs) -> @mut Block {
pub fn trans_struct_drop_flag(bcx: @mut Block, t: ty::t, v0: ValueRef, dtor_did: ast::DefId,
class_did: ast::DefId, substs: &ty::substs) -> @mut Block {
let repr = adt::represent_type(bcx.ccx(), t);
let drop_flag = adt::trans_drop_flag_ptr(bcx, repr, v0);
do with_cond(bcx, IsNotNull(bcx, Load(bcx, drop_flag))) |cx| {
@ -438,8 +438,8 @@ pub fn trans_struct_drop_flag(bcx: @mut Block, t: ty::t, v0: ValueRef, dtor_did:
}
}
pub fn trans_struct_drop(mut bcx: @mut Block, t: ty::t, v0: ValueRef, dtor_did: ast::def_id,
class_did: ast::def_id, substs: &ty::substs) -> @mut Block {
pub fn trans_struct_drop(mut bcx: @mut Block, t: ty::t, v0: ValueRef, dtor_did: ast::DefId,
class_did: ast::DefId, substs: &ty::substs) -> @mut Block {
let repr = adt::represent_type(bcx.ccx(), t);
// Find and call the actual destructor

View file

@ -22,8 +22,8 @@ use syntax::ast;
use syntax::ast_map::path_name;
use syntax::ast_util::local_def;
pub fn maybe_instantiate_inline(ccx: @mut CrateContext, fn_id: ast::def_id)
-> ast::def_id {
pub fn maybe_instantiate_inline(ccx: @mut CrateContext, fn_id: ast::DefId)
-> ast::DefId {
let _icx = push_ctxt("maybe_instantiate_inline");
match ccx.external.find(&fn_id) {
Some(&Some(node_id)) => {

View file

@ -138,7 +138,7 @@ pub fn trans_method(ccx: @mut CrateContext,
}
pub fn trans_self_arg(bcx: @mut Block,
base: @ast::expr,
base: @ast::Expr,
temp_cleanups: &mut ~[ValueRef],
mentry: typeck::method_map_entry) -> Result {
let _icx = push_ctxt("impl::trans_self_arg");
@ -155,7 +155,7 @@ pub fn trans_self_arg(bcx: @mut Block,
pub fn trans_method_callee(bcx: @mut Block,
callee_id: ast::NodeId,
this: @ast::expr,
this: @ast::Expr,
mentry: typeck::method_map_entry)
-> Callee {
let _icx = push_ctxt("impl::trans_method_callee");
@ -212,8 +212,8 @@ pub fn trans_method_callee(bcx: @mut Block,
}
pub fn trans_static_method_callee(bcx: @mut Block,
method_id: ast::def_id,
trait_id: ast::def_id,
method_id: ast::DefId,
trait_id: ast::DefId,
callee_id: ast::NodeId)
-> FnData {
let _icx = push_ctxt("impl::trans_static_method_callee");
@ -293,8 +293,8 @@ pub fn trans_static_method_callee(bcx: @mut Block,
}
pub fn method_with_name(ccx: &mut CrateContext,
impl_id: ast::def_id,
name: ast::Ident) -> ast::def_id {
impl_id: ast::DefId,
name: ast::Ident) -> ast::DefId {
let meth_id_opt = ccx.impl_method_cache.find_copy(&(impl_id, name));
match meth_id_opt {
Some(m) => return m,
@ -312,9 +312,9 @@ pub fn method_with_name(ccx: &mut CrateContext,
pub fn trans_monomorphized_callee(bcx: @mut Block,
callee_id: ast::NodeId,
base: @ast::expr,
base: @ast::Expr,
mentry: typeck::method_map_entry,
trait_id: ast::def_id,
trait_id: ast::DefId,
n_method: uint,
vtbl: typeck::vtable_origin)
-> Callee {
@ -368,7 +368,7 @@ pub fn trans_monomorphized_callee(bcx: @mut Block,
}
pub fn combine_impl_and_methods_tps(bcx: @mut Block,
mth_did: ast::def_id,
mth_did: ast::DefId,
callee_id: ast::NodeId,
rcvr_substs: &[ty::t],
rcvr_origins: typeck::vtable_res)
@ -419,7 +419,7 @@ pub fn combine_impl_and_methods_tps(bcx: @mut Block,
pub fn trans_trait_callee(bcx: @mut Block,
callee_id: ast::NodeId,
n_method: uint,
self_expr: @ast::expr)
self_expr: @ast::Expr)
-> Callee {
/*!
* Create a method callee where the method is coming from a trait
@ -580,7 +580,7 @@ pub fn make_vtable(ccx: &mut CrateContext,
}
fn emit_vtable_methods(bcx: @mut Block,
impl_id: ast::def_id,
impl_id: ast::DefId,
substs: &[ty::t],
vtables: typeck::vtable_res)
-> ~[ValueRef] {
@ -621,7 +621,7 @@ fn emit_vtable_methods(bcx: @mut Block,
}
pub fn trans_trait_cast(bcx: @mut Block,
val: @ast::expr,
val: @ast::Expr,
id: ast::NodeId,
dest: expr::Dest,
_store: ty::TraitStore)

View file

@ -35,7 +35,7 @@ use syntax::ast_map::path_name;
use syntax::ast_util::local_def;
pub fn monomorphic_fn(ccx: @mut CrateContext,
fn_id: ast::def_id,
fn_id: ast::DefId,
real_substs: &ty::substs,
vtables: Option<typeck::vtable_res>,
self_vtables: Option<typeck::vtable_param_res>,
@ -296,7 +296,7 @@ pub fn monomorphic_fn(ccx: @mut CrateContext,
}
pub fn make_mono_id(ccx: @mut CrateContext,
item: ast::def_id,
item: ast::DefId,
substs: &param_substs,
param_uses: Option<@~[type_use::type_uses]>) -> mono_id {
// FIXME (possibly #5801): Need a lot of type hints to get

View file

@ -27,7 +27,7 @@ use util::ppaux::ty_to_str;
use std::libc::c_uint;
use std::option::None;
use std::vec;
use syntax::ast::def_id;
use syntax::ast::DefId;
use syntax::ast;
use syntax::ast_map::path_name;
use syntax::parse::token::special_idents;
@ -283,7 +283,8 @@ impl Reflector {
let variants = ty::substd_enum_variants(ccx.tcx, did, substs);
let llptrty = type_of(ccx, t).ptr_to();
let opaquety = ty::get_opaque_ty(ccx.tcx).unwrap();
let opaqueptrty = ty::mk_ptr(ccx.tcx, ty::mt { ty: opaquety, mutbl: ast::m_imm });
let opaqueptrty = ty::mk_ptr(ccx.tcx, ty::mt { ty: opaquety,
mutbl: ast::MutImmutable });
let make_get_disr = || {
let sub_path = bcx.fcx.path + &[path_name(special_idents::anon)];
@ -384,7 +385,7 @@ impl Reflector {
pub fn emit_calls_to_trait_visit_ty(bcx: @mut Block,
t: ty::t,
visitor_val: ValueRef,
visitor_trait_id: def_id)
visitor_trait_id: DefId)
-> @mut Block {
let final = sub_block(bcx, "final");
let tydesc_ty = ty::get_tydesc_ty(bcx.ccx().tcx).unwrap();

View file

@ -158,8 +158,8 @@ impl VecTypes {
}
pub fn trans_fixed_vstore(bcx: @mut Block,
vstore_expr: @ast::expr,
content_expr: &ast::expr,
vstore_expr: @ast::Expr,
content_expr: &ast::Expr,
dest: expr::Dest)
-> @mut Block {
//!
@ -187,8 +187,8 @@ pub fn trans_fixed_vstore(bcx: @mut Block,
}
pub fn trans_slice_vstore(bcx: @mut Block,
vstore_expr: @ast::expr,
content_expr: @ast::expr,
vstore_expr: @ast::Expr,
content_expr: @ast::Expr,
dest: expr::Dest)
-> @mut Block {
//!
@ -205,7 +205,7 @@ pub fn trans_slice_vstore(bcx: @mut Block,
// Handle the &"..." case:
match content_expr.node {
ast::expr_lit(@codemap::Spanned {node: ast::lit_str(s), span: _}) => {
ast::ExprLit(@codemap::Spanned {node: ast::lit_str(s), span: _}) => {
return trans_lit_str(bcx, content_expr, s, dest);
}
_ => {}
@ -222,7 +222,7 @@ pub fn trans_slice_vstore(bcx: @mut Block,
// Arrange for the backing array to be cleaned up.
let fixed_ty = ty::mk_evec(bcx.tcx(),
ty::mt {ty: vt.unit_ty, mutbl: ast::m_mutbl},
ty::mt {ty: vt.unit_ty, mutbl: ast::MutMutable},
ty::vstore_fixed(count));
let llfixed_ty = type_of::type_of(bcx.ccx(), fixed_ty).ptr_to();
let llfixed_casted = BitCast(bcx, llfixed, llfixed_ty);
@ -246,7 +246,7 @@ pub fn trans_slice_vstore(bcx: @mut Block,
}
pub fn trans_lit_str(bcx: @mut Block,
lit_expr: @ast::expr,
lit_expr: @ast::Expr,
str_lit: @str,
dest: Dest)
-> @mut Block {
@ -280,8 +280,8 @@ pub fn trans_lit_str(bcx: @mut Block,
}
pub fn trans_uniq_or_managed_vstore(bcx: @mut Block, heap: heap, vstore_expr: @ast::expr,
content_expr: &ast::expr) -> DatumBlock {
pub fn trans_uniq_or_managed_vstore(bcx: @mut Block, heap: heap, vstore_expr: @ast::Expr,
content_expr: &ast::Expr) -> DatumBlock {
//!
//
// @[...] or ~[...] (also @"..." or ~"...") allocate boxes in the
@ -295,7 +295,7 @@ pub fn trans_uniq_or_managed_vstore(bcx: @mut Block, heap: heap, vstore_expr: @a
match heap {
heap_exchange => {
match content_expr.node {
ast::expr_lit(@codemap::Spanned {
ast::ExprLit(@codemap::Spanned {
node: ast::lit_str(s), span
}) => {
let llptrval = C_cstr(bcx.ccx(), s);
@ -343,8 +343,8 @@ pub fn trans_uniq_or_managed_vstore(bcx: @mut Block, heap: heap, vstore_expr: @a
pub fn write_content(bcx: @mut Block,
vt: &VecTypes,
vstore_expr: @ast::expr,
content_expr: &ast::expr,
vstore_expr: @ast::Expr,
content_expr: &ast::Expr,
dest: Dest)
-> @mut Block {
let _icx = push_ctxt("tvec::write_content");
@ -357,7 +357,7 @@ pub fn write_content(bcx: @mut Block,
let _indenter = indenter();
match content_expr.node {
ast::expr_lit(@codemap::Spanned { node: ast::lit_str(s), _ }) => {
ast::ExprLit(@codemap::Spanned { node: ast::lit_str(s), _ }) => {
match dest {
Ignore => {
return bcx;
@ -371,7 +371,7 @@ pub fn write_content(bcx: @mut Block,
}
}
}
ast::expr_vec(ref elements, _) => {
ast::ExprVec(ref elements, _) => {
match dest {
Ignore => {
for element in elements.iter() {
@ -397,7 +397,7 @@ pub fn write_content(bcx: @mut Block,
}
return bcx;
}
ast::expr_repeat(element, count_expr, _) => {
ast::ExprRepeat(element, count_expr, _) => {
match dest {
Ignore => {
return expr::trans_into(bcx, element, Ignore);
@ -469,7 +469,7 @@ pub fn write_content(bcx: @mut Block,
}
}
pub fn vec_types_from_expr(bcx: @mut Block, vec_expr: &ast::expr) -> VecTypes {
pub fn vec_types_from_expr(bcx: @mut Block, vec_expr: &ast::Expr) -> VecTypes {
let vec_ty = node_id_type(bcx, vec_expr.id);
vec_types(bcx, vec_ty)
}
@ -486,15 +486,15 @@ pub fn vec_types(bcx: @mut Block, vec_ty: ty::t) -> VecTypes {
llunit_size: llunit_size}
}
pub fn elements_required(bcx: @mut Block, content_expr: &ast::expr) -> uint {
pub fn elements_required(bcx: @mut Block, content_expr: &ast::Expr) -> uint {
//! Figure out the number of elements we need to store this content
match content_expr.node {
ast::expr_lit(@codemap::Spanned { node: ast::lit_str(s), _ }) => {
ast::ExprLit(@codemap::Spanned { node: ast::lit_str(s), _ }) => {
s.len()
},
ast::expr_vec(ref es, _) => es.len(),
ast::expr_repeat(_, count_expr, _) => {
ast::ExprVec(ref es, _) => es.len(),
ast::ExprRepeat(_, count_expr, _) => {
ty::eval_repeat_count(&bcx.tcx(), count_expr)
}
_ => bcx.tcx().sess.span_bug(content_expr.span,

View file

@ -324,7 +324,7 @@ pub enum named_ty { a_struct, an_enum }
pub fn llvm_type_name(cx: &CrateContext,
what: named_ty,
did: ast::def_id,
did: ast::DefId,
tps: &[ty::t]) -> ~str {
let name = match what {
a_struct => { "struct" }

View file

@ -57,10 +57,10 @@ pub struct Context {
uses: @mut ~[type_uses]
}
pub fn type_uses_for(ccx: @mut CrateContext, fn_id: def_id, n_tps: uint)
pub fn type_uses_for(ccx: @mut CrateContext, fn_id: DefId, n_tps: uint)
-> @~[type_uses] {
fn store_type_uses(cx: Context, fn_id: def_id) -> @~[type_uses] {
fn store_type_uses(cx: Context, fn_id: DefId) -> @~[type_uses] {
let Context { uses, ccx } = cx;
let uses = @(*uses).clone(); // freeze
ccx.type_use_cache.insert(fn_id, uses);
@ -231,7 +231,7 @@ pub fn type_needs(cx: &Context, use_: uint, ty: ty::t) {
pub fn type_needs_inner(cx: &Context,
use_: uint,
ty: ty::t,
enums_seen: @List<def_id>) {
enums_seen: @List<DefId>) {
do ty::maybe_walk_ty(ty) |ty| {
if ty::type_has_params(ty) {
match ty::get(ty).sty {
@ -311,14 +311,14 @@ pub fn mark_for_method_call(cx: &Context, e_id: NodeId, callee_id: NodeId) {
}
}
pub fn mark_for_expr(cx: &Context, e: &expr) {
pub fn mark_for_expr(cx: &Context, e: &Expr) {
match e.node {
expr_vstore(_, _) | expr_vec(_, _) | expr_struct(*) | expr_tup(_) |
expr_unary(_, box(_), _) | expr_unary(_, uniq, _) |
expr_binary(_, add, _, _) | expr_repeat(*) => {
ExprVstore(_, _) | ExprVec(_, _) | ExprStruct(*) | ExprTup(_) |
ExprUnary(_, UnBox(_), _) | ExprUnary(_, UnUniq, _) |
ExprBinary(_, BiAdd, _, _) | ExprRepeat(*) => {
node_type_needs(cx, use_repr, e.id);
}
expr_cast(base, _) => {
ExprCast(base, _) => {
let result_t = ty::node_id_to_type(cx.ccx.tcx, e.id);
match ty::get(result_t).sty {
ty::ty_trait(*) => {
@ -329,15 +329,15 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
_ => ()
}
}
expr_binary(_, op, lhs, _) => {
ExprBinary(_, op, lhs, _) => {
match op {
eq | lt | le | ne | ge | gt => {
BiEq | BiLt | BiLe | BiNe | BiGe | BiGt => {
node_type_needs(cx, use_tydesc, lhs.id)
}
_ => ()
}
}
expr_path(_) | expr_self => {
ExprPath(_) | ExprSelf => {
let opt_ts = cx.ccx.tcx.node_type_substs.find_copy(&e.id);
for ts in opt_ts.iter() {
let id = ast_util::def_id_of_def(cx.ccx.tcx.def_map.get_copy(&e.id));
@ -347,7 +347,7 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
}
}
}
expr_fn_block(*) => {
ExprFnBlock(*) => {
match ty::ty_closure_sigil(ty::expr_ty(cx.ccx.tcx, e)) {
ast::OwnedSigil => {}
ast::BorrowedSigil | ast::ManagedSigil => {
@ -358,18 +358,18 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
}
}
}
expr_assign(val, _) | expr_assign_op(_, _, val, _) |
expr_ret(Some(val)) => {
ExprAssign(val, _) | ExprAssignOp(_, _, val, _) |
ExprRet(Some(val)) => {
node_type_needs(cx, use_repr, val.id);
}
expr_index(callee_id, base, _) => {
ExprIndex(callee_id, base, _) => {
// FIXME (#2537): could be more careful and not count fields after
// the chosen field.
let base_ty = ty::node_id_to_type(cx.ccx.tcx, base.id);
type_needs(cx, use_repr, ty::type_autoderef(cx.ccx.tcx, base_ty));
mark_for_method_call(cx, e.id, callee_id);
}
expr_field(base, _, _) => {
ExprField(base, _, _) => {
// Method calls are now a special syntactic form,
// so `a.b` should always be a field.
assert!(!cx.ccx.maps.method_map.contains_key(&e.id));
@ -377,16 +377,16 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
let base_ty = ty::node_id_to_type(cx.ccx.tcx, base.id);
type_needs(cx, use_repr, ty::type_autoderef(cx.ccx.tcx, base_ty));
}
expr_log(_, val) => {
ExprLog(_, val) => {
node_type_needs(cx, use_tydesc, val.id);
}
expr_call(f, _, _) => {
ExprCall(f, _, _) => {
let r = ty::ty_fn_args(ty::node_id_to_type(cx.ccx.tcx, f.id));
for a in r.iter() {
type_needs(cx, use_repr, *a);
}
}
expr_method_call(callee_id, rcvr, _, _, _, _) => {
ExprMethodCall(callee_id, rcvr, _, _, _, _) => {
let base_ty = ty::node_id_to_type(cx.ccx.tcx, rcvr.id);
type_needs(cx, use_repr, ty::type_autoderef(cx.ccx.tcx, base_ty));
@ -397,7 +397,7 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
mark_for_method_call(cx, e.id, callee_id);
}
expr_inline_asm(ref ia) => {
ExprInlineAsm(ref ia) => {
for &(_, input) in ia.inputs.iter() {
node_type_needs(cx, use_repr, input.id);
}
@ -406,14 +406,14 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
}
}
expr_paren(e) => mark_for_expr(cx, e),
ExprParen(e) => mark_for_expr(cx, e),
expr_match(*) | expr_block(_) | expr_if(*) | expr_while(*) |
expr_break(_) | expr_again(_) | expr_unary(*) | expr_lit(_) |
expr_mac(_) | expr_addr_of(*) | expr_ret(_) | expr_loop(*) |
expr_do_body(_) => (),
ExprMatch(*) | ExprBlock(_) | ExprIf(*) | ExprWhile(*) |
ExprBreak(_) | ExprAgain(_) | ExprUnary(*) | ExprLit(_) |
ExprMac(_) | ExprAddrOf(*) | ExprRet(_) | ExprLoop(*) |
ExprDoBody(_) => (),
expr_for_loop(*) => fail!("non-desugared expr_for_loop")
ExprForLoop(*) => fail!("non-desugared expr_for_loop")
}
}
@ -421,7 +421,7 @@ struct TypeUseVisitor;
impl<'self> Visitor<&'self Context> for TypeUseVisitor {
fn visit_expr<'a>(&mut self, e:@expr, cx: &'a Context) {
fn visit_expr<'a>(&mut self, e:@Expr, cx: &'a Context) {
visit::walk_expr(self, e, cx);
mark_for_expr(cx, e);
}
@ -431,7 +431,7 @@ impl<'self> Visitor<&'self Context> for TypeUseVisitor {
node_type_needs(cx, use_repr, l.id);
}
fn visit_pat<'a>(&mut self, p:@pat, cx: &'a Context) {
fn visit_pat<'a>(&mut self, p:@Pat, cx: &'a Context) {
visit::walk_pat(self, p, cx);
node_type_needs(cx, use_repr, p.id);
}

File diff suppressed because it is too large Load diff

View file

@ -74,8 +74,8 @@ use util::common::indenter;
pub trait AstConv {
fn tcx(&self) -> ty::ctxt;
fn get_item_ty(&self, id: ast::def_id) -> ty::ty_param_bounds_and_ty;
fn get_trait_def(&self, id: ast::def_id) -> @ty::TraitDef;
fn get_item_ty(&self, id: ast::DefId) -> ty::ty_param_bounds_and_ty;
fn get_trait_def(&self, id: ast::DefId) -> @ty::TraitDef;
// what type should we use when a type is omitted?
fn ty_infer(&self, span: Span) -> ty::t;
@ -132,7 +132,7 @@ pub fn ast_region_to_region<AC:AstConv,RS:RegionScope + Clone + 'static>(
fn ast_path_substs<AC:AstConv,RS:RegionScope + Clone + 'static>(
this: &AC,
rscope: &RS,
def_id: ast::def_id,
def_id: ast::DefId,
decl_generics: &ty::Generics,
self_ty: Option<ty::t>,
path: &ast::Path) -> ty::substs
@ -203,7 +203,7 @@ pub fn ast_path_to_substs_and_ty<AC:AstConv,
RS:RegionScope + Clone + 'static>(
this: &AC,
rscope: &RS,
did: ast::def_id,
did: ast::DefId,
path: &ast::Path)
-> ty_param_substs_and_ty {
let tcx = this.tcx();
@ -220,7 +220,7 @@ pub fn ast_path_to_substs_and_ty<AC:AstConv,
pub fn ast_path_to_trait_ref<AC:AstConv,RS:RegionScope + Clone + 'static>(
this: &AC,
rscope: &RS,
trait_def_id: ast::def_id,
trait_def_id: ast::DefId,
self_ty: Option<ty::t>,
path: &ast::Path) -> @ty::TraitRef
{
@ -243,7 +243,7 @@ pub fn ast_path_to_trait_ref<AC:AstConv,RS:RegionScope + Clone + 'static>(
pub fn ast_path_to_ty<AC:AstConv,RS:RegionScope + Clone + 'static>(
this: &AC,
rscope: &RS,
did: ast::def_id,
did: ast::DefId,
path: &ast::Path)
-> ty_param_substs_and_ty
{
@ -286,7 +286,7 @@ pub fn ast_ty_to_ty<AC:AstConv, RS:RegionScope + Clone + 'static>(
match a_seq_ty.ty.node {
ast::ty_vec(ref mt) => {
let mut mt = ast_mt_to_mt(this, rscope, mt);
if a_seq_ty.mutbl == ast::m_mutbl {
if a_seq_ty.mutbl == ast::MutMutable {
mt = ty::mt { ty: mt.ty, mutbl: a_seq_ty.mutbl };
}
return ty::mk_evec(tcx, mt, vst);
@ -296,11 +296,11 @@ pub fn ast_ty_to_ty<AC:AstConv, RS:RegionScope + Clone + 'static>(
// restriction is enforced in the below case for ty_path, which
// will run after this as long as the path isn't a trait.
match tcx.def_map.find(&id) {
Some(&ast::def_prim_ty(ast::ty_str)) if a_seq_ty.mutbl == ast::m_imm => {
Some(&ast::DefPrimTy(ast::ty_str)) if a_seq_ty.mutbl == ast::MutImmutable => {
check_path_args(tcx, path, NO_TPS | NO_REGIONS);
return ty::mk_estr(tcx, vst);
}
Some(&ast::def_trait(trait_def_id)) => {
Some(&ast::DefTrait(trait_def_id)) => {
let result = ast_path_to_trait_ref(
this, rscope, trait_def_id, None, path);
let trait_store = match vst {
@ -430,14 +430,14 @@ pub fn ast_ty_to_ty<AC:AstConv, RS:RegionScope + Clone + 'static>(
// Kind bounds on path types are only supported for traits.
match a_def {
// But don't emit the error if the user meant to do a trait anyway.
ast::def_trait(*) => { },
ast::DefTrait(*) => { },
_ if bounds.is_some() =>
tcx.sess.span_err(ast_ty.span,
"kind bounds can only be used on trait types"),
_ => { },
}
match a_def {
ast::def_trait(_) => {
ast::DefTrait(_) => {
let path_str = path_to_str(path, tcx.sess.intr());
tcx.sess.span_err(
ast_ty.span,
@ -446,10 +446,10 @@ pub fn ast_ty_to_ty<AC:AstConv, RS:RegionScope + Clone + 'static>(
path_str, path_str, path_str, path_str));
ty::mk_err()
}
ast::def_ty(did) | ast::def_struct(did) => {
ast::DefTy(did) | ast::DefStruct(did) => {
ast_path_to_ty(this, rscope, did, path).ty
}
ast::def_prim_ty(nty) => {
ast::DefPrimTy(nty) => {
match nty {
ast::ty_bool => {
check_path_args(tcx, path, NO_TPS | NO_REGIONS);
@ -475,11 +475,11 @@ pub fn ast_ty_to_ty<AC:AstConv, RS:RegionScope + Clone + 'static>(
}
}
}
ast::def_ty_param(id, n) => {
ast::DefTyParam(id, n) => {
check_path_args(tcx, path, NO_TPS | NO_REGIONS);
ty::mk_param(tcx, n, id)
}
ast::def_self_ty(id) => {
ast::DefSelfTy(id) => {
// n.b.: resolve guarantees that the this type only appears in a
// trait, which we rely upon in various places when creating
// substs
@ -684,7 +684,7 @@ fn ty_of_method_or_bare_fn<AC:AstConv,RS:RegionScope + Clone + 'static>(
ast::sty_uniq => {
Some(ty::mk_uniq(this.tcx(),
ty::mt {ty: self_info.untransformed_self_ty,
mutbl: ast::m_imm}))
mutbl: ast::MutImmutable}))
}
}
}
@ -788,7 +788,7 @@ fn conv_builtin_bounds(tcx: ty::ctxt, ast_bounds: &Option<OptVec<ast::TyParamBou
match *ast_bound {
ast::TraitTyParamBound(ref b) => {
match lookup_def_tcx(tcx, b.path.span, b.ref_id) {
ast::def_trait(trait_did) => {
ast::DefTrait(trait_did) => {
if ty::try_add_builtin_trait(tcx, trait_did,
&mut builtin_bounds) {
loop; // success

View file

@ -25,9 +25,9 @@ use syntax::codemap::Span;
use syntax::print::pprust;
pub fn check_match(fcx: @mut FnCtxt,
expr: @ast::expr,
discrim: @ast::expr,
arms: &[ast::arm]) {
expr: @ast::Expr,
discrim: @ast::Expr,
arms: &[ast::Arm]) {
let tcx = fcx.ccx.tcx;
let discrim_ty = fcx.infcx().next_ty_var();
@ -105,8 +105,8 @@ pub struct pat_ctxt {
map: PatIdMap,
}
pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: &ast::Path,
subpats: &Option<~[@ast::pat]>, expected: ty::t) {
pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::Pat, path: &ast::Path,
subpats: &Option<~[@ast::Pat]>, expected: ty::t) {
// Typecheck the path.
let fcx = pcx.fcx;
@ -286,9 +286,9 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: &ast::Path,
pub fn check_struct_pat_fields(pcx: &pat_ctxt,
span: Span,
path: &ast::Path,
fields: &[ast::field_pat],
fields: &[ast::FieldPat],
class_fields: ~[ty::field_ty],
class_id: ast::def_id,
class_id: ast::DefId,
substitutions: &ty::substs,
etc: bool) {
let tcx = pcx.fcx.ccx.tcx;
@ -340,8 +340,8 @@ pub fn check_struct_pat_fields(pcx: &pat_ctxt,
pub fn check_struct_pat(pcx: &pat_ctxt, pat_id: ast::NodeId, span: Span,
expected: ty::t, path: &ast::Path,
fields: &[ast::field_pat], etc: bool,
struct_id: ast::def_id,
fields: &[ast::FieldPat], etc: bool,
struct_id: ast::DefId,
substitutions: &ty::substs) {
let fcx = pcx.fcx;
let tcx = pcx.fcx.ccx.tcx;
@ -350,11 +350,11 @@ pub fn check_struct_pat(pcx: &pat_ctxt, pat_id: ast::NodeId, span: Span,
// Check to ensure that the struct is the one specified.
match tcx.def_map.find(&pat_id) {
Some(&ast::def_struct(supplied_def_id))
Some(&ast::DefStruct(supplied_def_id))
if supplied_def_id == struct_id => {
// OK.
}
Some(&ast::def_struct(*)) | Some(&ast::def_variant(*)) => {
Some(&ast::DefStruct(*)) | Some(&ast::DefVariant(*)) => {
let name = pprust::path_to_str(path, tcx.sess.intr());
tcx.sess.span_err(span,
fmt!("mismatched types: expected `%s` but found `%s`",
@ -375,16 +375,16 @@ pub fn check_struct_like_enum_variant_pat(pcx: &pat_ctxt,
span: Span,
expected: ty::t,
path: &ast::Path,
fields: &[ast::field_pat],
fields: &[ast::FieldPat],
etc: bool,
enum_id: ast::def_id,
enum_id: ast::DefId,
substitutions: &ty::substs) {
let fcx = pcx.fcx;
let tcx = pcx.fcx.ccx.tcx;
// Find the variant that was specified.
match tcx.def_map.find(&pat_id) {
Some(&ast::def_variant(found_enum_id, variant_id))
Some(&ast::DefVariant(found_enum_id, variant_id))
if found_enum_id == enum_id => {
// Get the struct fields from this struct-like enum variant.
let class_fields = ty::lookup_struct_fields(tcx, variant_id);
@ -392,7 +392,7 @@ pub fn check_struct_like_enum_variant_pat(pcx: &pat_ctxt,
check_struct_pat_fields(pcx, span, path, fields, class_fields,
variant_id, substitutions, etc);
}
Some(&ast::def_struct(*)) | Some(&ast::def_variant(*)) => {
Some(&ast::DefStruct(*)) | Some(&ast::DefVariant(*)) => {
let name = pprust::path_to_str(path, tcx.sess.intr());
tcx.sess.span_err(span,
fmt!("mismatched types: expected `%s` but \
@ -408,19 +408,19 @@ pub fn check_struct_like_enum_variant_pat(pcx: &pat_ctxt,
// Pattern checking is top-down rather than bottom-up so that bindings get
// their types immediately.
pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
pub fn check_pat(pcx: &pat_ctxt, pat: @ast::Pat, expected: ty::t) {
let fcx = pcx.fcx;
let tcx = pcx.fcx.ccx.tcx;
match pat.node {
ast::pat_wild => {
ast::PatWild => {
fcx.write_ty(pat.id, expected);
}
ast::pat_lit(lt) => {
ast::PatLit(lt) => {
check_expr_has_type(fcx, lt, expected);
fcx.write_ty(pat.id, fcx.expr_ty(lt));
}
ast::pat_range(begin, end) => {
ast::PatRange(begin, end) => {
check_expr_has_type(fcx, begin, expected);
check_expr_has_type(fcx, end, expected);
let b_ty =
@ -451,18 +451,18 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
}
fcx.write_ty(pat.id, b_ty);
}
ast::pat_enum(*) |
ast::pat_ident(*) if pat_is_const(tcx.def_map, pat) => {
ast::PatEnum(*) |
ast::PatIdent(*) if pat_is_const(tcx.def_map, pat) => {
let const_did = ast_util::def_id_of_def(tcx.def_map.get_copy(&pat.id));
let const_tpt = ty::lookup_item_type(tcx, const_did);
demand::suptype(fcx, pat.span, expected, const_tpt.ty);
fcx.write_ty(pat.id, const_tpt.ty);
}
ast::pat_ident(bm, ref name, sub) if pat_is_binding(tcx.def_map, pat) => {
ast::PatIdent(bm, ref name, sub) if pat_is_binding(tcx.def_map, pat) => {
let typ = fcx.local_ty(pat.span, pat.id);
match bm {
ast::bind_by_ref(mutbl) => {
ast::BindByRef(mutbl) => {
// if the binding is like
// ref x | ref const x | ref mut x
// then the type of x is &M T where M is the mutability
@ -475,7 +475,7 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
demand::eqtype(fcx, pat.span, region_ty, typ);
}
// otherwise the type of x is the expected type T
ast::bind_infer => {
ast::BindInfer => {
demand::eqtype(fcx, pat.span, expected, typ);
}
}
@ -494,13 +494,13 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
_ => ()
}
}
ast::pat_ident(_, ref path, _) => {
ast::PatIdent(_, ref path, _) => {
check_pat_variant(pcx, pat, path, &Some(~[]), expected);
}
ast::pat_enum(ref path, ref subpats) => {
ast::PatEnum(ref path, ref subpats) => {
check_pat_variant(pcx, pat, path, subpats, expected);
}
ast::pat_struct(ref path, ref fields, etc) => {
ast::PatStruct(ref path, ref fields, etc) => {
// Grab the class data that we care about.
let structure = structure_of(fcx, pat.span, expected);
let mut error_happened = false;
@ -524,7 +524,7 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
Some(expected), ~"a structure pattern",
None);
match tcx.def_map.find(&pat.id) {
Some(&ast::def_struct(supplied_def_id)) => {
Some(&ast::DefStruct(supplied_def_id)) => {
check_struct_pat(pcx, pat.id, pat.span, ty::mk_err(), path, *fields, etc,
supplied_def_id,
&ty::substs { self_ty: None, tps: ~[], regions: ty::ErasedRegions} );
@ -542,7 +542,7 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
fcx.write_ty(pat.id, expected);
}
}
ast::pat_tup(ref elts) => {
ast::PatTup(ref elts) => {
let s = structure_of(fcx, pat.span, expected);
let e_count = elts.len();
match *s {
@ -572,16 +572,16 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
}
}
}
ast::pat_box(inner) => {
ast::PatBox(inner) => {
check_pointer_pat(pcx, Managed, inner, pat.id, pat.span, expected);
}
ast::pat_uniq(inner) => {
ast::PatUniq(inner) => {
check_pointer_pat(pcx, Send, inner, pat.id, pat.span, expected);
}
ast::pat_region(inner) => {
ast::PatRegion(inner) => {
check_pointer_pat(pcx, Borrowed, inner, pat.id, pat.span, expected);
}
ast::pat_vec(ref before, slice, ref after) => {
ast::PatVec(ref before, slice, ref after) => {
let default_region_var =
fcx.infcx().next_region_var(
infer::PatternRegion(pat.span));
@ -649,7 +649,7 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
// Helper function to check @, ~ and & patterns
pub fn check_pointer_pat(pcx: &pat_ctxt,
pointer_kind: PointerKind,
inner: @ast::pat,
inner: @ast::Pat,
pat_id: ast::NodeId,
span: Span,
expected: ty::t) {

View file

@ -57,7 +57,7 @@ pub fn eqtype(fcx: @mut FnCtxt, sp: Span, expected: ty::t, actual: ty::t) {
pub fn coerce(fcx: @mut FnCtxt,
sp: Span,
expected: ty::t,
expr: @ast::expr) {
expr: @ast::Expr) {
let expr_ty = fcx.expr_ty(expr);
match fcx.mk_assignty(expr, expr_ty, expected) {
result::Ok(()) => { /* ok */ }

View file

@ -100,9 +100,9 @@ use std::hashmap::HashSet;
use std::result;
use std::vec;
use extra::list::Nil;
use syntax::ast::{def_id, sty_value, sty_region, sty_box};
use syntax::ast::{DefId, sty_value, sty_region, sty_box};
use syntax::ast::{sty_uniq, sty_static, NodeId};
use syntax::ast::{m_mutbl, m_imm};
use syntax::ast::{MutMutable, MutImmutable};
use syntax::ast;
use syntax::ast_map;
@ -122,8 +122,8 @@ pub fn lookup(
fcx: @mut FnCtxt,
// In a call `a.b::<X, Y, ...>(...)`:
expr: @ast::expr, // The expression `a.b(...)`.
self_expr: @ast::expr, // The expression `a`.
expr: @ast::Expr, // The expression `a.b(...)`.
self_expr: @ast::Expr, // The expression `a`.
callee_id: NodeId, /* Where to store `a.b`'s type,
* also the scope of the call */
m_name: ast::Ident, // The ident `b`.
@ -170,12 +170,12 @@ pub fn lookup(
pub struct LookupContext<'self> {
fcx: @mut FnCtxt,
expr: @ast::expr,
self_expr: @ast::expr,
expr: @ast::Expr,
self_expr: @ast::Expr,
callee_id: NodeId,
m_name: ast::Ident,
supplied_tps: &'self [ty::t],
impl_dups: @mut HashSet<def_id>,
impl_dups: @mut HashSet<DefId>,
inherent_candidates: @mut ~[Candidate],
extension_candidates: @mut ~[Candidate],
deref_args: check::DerefArgs,
@ -205,7 +205,7 @@ pub struct Candidate {
/// because traits are not types, this is a pain to do.
#[deriving(Clone)]
enum RcvrMatchCondition {
RcvrMatchesIfObject(ast::def_id),
RcvrMatchesIfObject(ast::DefId),
RcvrMatchesIfSubtype(ty::t)
}
@ -371,7 +371,7 @@ impl<'self> LookupContext<'self> {
// to a trait and its supertraits.
fn get_method_index(&self,
trait_ref: @TraitRef,
subtrait_id: ast::def_id,
subtrait_id: ast::DefId,
n_method: uint) -> uint {
let tcx = self.tcx();
@ -395,7 +395,7 @@ impl<'self> LookupContext<'self> {
fn push_inherent_candidates_from_object(&self,
did: def_id,
did: DefId,
substs: &ty::substs) {
debug!("push_inherent_candidates_from_object(did=%s, substs=%s)",
self.did_to_str(did),
@ -468,7 +468,7 @@ impl<'self> LookupContext<'self> {
fn push_inherent_candidates_from_self(&self,
self_ty: ty::t,
did: def_id) {
did: DefId) {
let tcx = self.tcx();
let trait_ref = ty::lookup_trait_def(tcx, did).trait_ref;
@ -537,7 +537,7 @@ impl<'self> LookupContext<'self> {
}
fn push_inherent_impl_candidates_for_type(&self, did: def_id) {
fn push_inherent_impl_candidates_for_type(&self, did: DefId) {
// Read the inherent implementation candidates for this type from the
// metadata if necessary.
ty::populate_implementations_for_type_if_necessary(self.tcx(), did);
@ -686,7 +686,7 @@ impl<'self> LookupContext<'self> {
// the default method code fails when you try to reborrow
// because it is not handling types correctly. In lieu of
// fixing that, I am introducing this horrible hack. - ndm
self_mt.mutbl == m_imm && ty::type_is_self(self_mt.ty)
self_mt.mutbl == MutImmutable && ty::type_is_self(self_mt.ty)
}
}
@ -708,7 +708,7 @@ impl<'self> LookupContext<'self> {
ty_evec(mt, vstore_fixed(_)) => {
// First try to borrow to a slice
let entry = self.search_for_some_kind_of_autorefd_method(
AutoBorrowVec, autoderefs, [m_imm, m_mutbl],
AutoBorrowVec, autoderefs, [MutImmutable, MutMutable],
|m,r| ty::mk_evec(tcx,
ty::mt {ty:mt.ty, mutbl:m},
vstore_slice(r)));
@ -717,7 +717,7 @@ impl<'self> LookupContext<'self> {
// Then try to borrow to a slice *and* borrow a pointer.
self.search_for_some_kind_of_autorefd_method(
AutoBorrowVecRef, autoderefs, [m_imm, m_mutbl],
AutoBorrowVecRef, autoderefs, [MutImmutable, MutMutable],
|m,r| {
let slice_ty = ty::mk_evec(tcx,
ty::mt {ty:mt.ty, mutbl:m},
@ -727,7 +727,7 @@ impl<'self> LookupContext<'self> {
// to a temporary pointer (the borrowed
// slice), so any update the callee makes to
// it can't be observed.
ty::mk_rptr(tcx, r, ty::mt {ty:slice_ty, mutbl:m_imm})
ty::mk_rptr(tcx, r, ty::mt {ty:slice_ty, mutbl:MutImmutable})
})
}
@ -735,13 +735,13 @@ impl<'self> LookupContext<'self> {
ty_estr(vstore_uniq) |
ty_estr(vstore_fixed(_)) => {
let entry = self.search_for_some_kind_of_autorefd_method(
AutoBorrowVec, autoderefs, [m_imm],
AutoBorrowVec, autoderefs, [MutImmutable],
|_m,r| ty::mk_estr(tcx, vstore_slice(r)));
if entry.is_some() { return entry; }
self.search_for_some_kind_of_autorefd_method(
AutoBorrowVecRef, autoderefs, [m_imm],
AutoBorrowVecRef, autoderefs, [MutImmutable],
|m,r| {
let slice_ty = ty::mk_estr(tcx, vstore_slice(r));
ty::mk_rptr(tcx, r, ty::mt {ty:slice_ty, mutbl:m})
@ -752,7 +752,7 @@ impl<'self> LookupContext<'self> {
// Coerce ~/@/&Trait instances to &Trait.
self.search_for_some_kind_of_autorefd_method(
AutoBorrowObj, autoderefs, [m_imm, m_mutbl],
AutoBorrowObj, autoderefs, [MutImmutable, MutMutable],
|trt_mut, reg| {
ty::mk_trait(tcx, trt_did, trt_substs.clone(),
RegionTraitStore(reg), trt_mut, b)
@ -787,7 +787,7 @@ impl<'self> LookupContext<'self> {
ty_float(*) | ty_enum(*) | ty_ptr(*) | ty_struct(*) | ty_tup(*) |
ty_estr(*) | ty_evec(*) | ty_trait(*) | ty_closure(*) => {
self.search_for_some_kind_of_autorefd_method(
AutoPtr, autoderefs, [m_imm, m_mutbl],
AutoPtr, autoderefs, [MutImmutable, MutMutable],
|m,r| ty::mk_rptr(tcx, r, ty::mt {ty:self_ty, mutbl:m}))
}
@ -803,10 +803,10 @@ impl<'self> LookupContext<'self> {
fn search_for_some_kind_of_autorefd_method(
&self,
kind: &fn(Region, ast::mutability) -> ty::AutoRef,
kind: &fn(Region, ast::Mutability) -> ty::AutoRef,
autoderefs: uint,
mutbls: &[ast::mutability],
mk_autoref_ty: &fn(ast::mutability, ty::Region) -> ty::t)
mutbls: &[ast::Mutability],
mk_autoref_ty: &fn(ast::Mutability, ty::Region) -> ty::t)
-> Option<method_map_entry> {
// This is hokey. We should have mutability inference as a
// variable. But for now, try &const, then &, then &mut:
@ -1050,7 +1050,7 @@ impl<'self> LookupContext<'self> {
fn construct_transformed_self_ty_for_object(
&self,
trait_def_id: ast::def_id,
trait_def_id: ast::DefId,
rcvr_substs: &ty::substs,
method_ty: &ty::Method) -> ty::t
{
@ -1252,7 +1252,7 @@ impl<'self> LookupContext<'self> {
}
};
fn rcvr_matches_object(self_did: ast::def_id,
fn rcvr_matches_object(self_did: ast::DefId,
candidate: &Candidate) -> bool {
match candidate.rcvr_match_condition {
RcvrMatchesIfObject(desired_did) => {
@ -1277,8 +1277,8 @@ impl<'self> LookupContext<'self> {
}
}
fn mutability_matches(self_mutbl: ast::mutability,
candidate_mutbl: ast::mutability)
fn mutability_matches(self_mutbl: ast::Mutability,
candidate_mutbl: ast::Mutability)
-> bool {
//! True if `self_mutbl <: candidate_mutbl`
self_mutbl == candidate_mutbl
@ -1299,7 +1299,7 @@ impl<'self> LookupContext<'self> {
}
}
fn report_static_candidate(&self, idx: uint, did: def_id) {
fn report_static_candidate(&self, idx: uint, did: DefId) {
let span = if did.crate == ast::LOCAL_CRATE {
match self.tcx().items.find(&did.node) {
Some(&ast_map::node_method(m, _, _)) => m.span,
@ -1315,7 +1315,7 @@ impl<'self> LookupContext<'self> {
ty::item_path_str(self.tcx(), did)));
}
fn report_param_candidate(&self, idx: uint, did: def_id) {
fn report_param_candidate(&self, idx: uint, did: DefId) {
self.tcx().sess.span_note(
self.expr.span,
fmt!("candidate #%u derives from the bound `%s`",
@ -1323,7 +1323,7 @@ impl<'self> LookupContext<'self> {
ty::item_path_str(self.tcx(), did)));
}
fn report_trait_candidate(&self, idx: uint, did: def_id) {
fn report_trait_candidate(&self, idx: uint, did: DefId) {
self.tcx().sess.span_note(
self.expr.span,
fmt!("candidate #%u derives from the type of the receiver, \
@ -1351,7 +1351,7 @@ impl<'self> LookupContext<'self> {
cand.origin)
}
fn did_to_str(&self, did: def_id) -> ~str {
fn did_to_str(&self, did: DefId) -> ~str {
ty::item_path_str(self.tcx(), did)
}

View file

@ -288,7 +288,7 @@ pub fn blank_fn_ctxt(ccx: @mut CrateCtxt,
}
impl ExprTyProvider for FnCtxt {
fn expr_ty(&self, ex: &ast::expr) -> ty::t {
fn expr_ty(&self, ex: &ast::Expr) -> ty::t {
self.expr_ty(ex)
}
@ -371,9 +371,9 @@ impl Visitor<()> for GatherLocalsVisitor {
}
// Add pattern bindings.
fn visit_pat(&mut self, p:@ast::pat, _:()) {
fn visit_pat(&mut self, p:@ast::Pat, _:()) {
match p.node {
ast::pat_ident(_, ref path, _)
ast::PatIdent(_, ref path, _)
if pat_util::pat_is_binding(self.fcx.ccx.tcx.def_map, p) => {
self.assign(p.id, None);
debug!("Pattern binding %s is assigned to %s",
@ -657,11 +657,11 @@ pub fn check_item(ccx: @mut CrateCtxt, it: @ast::item) {
impl AstConv for FnCtxt {
fn tcx(&self) -> ty::ctxt { self.ccx.tcx }
fn get_item_ty(&self, id: ast::def_id) -> ty::ty_param_bounds_and_ty {
fn get_item_ty(&self, id: ast::DefId) -> ty::ty_param_bounds_and_ty {
ty::lookup_item_type(self.tcx(), id)
}
fn get_trait_def(&self, id: ast::def_id) -> @ty::TraitDef {
fn get_trait_def(&self, id: ast::DefId) -> @ty::TraitDef {
ty::lookup_trait_def(self.tcx(), id)
}
@ -800,11 +800,11 @@ impl FnCtxt {
ast_ty_to_ty(self, self, ast_t)
}
pub fn pat_to_str(&self, pat: @ast::pat) -> ~str {
pub fn pat_to_str(&self, pat: @ast::Pat) -> ~str {
pat.repr(self.tcx())
}
pub fn expr_ty(&self, ex: &ast::expr) -> ty::t {
pub fn expr_ty(&self, ex: &ast::Expr) -> ty::t {
match self.inh.node_types.find(&ex.id) {
Some(&t) => t,
None => {
@ -867,7 +867,7 @@ impl FnCtxt {
}
pub fn mk_assignty(&self,
expr: @ast::expr,
expr: @ast::Expr,
sub: ty::t,
sup: ty::t)
-> Result<(), ty::type_err> {
@ -1040,8 +1040,8 @@ pub fn check_lit(fcx: @mut FnCtxt, lit: @ast::lit) -> ty::t {
}
pub fn valid_range_bounds(ccx: @mut CrateCtxt,
from: @ast::expr,
to: @ast::expr)
from: @ast::Expr,
to: @ast::Expr)
-> Option<bool> {
match const_eval::compare_lit_exprs(ccx.tcx, from, to) {
Some(val) => Some(val <= 0),
@ -1050,7 +1050,7 @@ pub fn valid_range_bounds(ccx: @mut CrateCtxt,
}
pub fn check_expr_has_type(
fcx: @mut FnCtxt, expr: @ast::expr,
fcx: @mut FnCtxt, expr: @ast::Expr,
expected: ty::t) {
do check_expr_with_unifier(fcx, expr, Some(expected)) {
demand::suptype(fcx, expr.span, expected, fcx.expr_ty(expr));
@ -1058,7 +1058,7 @@ pub fn check_expr_has_type(
}
pub fn check_expr_coercable_to_type(
fcx: @mut FnCtxt, expr: @ast::expr,
fcx: @mut FnCtxt, expr: @ast::Expr,
expected: ty::t) {
do check_expr_with_unifier(fcx, expr, Some(expected)) {
demand::coerce(fcx, expr.span, expected, expr)
@ -1066,18 +1066,18 @@ pub fn check_expr_coercable_to_type(
}
pub fn check_expr_with_hint(
fcx: @mut FnCtxt, expr: @ast::expr,
fcx: @mut FnCtxt, expr: @ast::Expr,
expected: ty::t) {
check_expr_with_unifier(fcx, expr, Some(expected), || ())
}
pub fn check_expr_with_opt_hint(
fcx: @mut FnCtxt, expr: @ast::expr,
fcx: @mut FnCtxt, expr: @ast::Expr,
expected: Option<ty::t>) {
check_expr_with_unifier(fcx, expr, expected, || ())
}
pub fn check_expr(fcx: @mut FnCtxt, expr: @ast::expr) {
pub fn check_expr(fcx: @mut FnCtxt, expr: @ast::Expr) {
check_expr_with_unifier(fcx, expr, None, || ())
}
@ -1088,7 +1088,7 @@ pub fn check_expr(fcx: @mut FnCtxt, expr: @ast::expr) {
pub fn impl_self_ty(vcx: &VtableContext,
location_info: &LocationInfo, // (potential) receiver for
// this impl
did: ast::def_id)
did: ast::DefId)
-> ty_param_substs_and_ty {
let tcx = vcx.tcx();
@ -1114,7 +1114,7 @@ pub fn impl_self_ty(vcx: &VtableContext,
// Only for fields! Returns <none> for methods>
// Indifferent to privacy flags
pub fn lookup_field_ty(tcx: ty::ctxt,
class_id: ast::def_id,
class_id: ast::DefId,
items: &[ty::field_ty],
fieldname: ast::Ident,
substs: &ty::substs) -> Option<ty::t> {
@ -1151,7 +1151,7 @@ fn generics_of_static_method_container(type_context: ty::ctxt,
// locations.
fn check_type_parameter_positions_in_path(function_context: @mut FnCtxt,
path: &ast::Path,
def: ast::def) {
def: ast::Def) {
// We only care about checking the case in which the path has two or
// more segments.
if path.segments.len() < 2 {
@ -1193,7 +1193,7 @@ fn check_type_parameter_positions_in_path(function_context: @mut FnCtxt,
// ensure that the segment of the path which names the trait or
// implementation (the penultimate segment) is annotated with the
// right number of type parameters.
ast::def_static_method(_, provenance, _) => {
ast::DefStaticMethod(_, provenance, _) => {
let generics =
generics_of_static_method_container(function_context.ccx.tcx,
provenance);
@ -1299,7 +1299,7 @@ fn check_type_parameter_positions_in_path(function_context: @mut FnCtxt,
/// that there are actually multiple representations for both `ty_err` and
/// `ty_bot`, so avoid that when err and bot need to be handled differently.
pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
expr: @ast::expr,
expr: @ast::Expr,
expected: Option<ty::t>,
unifier: &fn()) {
debug!(">> typechecking");
@ -1308,8 +1308,8 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx: @mut FnCtxt,
sp: Span,
method_fn_ty: ty::t,
callee_expr: @ast::expr,
args: &[@ast::expr],
callee_expr: @ast::Expr,
args: &[@ast::Expr],
sugar: ast::CallSugar,
deref_args: DerefArgs) -> ty::t
{
@ -1338,8 +1338,8 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx: @mut FnCtxt,
sp: Span,
fn_inputs: &[ty::t],
callee_expr: @ast::expr,
args: &[@ast::expr],
callee_expr: @ast::Expr,
args: &[@ast::Expr],
sugar: ast::CallSugar,
deref_args: DerefArgs)
{
@ -1403,8 +1403,8 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
for (i, arg) in args.iter().enumerate() {
let is_block = match arg.node {
ast::expr_fn_block(*) |
ast::expr_do_body(*) => true,
ast::ExprFnBlock(*) |
ast::ExprDoBody(*) => true,
_ => false
};
@ -1439,8 +1439,8 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
// A generic function for checking assignment expressions
fn check_assignment(fcx: @mut FnCtxt,
lhs: @ast::expr,
rhs: @ast::expr,
lhs: @ast::Expr,
rhs: @ast::Expr,
id: ast::NodeId) {
check_expr(fcx, lhs);
let lhs_type = fcx.expr_ty(lhs);
@ -1450,7 +1450,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
}
fn write_call(fcx: @mut FnCtxt,
call_expr: @ast::expr,
call_expr: @ast::Expr,
output: ty::t,
sugar: ast::CallSugar) {
let ret_ty = match sugar {
@ -1472,9 +1472,9 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
// A generic function for doing all of the checking for call expressions
fn check_call(fcx: @mut FnCtxt,
callee_id: ast::NodeId,
call_expr: @ast::expr,
f: @ast::expr,
args: &[@ast::expr],
call_expr: @ast::Expr,
f: @ast::Expr,
args: &[@ast::Expr],
sugar: ast::CallSugar) {
// Index expressions need to be handled separately, to inform them
// that they appear in call position.
@ -1534,10 +1534,10 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
// Checks a method call.
fn check_method_call(fcx: @mut FnCtxt,
callee_id: ast::NodeId,
expr: @ast::expr,
rcvr: @ast::expr,
expr: @ast::Expr,
rcvr: @ast::Expr,
method_name: ast::Ident,
args: &[@ast::expr],
args: &[@ast::Expr],
tps: &[ast::Ty],
sugar: ast::CallSugar) {
check_expr(fcx, rcvr);
@ -1593,9 +1593,9 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
// A generic function for checking the then and else in an if
// or if-check
fn check_then_else(fcx: @mut FnCtxt,
cond_expr: @ast::expr,
cond_expr: @ast::Expr,
then_blk: &ast::Block,
opt_else_expr: Option<@ast::expr>,
opt_else_expr: Option<@ast::Expr>,
id: ast::NodeId,
sp: Span,
expected: Option<ty::t>) {
@ -1633,11 +1633,11 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fn lookup_op_method(fcx: @mut FnCtxt,
callee_id: ast::NodeId,
op_ex: @ast::expr,
self_ex: @ast::expr,
op_ex: @ast::Expr,
self_ex: @ast::Expr,
self_t: ty::t,
opname: ast::Ident,
args: ~[@ast::expr],
args: ~[@ast::Expr],
deref_args: DerefArgs,
autoderef_receiver: AutoderefReceiverFlag,
unbound_method: &fn(),
@ -1671,10 +1671,10 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
// could be either a expr_binop or an expr_assign_binop
fn check_binop(fcx: @mut FnCtxt,
callee_id: ast::NodeId,
expr: @ast::expr,
op: ast::binop,
lhs: @ast::expr,
rhs: @ast::expr,
expr: @ast::Expr,
op: ast::BinOp,
lhs: @ast::Expr,
rhs: @ast::Expr,
// Used only in the error case
expected_result: Option<ty::t>,
allow_overloaded_operators: AllowOverloadedOperatorsFlag
@ -1701,8 +1701,8 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
check_expr_has_type(fcx, rhs, tvar);
let result_t = match op {
ast::eq | ast::ne | ast::lt | ast::le | ast::ge |
ast::gt => {
ast::BiEq | ast::BiNe | ast::BiLt | ast::BiLe | ast::BiGe |
ast::BiGt => {
ty::mk_bool()
}
_ => {
@ -1714,7 +1714,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
return;
}
if op == ast::or || op == ast::and {
if op == ast::BiOr || op == ast::BiAnd {
// This is an error; one of the operands must have the wrong
// type
fcx.write_error(expr.id);
@ -1759,11 +1759,11 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fn check_user_binop(fcx: @mut FnCtxt,
callee_id: ast::NodeId,
ex: @ast::expr,
lhs_expr: @ast::expr,
ex: @ast::Expr,
lhs_expr: @ast::Expr,
lhs_resolved_t: ty::t,
op: ast::binop,
rhs: @ast::expr,
op: ast::BinOp,
rhs: @ast::Expr,
expected_result: Option<ty::t>) -> ty::t {
let tcx = fcx.ccx.tcx;
match ast_util::binop_to_method_name(op) {
@ -1786,7 +1786,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
// If the or operator is used it might be that the user forgot to
// supply the do keyword. Let's be more helpful in that situation.
if op == ast::or {
if op == ast::BiOr {
match ty::get(lhs_resolved_t).sty {
ty::ty_bare_fn(_) | ty::ty_closure(_) => {
tcx.sess.span_note(
@ -1803,8 +1803,8 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
callee_id: ast::NodeId,
op_str: &str,
mname: &str,
ex: @ast::expr,
rhs_expr: @ast::expr,
ex: @ast::Expr,
rhs_expr: @ast::Expr,
rhs_t: ty::t,
expected_t: Option<ty::t>)
-> ty::t {
@ -1840,7 +1840,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
}
fn check_expr_fn(fcx: @mut FnCtxt,
expr: @ast::expr,
expr: @ast::Expr,
ast_sigil_opt: Option<ast::Sigil>,
decl: &ast::fn_decl,
body: &ast::Block,
@ -1934,8 +1934,8 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
// Check field access expressions
fn check_field(fcx: @mut FnCtxt,
expr: @ast::expr,
base: @ast::expr,
expr: @ast::Expr,
base: @ast::Expr,
field: ast::Ident,
tys: &[ast::Ty]) {
let tcx = fcx.ccx.tcx;
@ -2006,7 +2006,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fn check_struct_or_variant_fields(fcx: @mut FnCtxt,
span: Span,
class_id: ast::def_id,
class_id: ast::DefId,
node_id: ast::NodeId,
substitutions: ty::substs,
field_types: &[ty::field_ty],
@ -2097,9 +2097,9 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fn check_struct_constructor(fcx: @mut FnCtxt,
id: ast::NodeId,
span: codemap::Span,
class_id: ast::def_id,
class_id: ast::DefId,
fields: &[ast::Field],
base_expr: Option<@ast::expr>) {
base_expr: Option<@ast::Expr>) {
let tcx = fcx.ccx.tcx;
// Look up the number of type parameters and the raw type, and
@ -2186,8 +2186,8 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fn check_struct_enum_variant(fcx: @mut FnCtxt,
id: ast::NodeId,
span: codemap::Span,
enum_id: ast::def_id,
variant_id: ast::def_id,
enum_id: ast::DefId,
variant_id: ast::DefId,
fields: &[ast::Field]) {
let tcx = fcx.ccx.tcx;
@ -2257,20 +2257,20 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
let tcx = fcx.ccx.tcx;
let id = expr.id;
match expr.node {
ast::expr_vstore(ev, vst) => {
ast::ExprVstore(ev, vst) => {
let typ = match ev.node {
ast::expr_lit(@codemap::Spanned { node: ast::lit_str(_), _ }) => {
ast::ExprLit(@codemap::Spanned { node: ast::lit_str(_), _ }) => {
let tt = ast_expr_vstore_to_vstore(fcx, ev, vst);
ty::mk_estr(tcx, tt)
}
ast::expr_vec(ref args, mutbl) => {
ast::ExprVec(ref args, mutbl) => {
let tt = ast_expr_vstore_to_vstore(fcx, ev, vst);
let mutability;
let mut any_error = false;
let mut any_bot = false;
match vst {
ast::expr_vstore_mut_box | ast::expr_vstore_mut_slice => {
mutability = ast::m_mutbl
ast::ExprVstoreMutBox | ast::ExprVstoreMutSlice => {
mutability = ast::MutMutable
}
_ => mutability = mutbl
}
@ -2295,13 +2295,13 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
ty::mk_evec(tcx, ty::mt {ty: t, mutbl: mutability}, tt)
}
}
ast::expr_repeat(element, count_expr, mutbl) => {
ast::ExprRepeat(element, count_expr, mutbl) => {
check_expr_with_hint(fcx, count_expr, ty::mk_uint());
let _ = ty::eval_repeat_count(fcx, count_expr);
let tt = ast_expr_vstore_to_vstore(fcx, ev, vst);
let mutability = match vst {
ast::expr_vstore_mut_box | ast::expr_vstore_mut_slice => {
ast::m_mutbl
ast::ExprVstoreMutBox | ast::ExprVstoreMutSlice => {
ast::MutMutable
}
_ => mutbl
};
@ -2323,11 +2323,11 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_ty(id, typ);
}
ast::expr_lit(lit) => {
ast::ExprLit(lit) => {
let typ = check_lit(fcx, lit);
fcx.write_ty(id, typ);
}
ast::expr_binary(callee_id, op, lhs, rhs) => {
ast::ExprBinary(callee_id, op, lhs, rhs) => {
check_binop(fcx,
callee_id,
expr,
@ -2348,7 +2348,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_bot(id);
}
}
ast::expr_assign_op(callee_id, op, lhs, rhs) => {
ast::ExprAssignOp(callee_id, op, lhs, rhs) => {
check_binop(fcx,
callee_id,
expr,
@ -2370,15 +2370,15 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_nil(expr.id);
}
}
ast::expr_unary(callee_id, unop, oprnd) => {
ast::ExprUnary(callee_id, unop, oprnd) => {
let exp_inner = do unpack_expected(fcx, expected) |sty| {
match unop {
ast::box(_) | ast::uniq => match *sty {
ast::UnBox(_) | ast::UnUniq => match *sty {
ty::ty_box(ref mt) | ty::ty_uniq(ref mt) => Some(mt.ty),
_ => None
},
ast::not | ast::neg => expected,
ast::deref => None
ast::UnNot | ast::UnNeg => expected,
ast::UnDeref => None
}
};
check_expr_with_opt_hint(fcx, oprnd, exp_inner);
@ -2386,16 +2386,16 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
if !ty::type_is_error(oprnd_t) &&
!ty::type_is_bot(oprnd_t) {
match unop {
ast::box(mutbl) => {
ast::UnBox(mutbl) => {
oprnd_t = ty::mk_box(tcx,
ty::mt {ty: oprnd_t, mutbl: mutbl});
}
ast::uniq => {
ast::UnUniq => {
oprnd_t = ty::mk_uniq(tcx,
ty::mt {ty: oprnd_t,
mutbl: ast::m_imm});
mutbl: ast::MutImmutable});
}
ast::deref => {
ast::UnDeref => {
let sty = structure_of(fcx, expr.span, oprnd_t);
let operand_ty = ty::deref_sty(tcx, sty, true);
match operand_ty {
@ -2425,7 +2425,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
}
}
}
ast::not => {
ast::UnNot => {
oprnd_t = structurally_resolved_type(fcx, oprnd.span,
oprnd_t);
if !(ty::type_is_integral(oprnd_t) ||
@ -2435,7 +2435,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
expected);
}
}
ast::neg => {
ast::UnNeg => {
oprnd_t = structurally_resolved_type(fcx, oprnd.span,
oprnd_t);
if !(ty::type_is_integral(oprnd_t) ||
@ -2448,7 +2448,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
}
fcx.write_ty(id, oprnd_t);
}
ast::expr_addr_of(mutbl, oprnd) => {
ast::ExprAddrOf(mutbl, oprnd) => {
let hint = unpack_expected(
fcx, expected,
|sty| match *sty { ty::ty_rptr(_, ref mt) => Some(mt.ty),
@ -2482,20 +2482,20 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
};
fcx.write_ty(id, oprnd_t);
}
ast::expr_path(ref pth) => {
ast::ExprPath(ref pth) => {
let defn = lookup_def(fcx, pth.span, id);
check_type_parameter_positions_in_path(fcx, pth, defn);
let tpt = ty_param_bounds_and_ty_for_def(fcx, expr.span, defn);
instantiate_path(fcx, pth, tpt, defn, expr.span, expr.id);
}
ast::expr_self => {
ast::ExprSelf => {
let definition = lookup_def(fcx, expr.span, id);
let ty_param_bounds_and_ty =
ty_param_bounds_and_ty_for_def(fcx, expr.span, definition);
fcx.write_ty(id, ty_param_bounds_and_ty.ty);
}
ast::expr_inline_asm(ref ia) => {
ast::ExprInlineAsm(ref ia) => {
for &(_, input) in ia.inputs.iter() {
check_expr(fcx, input);
}
@ -2504,10 +2504,10 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
}
fcx.write_nil(id);
}
ast::expr_mac(_) => tcx.sess.bug("unexpanded macro"),
ast::expr_break(_) => { fcx.write_bot(id); }
ast::expr_again(_) => { fcx.write_bot(id); }
ast::expr_ret(expr_opt) => {
ast::ExprMac(_) => tcx.sess.bug("unexpanded macro"),
ast::ExprBreak(_) => { fcx.write_bot(id); }
ast::ExprAgain(_) => { fcx.write_bot(id); }
ast::ExprRet(expr_opt) => {
let ret_ty = fcx.ret_ty;
match expr_opt {
None => match fcx.mk_eqty(false, infer::Misc(expr.span),
@ -2525,7 +2525,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
}
fcx.write_bot(id);
}
ast::expr_log(lv, e) => {
ast::ExprLog(lv, e) => {
check_expr_has_type(fcx, lv,
ty::mk_mach_uint(ast::ty_u32));
@ -2538,11 +2538,11 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_nil(id);
}
}
ast::expr_paren(a) => {
ast::ExprParen(a) => {
check_expr_with_opt_hint(fcx, a, expected);
fcx.write_ty(id, fcx.expr_ty(a));
}
ast::expr_assign(lhs, rhs) => {
ast::ExprAssign(lhs, rhs) => {
check_assignment(fcx, lhs, rhs, id);
let lhs_ty = fcx.expr_ty(lhs);
let rhs_ty = fcx.expr_ty(rhs);
@ -2556,11 +2556,11 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_nil(id);
}
}
ast::expr_if(cond, ref then_blk, opt_else_expr) => {
ast::ExprIf(cond, ref then_blk, opt_else_expr) => {
check_then_else(fcx, cond, then_blk, opt_else_expr,
id, expr.span, expected);
}
ast::expr_while(cond, ref body) => {
ast::ExprWhile(cond, ref body) => {
check_expr_has_type(fcx, cond, ty::mk_bool());
check_block_no_value(fcx, body);
let cond_ty = fcx.expr_ty(cond);
@ -2575,9 +2575,9 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_nil(id);
}
}
ast::expr_for_loop(*) =>
ast::ExprForLoop(*) =>
fail!("non-desugared expr_for_loop"),
ast::expr_loop(ref body, _) => {
ast::ExprLoop(ref body, _) => {
check_block_no_value(fcx, (body));
if !may_break(tcx, expr.id, body) {
fcx.write_bot(id);
@ -2586,14 +2586,14 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_nil(id);
}
}
ast::expr_match(discrim, ref arms) => {
ast::ExprMatch(discrim, ref arms) => {
_match::check_match(fcx, expr, discrim, *arms);
}
ast::expr_fn_block(ref decl, ref body) => {
ast::ExprFnBlock(ref decl, ref body) => {
check_expr_fn(fcx, expr, None,
decl, body, Vanilla, expected);
}
ast::expr_do_body(b) => {
ast::ExprDoBody(b) => {
let expected_sty = unpack_expected(fcx,
expected,
|x| Some((*x).clone()));
@ -2618,7 +2618,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
}
};
match b.node {
ast::expr_fn_block(ref decl, ref body) => {
ast::ExprFnBlock(ref decl, ref body) => {
check_expr_fn(fcx, b, None,
decl, body, DoBlock, Some(inner_ty));
demand::suptype(fcx, b.span, inner_ty, fcx.expr_ty(b));
@ -2628,11 +2628,11 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
}
fcx.write_ty(expr.id, fcx.node_ty(b.id));
}
ast::expr_block(ref b) => {
ast::ExprBlock(ref b) => {
check_block_with_expected(fcx, b, expected);
fcx.write_ty(id, fcx.node_ty(b.id));
}
ast::expr_call(f, ref args, sugar) => {
ast::ExprCall(f, ref args, sugar) => {
check_call(fcx, expr.id, expr, f, *args, sugar);
let f_ty = fcx.expr_ty(f);
let (args_bot, args_err) = args.iter().fold((false, false),
@ -2648,7 +2648,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_bot(id);
}
}
ast::expr_method_call(callee_id, rcvr, ident, ref tps, ref args, sugar) => {
ast::ExprMethodCall(callee_id, rcvr, ident, ref tps, ref args, sugar) => {
check_method_call(fcx, callee_id, expr, rcvr, ident, *args, *tps, sugar);
let f_ty = fcx.expr_ty(rcvr);
let arg_tys = args.map(|a| fcx.expr_ty(*a));
@ -2663,7 +2663,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_bot(id);
}
}
ast::expr_cast(e, ref t) => {
ast::ExprCast(e, ref t) => {
check_expr(fcx, e);
let t_1 = fcx.to_ty(t);
let t_e = fcx.expr_ty(e);
@ -2757,7 +2757,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_ty(id, t_1);
}
}
ast::expr_vec(ref args, mutbl) => {
ast::ExprVec(ref args, mutbl) => {
let t: ty::t = fcx.infcx().next_ty_var();
for e in args.iter() {
check_expr_has_type(fcx, *e, t);
@ -2766,7 +2766,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
ty::vstore_fixed(args.len()));
fcx.write_ty(id, typ);
}
ast::expr_repeat(element, count_expr, mutbl) => {
ast::ExprRepeat(element, count_expr, mutbl) => {
check_expr_with_hint(fcx, count_expr, ty::mk_uint());
let count = ty::eval_repeat_count(fcx, count_expr);
let t: ty::t = fcx.infcx().next_ty_var();
@ -2784,7 +2784,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_ty(id, t);
}
}
ast::expr_tup(ref elts) => {
ast::ExprTup(ref elts) => {
let flds = unpack_expected(fcx, expected, |sty| {
match *sty {
ty::ty_tup(ref flds) => Some((*flds).clone()),
@ -2814,14 +2814,14 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
fcx.write_ty(id, typ);
}
}
ast::expr_struct(ref path, ref fields, base_expr) => {
ast::ExprStruct(ref path, ref fields, base_expr) => {
// Resolve the path.
match tcx.def_map.find(&id) {
Some(&ast::def_struct(type_def_id)) => {
Some(&ast::DefStruct(type_def_id)) => {
check_struct_constructor(fcx, id, expr.span, type_def_id,
*fields, base_expr);
}
Some(&ast::def_variant(enum_id, variant_id)) => {
Some(&ast::DefVariant(enum_id, variant_id)) => {
check_struct_enum_variant(fcx, id, expr.span, enum_id,
variant_id, *fields);
}
@ -2831,10 +2831,10 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
}
}
}
ast::expr_field(base, field, ref tys) => {
ast::ExprField(base, field, ref tys) => {
check_field(fcx, expr, base, field, *tys);
}
ast::expr_index(callee_id, base, idx) => {
ast::ExprIndex(callee_id, base, idx) => {
check_expr(fcx, base);
check_expr(fcx, idx);
let raw_base_t = fcx.expr_ty(base);
@ -2908,7 +2908,7 @@ pub fn require_integral(fcx: @mut FnCtxt, sp: Span, t: ty::t) {
pub fn check_decl_initializer(fcx: @mut FnCtxt,
nid: ast::NodeId,
init: @ast::expr)
init: @ast::Expr)
{
let local_ty = fcx.local_ty(init.span, nid);
check_expr_coercable_to_type(fcx, init, local_ty)
@ -2942,24 +2942,24 @@ pub fn check_decl_local(fcx: @mut FnCtxt, local: @ast::Local) {
}
}
pub fn check_stmt(fcx: @mut FnCtxt, stmt: @ast::stmt) {
pub fn check_stmt(fcx: @mut FnCtxt, stmt: @ast::Stmt) {
let node_id;
let mut saw_bot = false;
let mut saw_err = false;
match stmt.node {
ast::stmt_decl(decl, id) => {
ast::StmtDecl(decl, id) => {
node_id = id;
match decl.node {
ast::decl_local(ref l) => {
ast::DeclLocal(ref l) => {
check_decl_local(fcx, *l);
let l_t = fcx.node_ty(l.id);
saw_bot = saw_bot || ty::type_is_bot(l_t);
saw_err = saw_err || ty::type_is_error(l_t);
}
ast::decl_item(_) => {/* ignore for now */ }
ast::DeclItem(_) => {/* ignore for now */ }
}
}
ast::stmt_expr(expr, id) => {
ast::StmtExpr(expr, id) => {
node_id = id;
// Check with expected type of ()
check_expr_has_type(fcx, expr, ty::mk_nil());
@ -2967,14 +2967,14 @@ pub fn check_stmt(fcx: @mut FnCtxt, stmt: @ast::stmt) {
saw_bot = saw_bot || ty::type_is_bot(expr_ty);
saw_err = saw_err || ty::type_is_error(expr_ty);
}
ast::stmt_semi(expr, id) => {
ast::StmtSemi(expr, id) => {
node_id = id;
check_expr(fcx, expr);
let expr_ty = fcx.expr_ty(expr);
saw_bot |= ty::type_is_bot(expr_ty);
saw_err |= ty::type_is_error(expr_ty);
}
ast::stmt_mac(*) => fcx.ccx.tcx.sess.bug("unexpanded macro")
ast::StmtMac(*) => fcx.ccx.tcx.sess.bug("unexpanded macro")
}
if saw_bot {
fcx.write_bot(node_id);
@ -3022,9 +3022,9 @@ pub fn check_block_with_expected(fcx: @mut FnCtxt,
let s_id = ast_util::stmt_id(*s);
let s_ty = fcx.node_ty(s_id);
if last_was_bot && !warned && match s.node {
ast::stmt_decl(@codemap::Spanned { node: ast::decl_local(_),
ast::StmtDecl(@codemap::Spanned { node: ast::DeclLocal(_),
_}, _) |
ast::stmt_expr(_, _) | ast::stmt_semi(_, _) => {
ast::StmtExpr(_, _) | ast::StmtSemi(_, _) => {
true
}
_ => false
@ -3071,7 +3071,7 @@ pub fn check_block_with_expected(fcx: @mut FnCtxt,
pub fn check_const(ccx: @mut CrateCtxt,
sp: Span,
e: @ast::expr,
e: @ast::Expr,
id: ast::NodeId) {
let rty = ty::node_id_to_type(ccx.tcx, id);
let fcx = blank_fn_ctxt(ccx, rty, e.id);
@ -3081,7 +3081,7 @@ pub fn check_const(ccx: @mut CrateCtxt,
pub fn check_const_with_ty(fcx: @mut FnCtxt,
_: Span,
e: @ast::expr,
e: @ast::Expr,
declty: ty::t) {
check_expr(fcx, e);
let cty = fcx.expr_ty(e);
@ -3236,54 +3236,54 @@ pub fn check_enum_variants(ccx: @mut CrateCtxt,
check_instantiable(ccx.tcx, sp, id);
}
pub fn lookup_def(fcx: @mut FnCtxt, sp: Span, id: ast::NodeId) -> ast::def {
pub fn lookup_def(fcx: @mut FnCtxt, sp: Span, id: ast::NodeId) -> ast::Def {
lookup_def_ccx(fcx.ccx, sp, id)
}
// Returns the type parameter count and the type for the given definition.
pub fn ty_param_bounds_and_ty_for_def(fcx: @mut FnCtxt,
sp: Span,
defn: ast::def)
defn: ast::Def)
-> ty_param_bounds_and_ty {
match defn {
ast::def_arg(nid, _) | ast::def_local(nid, _) | ast::def_self(nid) |
ast::def_binding(nid, _) => {
ast::DefArg(nid, _) | ast::DefLocal(nid, _) | ast::DefSelf(nid) |
ast::DefBinding(nid, _) => {
let typ = fcx.local_ty(sp, nid);
return no_params(typ);
}
ast::def_fn(id, _) | ast::def_static_method(id, _, _) |
ast::def_static(id, _) | ast::def_variant(_, id) |
ast::def_struct(id) => {
ast::DefFn(id, _) | ast::DefStaticMethod(id, _, _) |
ast::DefStatic(id, _) | ast::DefVariant(_, id) |
ast::DefStruct(id) => {
return ty::lookup_item_type(fcx.ccx.tcx, id);
}
ast::def_upvar(_, inner, _, _) => {
ast::DefUpvar(_, inner, _, _) => {
return ty_param_bounds_and_ty_for_def(fcx, sp, *inner);
}
ast::def_trait(_) |
ast::def_ty(_) |
ast::def_prim_ty(_) |
ast::def_ty_param(*)=> {
ast::DefTrait(_) |
ast::DefTy(_) |
ast::DefPrimTy(_) |
ast::DefTyParam(*)=> {
fcx.ccx.tcx.sess.span_bug(sp, "expected value but found type");
}
ast::def_mod(*) | ast::def_foreign_mod(*) => {
ast::DefMod(*) | ast::DefForeignMod(*) => {
fcx.ccx.tcx.sess.span_bug(sp, "expected value but found module");
}
ast::def_use(*) => {
ast::DefUse(*) => {
fcx.ccx.tcx.sess.span_bug(sp, "expected value but found use");
}
ast::def_region(*) => {
ast::DefRegion(*) => {
fcx.ccx.tcx.sess.span_bug(sp, "expected value but found region");
}
ast::def_typaram_binder(*) => {
ast::DefTyParamBinder(*) => {
fcx.ccx.tcx.sess.span_bug(sp, "expected value but found type parameter");
}
ast::def_label(*) => {
ast::DefLabel(*) => {
fcx.ccx.tcx.sess.span_bug(sp, "expected value but found label");
}
ast::def_self_ty(*) => {
ast::DefSelfTy(*) => {
fcx.ccx.tcx.sess.span_bug(sp, "expected value but found self ty");
}
ast::def_method(*) => {
ast::DefMethod(*) => {
fcx.ccx.tcx.sess.span_bug(sp, "expected value but found method");
}
}
@ -3294,7 +3294,7 @@ pub fn ty_param_bounds_and_ty_for_def(fcx: @mut FnCtxt,
pub fn instantiate_path(fcx: @mut FnCtxt,
pth: &ast::Path,
tpt: ty_param_bounds_and_ty,
def: ast::def,
def: ast::Def,
span: Span,
node_id: ast::NodeId) {
debug!(">>> instantiate_path");
@ -3341,7 +3341,7 @@ pub fn instantiate_path(fcx: @mut FnCtxt,
// of type parameters actually manifest in the AST. This will differ from
// the internal type parameter count when there are self types involved.
let (user_type_parameter_count, self_parameter_index) = match def {
ast::def_static_method(_, provenance @ ast::FromTrait(_), _) => {
ast::DefStaticMethod(_, provenance @ ast::FromTrait(_), _) => {
let generics = generics_of_static_method_container(fcx.ccx.tcx,
provenance);
(ty_param_count - 1, Some(generics.type_param_defs.len()))
@ -3455,13 +3455,13 @@ pub fn type_is_c_like_enum(fcx: @mut FnCtxt, sp: Span, typ: ty::t) -> bool {
}
pub fn ast_expr_vstore_to_vstore(fcx: @mut FnCtxt,
e: @ast::expr,
v: ast::expr_vstore)
e: @ast::Expr,
v: ast::ExprVstore)
-> ty::vstore {
match v {
ast::expr_vstore_uniq => ty::vstore_uniq,
ast::expr_vstore_box | ast::expr_vstore_mut_box => ty::vstore_box,
ast::expr_vstore_slice | ast::expr_vstore_mut_slice => {
ast::ExprVstoreUniq => ty::vstore_uniq,
ast::ExprVstoreBox | ast::ExprVstoreMutBox => ty::vstore_box,
ast::ExprVstoreSlice | ast::ExprVstoreMutSlice => {
let r = fcx.infcx().next_region_var(infer::AddrOfSlice(e.span));
ty::vstore_slice(r)
}
@ -3474,7 +3474,7 @@ pub fn may_break(cx: ty::ctxt, id: ast::NodeId, b: &ast::Block) -> bool {
// inside the loop?
(loop_query(b, |e| {
match *e {
ast::expr_break(_) => true,
ast::ExprBreak(_) => true,
_ => false
}
})) ||
@ -3482,9 +3482,9 @@ pub fn may_break(cx: ty::ctxt, id: ast::NodeId, b: &ast::Block) -> bool {
// <id> nested anywhere inside the loop?
(block_query(b, |e| {
match e.node {
ast::expr_break(Some(_)) =>
ast::ExprBreak(Some(_)) =>
match cx.def_map.find(&e.id) {
Some(&ast::def_label(loop_id)) if id == loop_id => true,
Some(&ast::DefLabel(loop_id)) if id == loop_id => true,
_ => false,
},
_ => false
@ -3610,7 +3610,7 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
};
let td_ptr = ty::mk_ptr(ccx.tcx, ty::mt {
ty: tydesc_ty,
mutbl: ast::m_imm
mutbl: ast::MutImmutable
});
(1u, ~[], td_ptr)
}
@ -3627,7 +3627,7 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
let td_ptr = ty::mk_ptr(ccx.tcx, ty::mt {
ty: tydesc_ty,
mutbl: ast::m_imm
mutbl: ast::MutImmutable
});
(0, ~[ td_ptr, visitor_object_ty ], ty::mk_nil())
}
@ -3654,13 +3654,13 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
~[
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_imm
mutbl: ast::MutImmutable
}),
ty::mk_int()
],
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_imm
mutbl: ast::MutImmutable
}))
}
"memcpy32" => {
@ -3668,11 +3668,11 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
~[
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_mutbl
mutbl: ast::MutMutable
}),
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_imm
mutbl: ast::MutImmutable
}),
ty::mk_u32()
],
@ -3683,11 +3683,11 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
~[
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_mutbl
mutbl: ast::MutMutable
}),
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_imm
mutbl: ast::MutImmutable
}),
ty::mk_u64()
],
@ -3698,11 +3698,11 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
~[
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_mutbl
mutbl: ast::MutMutable
}),
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_imm
mutbl: ast::MutImmutable
}),
ty::mk_u32()
],
@ -3713,11 +3713,11 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
~[
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_mutbl
mutbl: ast::MutMutable
}),
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_imm
mutbl: ast::MutImmutable
}),
ty::mk_u64()
],
@ -3728,7 +3728,7 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
~[
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_mutbl
mutbl: ast::MutMutable
}),
ty::mk_u8(),
ty::mk_u32()
@ -3740,7 +3740,7 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
~[
ty::mk_ptr(tcx, ty::mt {
ty: param(ccx, 0),
mutbl: ast::m_mutbl
mutbl: ast::MutMutable
}),
ty::mk_u8(),
ty::mk_u64()

View file

@ -40,7 +40,7 @@ use util::ppaux::{ty_to_str, region_to_str};
use middle::pat_util;
use syntax::ast::{ManagedSigil, OwnedSigil, BorrowedSigil};
use syntax::ast::{def_arg, def_binding, def_local, def_self, def_upvar};
use syntax::ast::{DefArg, DefBinding, DefLocal, DefSelf, DefUpvar};
use syntax::ast;
use syntax::codemap::Span;
use syntax::visit;
@ -54,14 +54,14 @@ pub struct Rcx {
repeating_scope: ast::NodeId,
}
fn encl_region_of_def(fcx: @mut FnCtxt, def: ast::def) -> ty::Region {
fn encl_region_of_def(fcx: @mut FnCtxt, def: ast::Def) -> ty::Region {
let tcx = fcx.tcx();
match def {
def_local(node_id, _) | def_arg(node_id, _) |
def_self(node_id) | def_binding(node_id, _) => {
DefLocal(node_id, _) | DefArg(node_id, _) |
DefSelf(node_id) | DefBinding(node_id, _) => {
tcx.region_maps.encl_region(node_id)
}
def_upvar(_, subdef, closure_id, body_id) => {
DefUpvar(_, subdef, closure_id, body_id) => {
match ty::ty_closure_sigil(fcx.node_ty(closure_id)) {
BorrowedSigil => encl_region_of_def(fcx, *subdef),
ManagedSigil | OwnedSigil => re_scope(body_id)
@ -127,7 +127,7 @@ impl Rcx {
}
/// Try to resolve the type for the given node.
pub fn resolve_expr_type_adjusted(@mut self, expr: @ast::expr) -> ty::t {
pub fn resolve_expr_type_adjusted(@mut self, expr: @ast::Expr) -> ty::t {
let ty_unadjusted = self.resolve_node_type(expr.id);
if ty::type_is_error(ty_unadjusted) || ty::type_is_bot(ty_unadjusted) {
ty_unadjusted
@ -140,7 +140,7 @@ impl Rcx {
}
}
pub fn regionck_expr(fcx: @mut FnCtxt, e: @ast::expr) {
pub fn regionck_expr(fcx: @mut FnCtxt, e: @ast::Expr) {
let rcx = @mut Rcx { fcx: fcx, errors_reported: 0,
repeating_scope: e.id };
if fcx.err_count_since_creation() == 0 {
@ -175,11 +175,11 @@ impl Visitor<@mut Rcx> for RegionckVisitor {
fn visit_item(&mut self, i:@ast::item, e:@mut Rcx) { visit_item(self, i, e); }
fn visit_expr(&mut self, ex:@ast::expr, e:@mut Rcx) { visit_expr(self, ex, e); }
fn visit_expr(&mut self, ex:@ast::Expr, e:@mut Rcx) { visit_expr(self, ex, e); }
//visit_pat: visit_pat, // (*) see above
fn visit_arm(&mut self, a:&ast::arm, e:@mut Rcx) { visit_arm(self, a, e); }
fn visit_arm(&mut self, a:&ast::Arm, e:@mut Rcx) { visit_arm(self, a, e); }
fn visit_local(&mut self, l:@ast::Local, e:@mut Rcx) { visit_local(self, l, e); }
@ -199,7 +199,7 @@ fn visit_block(v: &mut RegionckVisitor, b: &ast::Block, rcx: @mut Rcx) {
visit::walk_block(v, b, rcx);
}
fn visit_arm(v: &mut RegionckVisitor, arm: &ast::arm, rcx: @mut Rcx) {
fn visit_arm(v: &mut RegionckVisitor, arm: &ast::Arm, rcx: @mut Rcx) {
// see above
for &p in arm.pats.iter() {
constrain_bindings_in_pat(p, rcx);
@ -214,7 +214,7 @@ fn visit_local(v: &mut RegionckVisitor, l: @ast::Local, rcx: @mut Rcx) {
visit::walk_local(v, l, rcx);
}
fn constrain_bindings_in_pat(pat: @ast::pat, rcx: @mut Rcx) {
fn constrain_bindings_in_pat(pat: @ast::Pat, rcx: @mut Rcx) {
let tcx = rcx.fcx.tcx();
debug!("regionck::visit_pat(pat=%s)", pat.repr(tcx));
do pat_util::pat_bindings(tcx.def_map, pat) |_, id, span, _| {
@ -248,7 +248,7 @@ fn constrain_bindings_in_pat(pat: @ast::pat, rcx: @mut Rcx) {
}
}
fn visit_expr(v: &mut RegionckVisitor, expr: @ast::expr, rcx: @mut Rcx) {
fn visit_expr(v: &mut RegionckVisitor, expr: @ast::Expr, rcx: @mut Rcx) {
debug!("regionck::visit_expr(e=%s, repeating_scope=%?)",
expr.repr(rcx.fcx.tcx()), rcx.repeating_scope);
@ -271,21 +271,21 @@ fn visit_expr(v: &mut RegionckVisitor, expr: @ast::expr, rcx: @mut Rcx) {
//
// ast::expr_assign_op(*) |
ast::expr_index(*) |
ast::expr_binary(*) |
ast::expr_unary(*) if has_method_map => {
ast::ExprIndex(*) |
ast::ExprBinary(*) |
ast::ExprUnary(*) if has_method_map => {
tcx.region_maps.record_cleanup_scope(expr.id);
}
ast::expr_binary(_, ast::and, lhs, rhs) |
ast::expr_binary(_, ast::or, lhs, rhs) => {
ast::ExprBinary(_, ast::BiAnd, lhs, rhs) |
ast::ExprBinary(_, ast::BiOr, lhs, rhs) => {
tcx.region_maps.record_cleanup_scope(lhs.id);
tcx.region_maps.record_cleanup_scope(rhs.id);
}
ast::expr_call(*) |
ast::expr_method_call(*) => {
ast::ExprCall(*) |
ast::ExprMethodCall(*) => {
tcx.region_maps.record_cleanup_scope(expr.id);
}
ast::expr_match(_, ref arms) => {
ast::ExprMatch(_, ref arms) => {
tcx.region_maps.record_cleanup_scope(expr.id);
for arm in arms.iter() {
for guard in arm.guard.iter() {
@ -293,10 +293,10 @@ fn visit_expr(v: &mut RegionckVisitor, expr: @ast::expr, rcx: @mut Rcx) {
}
}
}
ast::expr_loop(ref body, _) => {
ast::ExprLoop(ref body, _) => {
tcx.region_maps.record_cleanup_scope(body.id);
}
ast::expr_while(cond, ref body) => {
ast::ExprWhile(cond, ref body) => {
tcx.region_maps.record_cleanup_scope(cond.id);
tcx.region_maps.record_cleanup_scope(body.id);
}
@ -332,22 +332,22 @@ fn visit_expr(v: &mut RegionckVisitor, expr: @ast::expr, rcx: @mut Rcx) {
}
match expr.node {
ast::expr_call(callee, ref args, _) => {
ast::ExprCall(callee, ref args, _) => {
constrain_callee(rcx, callee.id, expr, callee);
constrain_call(rcx, callee.id, expr, None, *args, false);
visit::walk_expr(v, expr, rcx);
}
ast::expr_method_call(callee_id, arg0, _, _, ref args, _) => {
ast::ExprMethodCall(callee_id, arg0, _, _, ref args, _) => {
constrain_call(rcx, callee_id, expr, Some(arg0), *args, false);
visit::walk_expr(v,expr, rcx);
}
ast::expr_index(callee_id, lhs, rhs) |
ast::expr_assign_op(callee_id, _, lhs, rhs) |
ast::expr_binary(callee_id, _, lhs, rhs) if has_method_map => {
ast::ExprIndex(callee_id, lhs, rhs) |
ast::ExprAssignOp(callee_id, _, lhs, rhs) |
ast::ExprBinary(callee_id, _, lhs, rhs) if has_method_map => {
// As `expr_method_call`, but the call is via an
// overloaded op. Note that we (sadly) currently use an
// implicit "by ref" sort of passing style here. This
@ -357,14 +357,14 @@ fn visit_expr(v: &mut RegionckVisitor, expr: @ast::expr, rcx: @mut Rcx) {
visit::walk_expr(v, expr, rcx);
}
ast::expr_unary(callee_id, _, lhs) if has_method_map => {
ast::ExprUnary(callee_id, _, lhs) if has_method_map => {
// As above.
constrain_call(rcx, callee_id, expr, Some(lhs), [], true);
visit::walk_expr(v, expr, rcx);
}
ast::expr_unary(_, ast::deref, base) => {
ast::ExprUnary(_, ast::UnDeref, base) => {
// For *a, the lifetime of a must enclose the deref
let base_ty = rcx.resolve_node_type(base.id);
constrain_derefs(rcx, expr, 1, base_ty);
@ -372,7 +372,7 @@ fn visit_expr(v: &mut RegionckVisitor, expr: @ast::expr, rcx: @mut Rcx) {
visit::walk_expr(v, expr, rcx);
}
ast::expr_index(_, vec_expr, _) => {
ast::ExprIndex(_, vec_expr, _) => {
// For a[b], the lifetime of a must enclose the deref
let vec_type = rcx.resolve_expr_type_adjusted(vec_expr);
constrain_index(rcx, expr, vec_type);
@ -380,7 +380,7 @@ fn visit_expr(v: &mut RegionckVisitor, expr: @ast::expr, rcx: @mut Rcx) {
visit::walk_expr(v, expr, rcx);
}
ast::expr_cast(source, _) => {
ast::ExprCast(source, _) => {
// Determine if we are casting `source` to an trait
// instance. If so, we have to be sure that the type of
// the source obeys the trait's region bound.
@ -410,7 +410,7 @@ fn visit_expr(v: &mut RegionckVisitor, expr: @ast::expr, rcx: @mut Rcx) {
visit::walk_expr(v, expr, rcx);
}
ast::expr_addr_of(_, base) => {
ast::ExprAddrOf(_, base) => {
guarantor::for_addr_of(rcx, expr, base);
// Require that when you write a `&expr` expression, the
@ -426,23 +426,23 @@ fn visit_expr(v: &mut RegionckVisitor, expr: @ast::expr, rcx: @mut Rcx) {
visit::walk_expr(v, expr, rcx);
}
ast::expr_match(discr, ref arms) => {
ast::ExprMatch(discr, ref arms) => {
guarantor::for_match(rcx, discr, *arms);
visit::walk_expr(v, expr, rcx);
}
ast::expr_fn_block(*) => {
ast::ExprFnBlock(*) => {
check_expr_fn_block(rcx, expr, v);
}
ast::expr_loop(ref body, _) => {
ast::ExprLoop(ref body, _) => {
let repeating_scope = rcx.set_repeating_scope(body.id);
visit::walk_expr(v, expr, rcx);
rcx.set_repeating_scope(repeating_scope);
}
ast::expr_while(cond, ref body) => {
ast::ExprWhile(cond, ref body) => {
let repeating_scope = rcx.set_repeating_scope(cond.id);
v.visit_expr(cond, rcx);
@ -459,11 +459,11 @@ fn visit_expr(v: &mut RegionckVisitor, expr: @ast::expr, rcx: @mut Rcx) {
}
fn check_expr_fn_block(rcx: @mut Rcx,
expr: @ast::expr,
expr: @ast::Expr,
v: &mut RegionckVisitor) {
let tcx = rcx.fcx.tcx();
match expr.node {
ast::expr_fn_block(_, ref body) => {
ast::ExprFnBlock(_, ref body) => {
let function_type = rcx.resolve_node_type(expr.id);
match ty::get(function_type).sty {
ty::ty_closure(
@ -503,8 +503,8 @@ fn check_expr_fn_block(rcx: @mut Rcx,
fn constrain_callee(rcx: @mut Rcx,
callee_id: ast::NodeId,
call_expr: @ast::expr,
callee_expr: @ast::expr)
call_expr: @ast::Expr,
callee_expr: @ast::Expr)
{
let call_region = ty::re_scope(call_expr.id);
@ -530,9 +530,9 @@ fn constrain_call(rcx: @mut Rcx,
// might be expr_call, expr_method_call, or an overloaded
// operator
callee_id: ast::NodeId,
call_expr: @ast::expr,
receiver: Option<@ast::expr>,
arg_exprs: &[@ast::expr],
call_expr: @ast::Expr,
receiver: Option<@ast::Expr>,
arg_exprs: &[@ast::Expr],
implicitly_ref_args: bool)
{
//! Invoked on every call site (i.e., normal calls, method calls,
@ -590,7 +590,7 @@ fn constrain_call(rcx: @mut Rcx,
}
fn constrain_derefs(rcx: @mut Rcx,
deref_expr: @ast::expr,
deref_expr: @ast::Expr,
derefs: uint,
mut derefd_ty: ty::t)
{
@ -635,7 +635,7 @@ pub fn mk_subregion_due_to_derefence(rcx: @mut Rcx,
fn constrain_index(rcx: @mut Rcx,
index_expr: @ast::expr,
index_expr: @ast::Expr,
indexed_ty: ty::t)
{
/*!
@ -661,7 +661,7 @@ fn constrain_index(rcx: @mut Rcx,
fn constrain_free_variables(rcx: @mut Rcx,
region: ty::Region,
expr: @ast::expr) {
expr: @ast::Expr) {
/*!
* Make sure that all free variables referenced inside the closure
* outlive the closure itself.
@ -812,7 +812,7 @@ pub mod guarantor {
use syntax::codemap::Span;
use util::ppaux::{ty_to_str};
pub fn for_addr_of(rcx: @mut Rcx, expr: @ast::expr, base: @ast::expr) {
pub fn for_addr_of(rcx: @mut Rcx, expr: @ast::Expr, base: @ast::Expr) {
/*!
* Computes the guarantor for an expression `&base` and then
* ensures that the lifetime of the resulting pointer is linked
@ -825,7 +825,7 @@ pub mod guarantor {
link(rcx, expr.span, expr.id, guarantor);
}
pub fn for_match(rcx: @mut Rcx, discr: @ast::expr, arms: &[ast::arm]) {
pub fn for_match(rcx: @mut Rcx, discr: @ast::Expr, arms: &[ast::Arm]) {
/*!
* Computes the guarantors for any ref bindings in a match and
* then ensures that the lifetime of the resulting pointer is
@ -843,7 +843,7 @@ pub mod guarantor {
}
pub fn for_autoref(rcx: @mut Rcx,
expr: @ast::expr,
expr: @ast::Expr,
autoderefs: uint,
autoref: &ty::AutoRef) {
/*!
@ -883,7 +883,7 @@ pub mod guarantor {
fn maybe_make_subregion(
rcx: @mut Rcx,
expr: @ast::expr,
expr: @ast::Expr,
sub_region: ty::Region,
sup_region: Option<ty::Region>)
{
@ -895,7 +895,7 @@ pub mod guarantor {
}
pub fn for_by_ref(rcx: @mut Rcx,
expr: @ast::expr,
expr: @ast::Expr,
callee_scope: ast::NodeId) {
/*!
* Computes the guarantor for cases where the `expr` is
@ -974,7 +974,7 @@ pub mod guarantor {
ty: ty::t
}
fn guarantor(rcx: @mut Rcx, expr: @ast::expr) -> Option<ty::Region> {
fn guarantor(rcx: @mut Rcx, expr: @ast::Expr) -> Option<ty::Region> {
/*!
*
* Computes the guarantor of `expr`, or None if `expr` is
@ -985,23 +985,23 @@ pub mod guarantor {
debug!("guarantor()");
match expr.node {
ast::expr_unary(_, ast::deref, b) => {
ast::ExprUnary(_, ast::UnDeref, b) => {
let cat = categorize(rcx, b);
guarantor_of_deref(&cat)
}
ast::expr_field(b, _, _) => {
ast::ExprField(b, _, _) => {
categorize(rcx, b).guarantor
}
ast::expr_index(_, b, _) => {
ast::ExprIndex(_, b, _) => {
let cat = categorize(rcx, b);
guarantor_of_deref(&cat)
}
ast::expr_paren(e) => {
ast::ExprParen(e) => {
guarantor(rcx, e)
}
ast::expr_path(*) | ast::expr_self => {
ast::ExprPath(*) | ast::ExprSelf => {
// Either a variable or constant and hence resides
// in constant memory or on the stack frame. Either way,
// not guaranteed by a region pointer.
@ -1010,42 +1010,42 @@ pub mod guarantor {
// All of these expressions are rvalues and hence their
// value is not guaranteed by a region pointer.
ast::expr_inline_asm(*) |
ast::expr_mac(*) |
ast::expr_lit(_) |
ast::expr_unary(*) |
ast::expr_addr_of(*) |
ast::expr_binary(*) |
ast::expr_vstore(*) |
ast::expr_break(*) |
ast::expr_again(*) |
ast::expr_ret(*) |
ast::expr_log(*) |
ast::expr_while(*) |
ast::expr_loop(*) |
ast::expr_assign(*) |
ast::expr_assign_op(*) |
ast::expr_cast(*) |
ast::expr_call(*) |
ast::expr_method_call(*) |
ast::expr_struct(*) |
ast::expr_tup(*) |
ast::expr_if(*) |
ast::expr_match(*) |
ast::expr_fn_block(*) |
ast::expr_do_body(*) |
ast::expr_block(*) |
ast::expr_repeat(*) |
ast::expr_vec(*) => {
ast::ExprInlineAsm(*) |
ast::ExprMac(*) |
ast::ExprLit(_) |
ast::ExprUnary(*) |
ast::ExprAddrOf(*) |
ast::ExprBinary(*) |
ast::ExprVstore(*) |
ast::ExprBreak(*) |
ast::ExprAgain(*) |
ast::ExprRet(*) |
ast::ExprLog(*) |
ast::ExprWhile(*) |
ast::ExprLoop(*) |
ast::ExprAssign(*) |
ast::ExprAssignOp(*) |
ast::ExprCast(*) |
ast::ExprCall(*) |
ast::ExprMethodCall(*) |
ast::ExprStruct(*) |
ast::ExprTup(*) |
ast::ExprIf(*) |
ast::ExprMatch(*) |
ast::ExprFnBlock(*) |
ast::ExprDoBody(*) |
ast::ExprBlock(*) |
ast::ExprRepeat(*) |
ast::ExprVec(*) => {
assert!(!ty::expr_is_lval(
rcx.fcx.tcx(), rcx.fcx.inh.method_map, expr));
None
}
ast::expr_for_loop(*) => fail!("non-desugared expr_for_loop"),
ast::ExprForLoop(*) => fail!("non-desugared expr_for_loop"),
}
}
fn categorize(rcx: @mut Rcx, expr: @ast::expr) -> ExprCategorization {
fn categorize(rcx: @mut Rcx, expr: @ast::Expr) -> ExprCategorization {
debug!("categorize()");
let mut expr_ct = categorize_unadjusted(rcx, expr);
@ -1097,7 +1097,7 @@ pub mod guarantor {
}
fn categorize_unadjusted(rcx: @mut Rcx,
expr: @ast::expr)
expr: @ast::Expr)
-> ExprCategorizationType {
debug!("categorize_unadjusted()");
@ -1121,7 +1121,7 @@ pub mod guarantor {
fn apply_autoderefs(
rcx: @mut Rcx,
expr: @ast::expr,
expr: @ast::Expr,
autoderefs: uint,
ct: ExprCategorizationType)
-> ExprCategorizationType {
@ -1199,7 +1199,7 @@ pub mod guarantor {
fn link_ref_bindings_in_pat(
rcx: @mut Rcx,
pat: @ast::pat,
pat: @ast::Pat,
guarantor: Option<ty::Region>) {
/*!
*
@ -1215,45 +1215,45 @@ pub mod guarantor {
rcx.fcx.pat_to_str(pat), guarantor);
match pat.node {
ast::pat_wild => {}
ast::pat_ident(ast::bind_by_ref(_), _, opt_p) => {
ast::PatWild => {}
ast::PatIdent(ast::BindByRef(_), _, opt_p) => {
link(rcx, pat.span, pat.id, guarantor);
for p in opt_p.iter() {
link_ref_bindings_in_pat(rcx, *p, guarantor);
}
}
ast::pat_ident(_, _, opt_p) => {
ast::PatIdent(_, _, opt_p) => {
for p in opt_p.iter() {
link_ref_bindings_in_pat(rcx, *p, guarantor);
}
}
ast::pat_enum(_, None) => {}
ast::pat_enum(_, Some(ref pats)) => {
ast::PatEnum(_, None) => {}
ast::PatEnum(_, Some(ref pats)) => {
link_ref_bindings_in_pats(rcx, pats, guarantor);
}
ast::pat_struct(_, ref fpats, _) => {
ast::PatStruct(_, ref fpats, _) => {
for fpat in fpats.iter() {
link_ref_bindings_in_pat(rcx, fpat.pat, guarantor);
}
}
ast::pat_tup(ref ps) => {
ast::PatTup(ref ps) => {
link_ref_bindings_in_pats(rcx, ps, guarantor)
}
ast::pat_box(p) => {
ast::PatBox(p) => {
link_ref_bindings_in_pat(rcx, p, None)
}
ast::pat_uniq(p) => {
ast::PatUniq(p) => {
link_ref_bindings_in_pat(rcx, p, guarantor)
}
ast::pat_region(p) => {
ast::PatRegion(p) => {
let rptr_ty = rcx.resolve_node_type(pat.id);
let r = ty::ty_region(rcx.fcx.tcx(), pat.span, rptr_ty);
link_ref_bindings_in_pat(rcx, p, Some(r));
}
ast::pat_lit(*) => {}
ast::pat_range(*) => {}
ast::pat_vec(ref before, ref slice, ref after) => {
ast::PatLit(*) => {}
ast::PatRange(*) => {}
ast::PatVec(ref before, ref slice, ref after) => {
let vec_ty = rcx.resolve_node_type(pat.id);
let vstore = ty::ty_vstore(vec_ty);
let guarantor1 = match vstore {
@ -1272,7 +1272,7 @@ pub mod guarantor {
}
fn link_ref_bindings_in_pats(rcx: @mut Rcx,
pats: &~[@ast::pat],
pats: &~[@ast::Pat],
guarantor: Option<ty::Region>) {
for pat in pats.iter() {
link_ref_bindings_in_pat(rcx, *pat, guarantor);

View file

@ -473,7 +473,7 @@ fn search_for_vtable(vcx: &VtableContext,
fn fixup_substs(vcx: &VtableContext,
location_info: &LocationInfo,
id: ast::def_id,
id: ast::DefId,
substs: ty::substs,
is_early: bool)
-> Option<ty::substs> {
@ -482,7 +482,7 @@ fn fixup_substs(vcx: &VtableContext,
let t = ty::mk_trait(tcx,
id, substs,
ty::RegionTraitStore(ty::re_static),
ast::m_imm,
ast::MutImmutable,
ty::EmptyBuiltinBounds());
do fixup_ty(vcx, location_info, t, is_early).map |t_f| {
match ty::get(*t_f).sty {
@ -516,7 +516,7 @@ fn connect_trait_tps(vcx: &VtableContext,
location_info: &LocationInfo,
impl_substs: &ty::substs,
trait_ref: @ty::TraitRef,
impl_did: ast::def_id)
impl_did: ast::DefId)
{
let tcx = vcx.tcx();
@ -538,7 +538,7 @@ fn insert_vtables(fcx: @mut FnCtxt,
fcx.inh.vtable_map.insert(callee_id, vtables);
}
pub fn location_info_for_expr(expr: @ast::expr) -> LocationInfo {
pub fn location_info_for_expr(expr: @ast::Expr) -> LocationInfo {
LocationInfo {
span: expr.span,
id: expr.id
@ -551,7 +551,7 @@ pub fn location_info_for_item(item: @ast::item) -> LocationInfo {
}
}
pub fn early_resolve_expr(ex: @ast::expr,
pub fn early_resolve_expr(ex: @ast::Expr,
fcx: @mut FnCtxt,
is_early: bool) {
debug!("vtable: early_resolve_expr() ex with id %? (early: %b): %s",
@ -560,7 +560,7 @@ pub fn early_resolve_expr(ex: @ast::expr,
let cx = fcx.ccx;
match ex.node {
ast::expr_path(*) => {
ast::ExprPath(*) => {
do fcx.opt_node_ty_substs(ex.id) |substs| {
debug!("vtable resolution on parameter bounds for expr %s",
ex.repr(fcx.tcx()));
@ -584,16 +584,16 @@ pub fn early_resolve_expr(ex: @ast::expr,
};
}
ast::expr_paren(e) => {
ast::ExprParen(e) => {
early_resolve_expr(e, fcx, is_early);
}
// Must resolve bounds on methods with bounded params
ast::expr_binary(callee_id, _, _, _) |
ast::expr_unary(callee_id, _, _) |
ast::expr_assign_op(callee_id, _, _, _) |
ast::expr_index(callee_id, _, _) |
ast::expr_method_call(callee_id, _, _, _, _, _) => {
ast::ExprBinary(callee_id, _, _, _) |
ast::ExprUnary(callee_id, _, _) |
ast::ExprAssignOp(callee_id, _, _, _) |
ast::ExprIndex(callee_id, _, _) |
ast::ExprMethodCall(callee_id, _, _, _, _, _) => {
match ty::method_call_type_param_defs(cx.tcx, fcx.inh.method_map, ex.id) {
Some(type_param_defs) => {
debug!("vtable resolution on parameter bounds for method call %s",
@ -611,17 +611,17 @@ pub fn early_resolve_expr(ex: @ast::expr,
None => ()
}
}
ast::expr_cast(src, _) => {
ast::ExprCast(src, _) => {
debug!("vtable resolution on expr %s", ex.repr(fcx.tcx()));
let target_ty = fcx.expr_ty(ex);
match ty::get(target_ty).sty {
// Bounds of type's contents are not checked here, but in kind.rs.
ty::ty_trait(target_def_id, ref target_substs, store,
target_mutbl, _bounds) => {
fn mutability_allowed(a_mutbl: ast::mutability,
b_mutbl: ast::mutability) -> bool {
fn mutability_allowed(a_mutbl: ast::Mutability,
b_mutbl: ast::Mutability) -> bool {
a_mutbl == b_mutbl ||
(a_mutbl == ast::m_mutbl && b_mutbl == ast::m_imm)
(a_mutbl == ast::MutMutable && b_mutbl == ast::MutImmutable)
}
// Look up vtables for the type we're casting to,
// passing in the source and target type. The source
@ -721,7 +721,7 @@ pub fn early_resolve_expr(ex: @ast::expr,
}
fn resolve_expr(v: &mut VtableResolveVisitor,
ex: @ast::expr,
ex: @ast::Expr,
fcx: @mut FnCtxt) {
early_resolve_expr(ex, fcx, false);
visit::walk_expr(v, ex, fcx);
@ -774,7 +774,7 @@ pub fn resolve_impl(ccx: @mut CrateCtxt, impl_item: @ast::item) {
struct VtableResolveVisitor;
impl visit::Visitor<@mut FnCtxt> for VtableResolveVisitor {
fn visit_expr(&mut self, ex:@ast::expr, e:@mut FnCtxt) {
fn visit_expr(&mut self, ex:@ast::Expr, e:@mut FnCtxt) {
resolve_expr(self, ex, e);
}
fn visit_item(&mut self, _:@ast::item, _:@mut FnCtxt) {

View file

@ -216,13 +216,13 @@ struct WbCtxt {
type wb_vt = oldvisit::vt<@mut WbCtxt>;
fn visit_stmt(s: @ast::stmt, (wbcx, v): (@mut WbCtxt, wb_vt)) {
fn visit_stmt(s: @ast::Stmt, (wbcx, v): (@mut WbCtxt, wb_vt)) {
if !wbcx.success { return; }
resolve_type_vars_for_node(wbcx, s.span, ty::stmt_node_id(s));
oldvisit::visit_stmt(s, (wbcx, v));
}
fn visit_expr(e: @ast::expr, (wbcx, v): (@mut WbCtxt, wb_vt)) {
fn visit_expr(e: @ast::Expr, (wbcx, v): (@mut WbCtxt, wb_vt)) {
if !wbcx.success {
return;
}
@ -246,20 +246,20 @@ fn visit_expr(e: @ast::expr, (wbcx, v): (@mut WbCtxt, wb_vt)) {
}
match e.node {
ast::expr_fn_block(ref decl, _) => {
ast::ExprFnBlock(ref decl, _) => {
for input in decl.inputs.iter() {
let _ = resolve_type_vars_for_node(wbcx, e.span, input.id);
}
}
ast::expr_binary(callee_id, _, _, _) |
ast::expr_unary(callee_id, _, _) |
ast::expr_assign_op(callee_id, _, _, _) |
ast::expr_index(callee_id, _, _) => {
ast::ExprBinary(callee_id, _, _, _) |
ast::ExprUnary(callee_id, _, _) |
ast::ExprAssignOp(callee_id, _, _, _) |
ast::ExprIndex(callee_id, _, _) => {
maybe_resolve_type_vars_for_node(wbcx, e.span, callee_id);
}
ast::expr_method_call(callee_id, _, _, _, _, _) => {
ast::ExprMethodCall(callee_id, _, _, _, _, _) => {
// We must always have written in a callee ID type for these.
resolve_type_vars_for_node(wbcx, e.span, callee_id);
}
@ -279,7 +279,7 @@ fn visit_block(b: &ast::Block, (wbcx, v): (@mut WbCtxt, wb_vt)) {
oldvisit::visit_block(b, (wbcx, v));
}
fn visit_pat(p: @ast::pat, (wbcx, v): (@mut WbCtxt, wb_vt)) {
fn visit_pat(p: @ast::Pat, (wbcx, v): (@mut WbCtxt, wb_vt)) {
if !wbcx.success {
return;
}
@ -329,7 +329,7 @@ fn mk_visitor() -> oldvisit::vt<@mut WbCtxt> {
.. *oldvisit::default_visitor()})
}
pub fn resolve_type_vars_in_expr(fcx: @mut FnCtxt, e: @ast::expr) -> bool {
pub fn resolve_type_vars_in_expr(fcx: @mut FnCtxt, e: @ast::Expr) -> bool {
let wbcx = @mut WbCtxt { fcx: fcx, success: true };
let visit = mk_visitor();
(visit.visit_expr)(e, (wbcx, visit));

View file

@ -35,7 +35,7 @@ use middle::typeck::infer::combine::Combine;
use middle::typeck::infer::InferCtxt;
use middle::typeck::infer::{new_infer_ctxt, resolve_ivar, resolve_type};
use middle::typeck::infer;
use syntax::ast::{Crate, def_id, def_struct, def_ty};
use syntax::ast::{Crate, DefId, DefStruct, DefTy};
use syntax::ast::{item, item_enum, item_impl, item_mod, item_struct};
use syntax::ast::{LOCAL_CRATE, trait_ref, ty_path};
use syntax::ast;
@ -123,7 +123,7 @@ pub fn type_is_defined_in_local_crate(original_type: t) -> bool {
pub fn get_base_type_def_id(inference_context: @mut InferCtxt,
span: Span,
original_type: t)
-> Option<def_id> {
-> Option<DefId> {
match get_base_type(inference_context, span, original_type) {
None => {
return None;
@ -322,7 +322,7 @@ impl CoherenceChecker {
// and trait pair. Then, for each provided method in the trait, inserts a
// `ProvidedMethodInfo` instance into the `provided_method_sources` map.
pub fn instantiate_default_methods(&self,
impl_id: ast::def_id,
impl_id: ast::DefId,
trait_ref: &ty::TraitRef,
all_methods: &mut ~[@Method]) {
let tcx = self.crate_context.tcx;
@ -378,7 +378,7 @@ impl CoherenceChecker {
}
pub fn add_inherent_impl(&self,
base_def_id: def_id,
base_def_id: DefId,
implementation: @Impl) {
let tcx = self.crate_context.tcx;
let implementation_list;
@ -396,7 +396,7 @@ impl CoherenceChecker {
}
pub fn add_trait_impl(&self,
base_def_id: def_id,
base_def_id: DefId,
implementation: @Impl) {
let tcx = self.crate_context.tcx;
let implementation_list;
@ -420,7 +420,7 @@ impl CoherenceChecker {
};
}
pub fn check_implementation_coherence_of(&self, trait_def_id: def_id) {
pub fn check_implementation_coherence_of(&self, trait_def_id: DefId) {
// Unify pairs of polytypes.
do self.iter_impls_of_trait(trait_def_id) |a| {
let implementation_a = a;
@ -452,7 +452,7 @@ impl CoherenceChecker {
}
}
pub fn iter_impls_of_trait(&self, trait_def_id: def_id, f: &fn(@Impl)) {
pub fn iter_impls_of_trait(&self, trait_def_id: DefId, f: &fn(@Impl)) {
match self.crate_context.tcx.trait_impls.find(&trait_def_id) {
Some(impls) => {
for &im in impls.iter() {
@ -533,7 +533,7 @@ impl CoherenceChecker {
visit::walk_crate(&mut visitor, crate, ());
}
pub fn trait_ref_to_trait_def_id(&self, trait_ref: &trait_ref) -> def_id {
pub fn trait_ref_to_trait_def_id(&self, trait_ref: &trait_ref) -> DefId {
let def_map = self.crate_context.tcx.def_map;
let trait_def = def_map.get_copy(&trait_ref.ref_id);
let trait_id = def_id_of_def(trait_def);
@ -545,7 +545,7 @@ impl CoherenceChecker {
pub fn check_trait_methods_are_implemented(
&self,
all_methods: &mut ~[@Method],
trait_did: def_id,
trait_did: DefId,
trait_ref_span: Span) {
let tcx = self.crate_context.tcx;
@ -575,7 +575,7 @@ impl CoherenceChecker {
match original_type.node {
ty_path(_, _, path_id) => {
match self.crate_context.tcx.def_map.get_copy(&path_id) {
def_ty(def_id) | def_struct(def_id) => {
DefTy(def_id) | DefStruct(def_id) => {
if def_id.crate != LOCAL_CRATE {
return false;
}
@ -663,8 +663,8 @@ impl CoherenceChecker {
// External crate handling
pub fn add_external_impl(&self,
impls_seen: &mut HashSet<def_id>,
impl_def_id: def_id) {
impls_seen: &mut HashSet<DefId>,
impl_def_id: DefId) {
let tcx = self.crate_context.tcx;
let implementation = @csearch::get_impl(tcx, impl_def_id);
@ -766,7 +766,7 @@ impl CoherenceChecker {
}
pub fn make_substs_for_receiver_types(tcx: ty::ctxt,
impl_id: ast::def_id,
impl_id: ast::DefId,
trait_ref: &ty::TraitRef,
method: &ty::Method)
-> ty::substs {
@ -814,11 +814,11 @@ pub fn make_substs_for_receiver_types(tcx: ty::ctxt,
}
fn subst_receiver_types_in_method_ty(tcx: ty::ctxt,
impl_id: ast::def_id,
impl_id: ast::DefId,
trait_ref: &ty::TraitRef,
new_def_id: ast::def_id,
new_def_id: ast::DefId,
method: &ty::Method,
provided_source: Option<ast::def_id>)
provided_source: Option<ast::DefId>)
-> ty::Method {
let combined_substs = make_substs_for_receiver_types(

View file

@ -79,7 +79,7 @@ impl visit::Visitor<()> for CollectItemTypesVisitor {
pub fn collect_item_types(ccx: @mut CrateCtxt, crate: &ast::Crate) {
fn collect_intrinsic_type(ccx: &CrateCtxt,
lang_item: ast::def_id) {
lang_item: ast::DefId) {
let ty::ty_param_bounds_and_ty { ty: ty, _ } =
ccx.get_item_ty(lang_item);
ccx.tcx.intrinsic_defs.insert(lang_item, ty);
@ -117,7 +117,7 @@ impl ToTy for CrateCtxt {
impl AstConv for CrateCtxt {
fn tcx(&self) -> ty::ctxt { self.tcx }
fn get_item_ty(&self, id: ast::def_id) -> ty::ty_param_bounds_and_ty {
fn get_item_ty(&self, id: ast::DefId) -> ty::ty_param_bounds_and_ty {
if id.crate != ast::LOCAL_CRATE {
csearch::get_type(self.tcx, id)
} else {
@ -136,7 +136,7 @@ impl AstConv for CrateCtxt {
}
}
fn get_trait_def(&self, id: ast::def_id) -> @ty::TraitDef {
fn get_trait_def(&self, id: ast::DefId) -> @ty::TraitDef {
get_trait_def(self, id)
}
@ -288,7 +288,7 @@ pub fn ensure_trait_methods(ccx: &CrateCtxt,
let tcx = ccx.tcx;
let dummy_defid = ast::def_id {crate: 0, node: 0};
let dummy_defid = ast::DefId {crate: 0, node: 0};
// Represents [A',B',C']
let num_trait_bounds = trait_ty_generics.type_param_defs.len();
@ -1027,7 +1027,7 @@ pub fn instantiate_trait_ref(ccx: &CrateCtxt,
let rscope = TypeRscope(rp);
match lookup_def_tcx(ccx.tcx, ast_trait_ref.path.span, ast_trait_ref.ref_id) {
ast::def_trait(trait_did) => {
ast::DefTrait(trait_did) => {
let trait_ref =
astconv::ast_path_to_trait_ref(
ccx, &rscope, trait_did, Some(self_ty), &ast_trait_ref.path);
@ -1045,7 +1045,7 @@ pub fn instantiate_trait_ref(ccx: &CrateCtxt,
}
}
fn get_trait_def(ccx: &CrateCtxt, trait_id: ast::def_id) -> @ty::TraitDef {
fn get_trait_def(ccx: &CrateCtxt, trait_id: ast::DefId) -> @ty::TraitDef {
if trait_id.crate != ast::LOCAL_CRATE {
ty::lookup_trait_def(ccx.tcx, trait_id)
} else {
@ -1276,7 +1276,7 @@ pub fn ty_generics(ccx: &CrateCtxt,
pub fn ty_of_foreign_fn_decl(ccx: &CrateCtxt,
decl: &ast::fn_decl,
def_id: ast::def_id,
def_id: ast::DefId,
ast_generics: &ast::Generics,
abis: AbiSet)
-> ty::ty_param_bounds_and_ty {

View file

@ -77,7 +77,7 @@ use middle::typeck::infer::to_str::InferStr;
use middle::typeck::infer::resolve::try_resolve_tvar_shallow;
use util::common::indenter;
use syntax::ast::m_imm;
use syntax::ast::MutImmutable;
use syntax::ast;
// Note: Coerce is not actually a combiner, in that it does not
@ -238,7 +238,7 @@ impl Coerce {
if_ok!(self.subtype(a_borrowed, b));
Ok(Some(@AutoDerefRef(AutoDerefRef {
autoderefs: 0,
autoref: Some(AutoBorrowVec(r_a, m_imm))
autoref: Some(AutoBorrowVec(r_a, MutImmutable))
})))
}
@ -275,7 +275,7 @@ impl Coerce {
a: ty::t,
sty_a: &ty::sty,
b: ty::t,
b_mutbl: ast::mutability) -> CoerceResult
b_mutbl: ast::Mutability) -> CoerceResult
{
debug!("coerce_borrowed_object(a=%s, sty_a=%?, b=%s)",
a.inf_str(self.infcx), sty_a,

View file

@ -21,7 +21,7 @@ use middle::typeck::infer::{cres, InferCtxt};
use middle::typeck::infer::{TypeTrace, Subtype};
use middle::typeck::infer::fold_regions_in_sig;
use middle::typeck::isr_alist;
use syntax::ast::{Many, Once, extern_fn, impure_fn, m_imm, m_mutbl};
use syntax::ast::{Many, Once, extern_fn, impure_fn, MutImmutable, MutMutable};
use syntax::ast::{unsafe_fn};
use syntax::ast::{Onceness, purity};
use util::common::{indenter};
@ -52,23 +52,23 @@ impl Combine for Glb {
match (a.mutbl, b.mutbl) {
// If one side or both is mut, then the GLB must use
// the precise type from the mut side.
(m_mutbl, m_mutbl) => {
(MutMutable, MutMutable) => {
eq_tys(self, a.ty, b.ty).then(|| {
Ok(ty::mt {ty: a.ty, mutbl: m_mutbl})
Ok(ty::mt {ty: a.ty, mutbl: MutMutable})
})
}
// If one side or both is immutable, we can use the GLB of
// both sides but mutbl must be `m_imm`.
(m_imm, m_imm) => {
// both sides but mutbl must be `MutImmutable`.
(MutImmutable, MutImmutable) => {
self.tys(a.ty, b.ty).chain(|t| {
Ok(ty::mt {ty: t, mutbl: m_imm})
Ok(ty::mt {ty: t, mutbl: MutImmutable})
})
}
// There is no mutual subtype of these combinations.
(m_mutbl, m_imm) |
(m_imm, m_mutbl) => {
(MutMutable, MutImmutable) |
(MutImmutable, MutMutable) => {
Err(ty::terr_mutability)
}
}

View file

@ -61,11 +61,11 @@ impl Combine for Lub {
let m = a.mutbl;
match m {
m_imm => {
MutImmutable => {
self.tys(a.ty, b.ty).chain(|t| Ok(ty::mt {ty: t, mutbl: m}) )
}
m_mutbl => {
MutMutable => {
self.infcx.try(|| {
eq_tys(self, a.ty, b.ty).then(|| {
Ok(ty::mt {ty: a.ty, mutbl: m})

View file

@ -41,7 +41,7 @@ use std::result;
use std::vec;
use extra::list::Nil;
use extra::smallintmap::SmallIntMap;
use syntax::ast::{m_imm, m_mutbl};
use syntax::ast::{MutImmutable, MutMutable};
use syntax::ast;
use syntax::codemap;
use syntax::codemap::Span;
@ -106,7 +106,7 @@ pub enum TypeOrigin {
MethodCompatCheck(Span),
// Checking that this expression can be assigned where it needs to be
ExprAssignable(@ast::expr),
ExprAssignable(@ast::Expr),
// Relating trait refs when resolving vtables
RelateTraitRefs(Span),
@ -678,7 +678,7 @@ impl InferCtxt {
trait_ref.def_id,
trait_ref.substs.clone(),
ty::UniqTraitStore,
ast::m_imm,
ast::MutImmutable,
ty::EmptyBuiltinBounds());
let dummy1 = self.resolve_type_vars_if_possible(dummy0);
match ty::get(dummy1).sty {

View file

@ -72,12 +72,12 @@ impl Combine for Sub {
}
match b.mutbl {
m_mutbl => {
MutMutable => {
// If supertype is mut, subtype must match exactly
// (i.e., invariant if mut):
eq_tys(self, a.ty, b.ty).then(|| Ok(*a))
}
m_imm => {
MutImmutable => {
// Otherwise we can be covariant:
self.tys(a.ty, b.ty).chain(|_t| Ok(*a) )
}

View file

@ -82,7 +82,7 @@ pub enum param_index {
#[deriving(Clone, Encodable, Decodable)]
pub enum method_origin {
// fully statically resolved method
method_static(ast::def_id),
method_static(ast::DefId),
// method invoked on a type parameter with a bounded trait
method_param(method_param),
@ -97,7 +97,7 @@ pub enum method_origin {
#[deriving(Clone, Encodable, Decodable)]
pub struct method_param {
// the trait containing the method to be invoked
trait_id: ast::def_id,
trait_id: ast::DefId,
// index of the method to be invoked amongst the trait's methods
method_num: uint,
@ -114,10 +114,10 @@ pub struct method_param {
#[deriving(Clone, Encodable, Decodable)]
pub struct method_object {
// the (super)trait containing the method to be invoked
trait_id: ast::def_id,
trait_id: ast::DefId,
// the actual base trait id of the object
object_trait_id: ast::def_id,
object_trait_id: ast::DefId,
// index of the method to be invoked amongst the trait's methods
method_num: uint,
@ -161,7 +161,7 @@ pub enum vtable_origin {
from whence comes the vtable, and tys are the type substs.
vtable_res is the vtable itself
*/
vtable_static(ast::def_id, ~[ty::t], vtable_res),
vtable_static(ast::DefId, ~[ty::t], vtable_res),
/*
Dynamic vtable, comes from a parameter that has a bound on it:
@ -214,7 +214,7 @@ impl Repr for impl_res {
}
}
pub type impl_vtable_map = @mut HashMap<ast::def_id, impl_res>;
pub type impl_vtable_map = @mut HashMap<ast::DefId, impl_res>;
pub struct CrateCtxt {
// A mapping from method call sites to traits that have that method.
@ -249,7 +249,7 @@ pub fn write_tpt_to_tcx(tcx: ty::ctxt,
}
}
pub fn lookup_def_tcx(tcx: ty::ctxt, sp: Span, id: ast::NodeId) -> ast::def {
pub fn lookup_def_tcx(tcx: ty::ctxt, sp: Span, id: ast::NodeId) -> ast::Def {
match tcx.def_map.find(&id) {
Some(&x) => x,
_ => {
@ -259,7 +259,7 @@ pub fn lookup_def_tcx(tcx: ty::ctxt, sp: Span, id: ast::NodeId) -> ast::def {
}
pub fn lookup_def_ccx(ccx: &CrateCtxt, sp: Span, id: ast::NodeId)
-> ast::def {
-> ast::Def {
lookup_def_tcx(ccx.tcx, sp, id)
}

View file

@ -54,23 +54,23 @@ pub fn indenter() -> _indenter {
_indenter(())
}
pub fn field_expr(f: ast::Field) -> @ast::expr { return f.expr; }
pub fn field_expr(f: ast::Field) -> @ast::Expr { return f.expr; }
pub fn field_exprs(fields: ~[ast::Field]) -> ~[@ast::expr] {
pub fn field_exprs(fields: ~[ast::Field]) -> ~[@ast::Expr] {
fields.map(|f| f.expr)
}
struct LoopQueryVisitor {
p: @fn(&ast::expr_) -> bool
p: @fn(&ast::Expr_) -> bool
}
impl Visitor<@mut bool> for LoopQueryVisitor {
fn visit_expr(&mut self, e:@ast::expr, flag:@mut bool) {
fn visit_expr(&mut self, e:@ast::Expr, flag:@mut bool) {
*flag |= (self.p)(&e.node);
match e.node {
// Skip inner loops, since a break in the inner loop isn't a
// break inside the outer loop
ast::expr_loop(*) | ast::expr_while(*) => {}
ast::ExprLoop(*) | ast::ExprWhile(*) => {}
_ => visit::walk_expr(self, e, flag)
}
}
@ -78,7 +78,7 @@ impl Visitor<@mut bool> for LoopQueryVisitor {
// Takes a predicate p, returns true iff p is true for any subexpressions
// of b -- skipping any inner loops (loop, while, loop_body)
pub fn loop_query(b: &ast::Block, p: @fn(&ast::expr_) -> bool) -> bool {
pub fn loop_query(b: &ast::Block, p: @fn(&ast::Expr_) -> bool) -> bool {
let rs = @mut false;
let mut v = LoopQueryVisitor { p: p };
visit::walk_block(&mut v, b, rs);
@ -86,11 +86,11 @@ pub fn loop_query(b: &ast::Block, p: @fn(&ast::expr_) -> bool) -> bool {
}
struct BlockQueryVisitor {
p: @fn(@ast::expr) -> bool
p: @fn(@ast::Expr) -> bool
}
impl Visitor<@mut bool> for BlockQueryVisitor {
fn visit_expr(&mut self, e:@ast::expr, flag:@mut bool) {
fn visit_expr(&mut self, e:@ast::Expr, flag:@mut bool) {
*flag |= (self.p)(e);
visit::walk_expr(self, e, flag)
}
@ -98,7 +98,7 @@ impl Visitor<@mut bool> for BlockQueryVisitor {
// Takes a predicate p, returns true iff p is true for any subexpressions
// of b -- skipping any inner loops (loop, while, loop_body)
pub fn block_query(b: &ast::Block, p: @fn(@ast::expr) -> bool) -> bool {
pub fn block_query(b: &ast::Block, p: @fn(@ast::Expr) -> bool) -> bool {
let rs = @mut false;
let mut v = BlockQueryVisitor { p: p };
visit::walk_block(&mut v, b, rs);

View file

@ -81,11 +81,11 @@ pub fn explain_region_and_span(cx: ctxt, region: ty::Region)
}
Some(&ast_map::node_expr(expr)) => {
match expr.node {
ast::expr_call(*) => explain_span(cx, "call", expr.span),
ast::expr_method_call(*) => {
ast::ExprCall(*) => explain_span(cx, "call", expr.span),
ast::ExprMethodCall(*) => {
explain_span(cx, "method call", expr.span)
},
ast::expr_match(*) => explain_span(cx, "match", expr.span),
ast::ExprMatch(*) => explain_span(cx, "match", expr.span),
_ => explain_span(cx, "expression", expr.span)
}
}
@ -173,18 +173,18 @@ pub fn re_scope_id_to_str(cx: ctxt, node_id: ast::NodeId) -> ~str {
}
Some(&ast_map::node_expr(expr)) => {
match expr.node {
ast::expr_call(*) => {
ast::ExprCall(*) => {
fmt!("<call at %s>",
cx.sess.codemap.span_to_str(expr.span))
}
ast::expr_match(*) => {
ast::ExprMatch(*) => {
fmt!("<match at %s>",
cx.sess.codemap.span_to_str(expr.span))
}
ast::expr_assign_op(*) |
ast::expr_unary(*) |
ast::expr_binary(*) |
ast::expr_index(*) => {
ast::ExprAssignOp(*) |
ast::ExprUnary(*) |
ast::ExprBinary(*) |
ast::ExprIndex(*) => {
fmt!("<method at %s>",
cx.sess.codemap.span_to_str(expr.span))
}
@ -235,10 +235,10 @@ pub fn region_to_str(cx: ctxt, prefix: &str, space: bool, region: Region) -> ~st
}
}
fn mutability_to_str(m: ast::mutability) -> ~str {
fn mutability_to_str(m: ast::Mutability) -> ~str {
match m {
ast::m_mutbl => ~"mut ",
ast::m_imm => ~"",
ast::MutMutable => ~"mut ",
ast::MutImmutable => ~"",
}
}
@ -613,7 +613,7 @@ impl Repr for ty::TraitRef {
}
}
impl Repr for ast::expr {
impl Repr for ast::Expr {
fn repr(&self, tcx: ctxt) -> ~str {
fmt!("expr(%d: %s)",
self.id,
@ -621,7 +621,7 @@ impl Repr for ast::expr {
}
}
impl Repr for ast::pat {
impl Repr for ast::Pat {
fn repr(&self, tcx: ctxt) -> ~str {
fmt!("pat(%d: %s)",
self.id,
@ -641,7 +641,7 @@ impl Repr for ty::Region {
}
}
impl Repr for ast::def_id {
impl Repr for ast::DefId {
fn repr(&self, tcx: ctxt) -> ~str {
// Unfortunately, there seems to be no way to attempt to print
// a path for a def-id, so I'll just make a best effort for now