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

View file

@ -295,7 +295,7 @@ impl Program {
// &T encoded will decode to T, so we need to be sure to
// re-take a loan after decoding
ty::ty_rptr(_, mt) => {
if mt.mutbl == ast::m_mutbl {
if mt.mutbl == ast::MutMutable {
tystr.push_str("&mut ");
} else {
tystr.push_str("&");
@ -354,9 +354,9 @@ impl Program {
do find_user_block(blk) |blk| {
for stmt in blk.stmts.iter() {
match stmt.node {
ast::stmt_decl(d, _) => {
ast::StmtDecl(d, _) => {
match d.node {
ast::decl_local(l) => { f(l); }
ast::DeclLocal(l) => { f(l); }
_ => {}
}
}
@ -369,9 +369,9 @@ impl Program {
fn find_user_block(blk: &ast::Block, f: &fn(&ast::Block)) {
for stmt in blk.stmts.iter() {
match stmt.node {
ast::stmt_semi(e, _) => {
ast::StmtSemi(e, _) => {
match e.node {
ast::expr_block(ref blk) => { return f(blk); }
ast::ExprBlock(ref blk) => { return f(blk); }
_ => {}
}
}

View file

@ -166,9 +166,9 @@ fn run(mut program: ~Program, binary: ~str, lib_search_paths: ~[~str],
for stmt in blk.stmts.iter() {
let s = do with_pp(intr) |pp, _| { pprust::print_stmt(pp, *stmt); };
match stmt.node {
ast::stmt_decl(d, _) => {
ast::StmtDecl(d, _) => {
match d.node {
ast::decl_item(it) => {
ast::DeclItem(it) => {
let name = sess.str_of(it.ident);
match it.node {
// Structs are treated specially because to make
@ -184,7 +184,7 @@ fn run(mut program: ~Program, binary: ~str, lib_search_paths: ~[~str],
// Local declarations must be specially dealt with,
// record all local declarations for use later on
ast::decl_local(l) => {
ast::DeclLocal(l) => {
let mutbl = l.is_mutbl;
do each_binding(l) |path, _| {
let s = do with_pp(intr) |pp, _| {
@ -198,7 +198,7 @@ fn run(mut program: ~Program, binary: ~str, lib_search_paths: ~[~str],
}
// run statements with expressions (they have effects)
ast::stmt_mac(*) | ast::stmt_semi(*) | ast::stmt_expr(*) => {
ast::StmtMac(*) | ast::StmtSemi(*) | ast::StmtExpr(*) => {
to_run.push(s);
}
}

View file

@ -20,9 +20,9 @@ struct EachBindingVisitor {
}
impl visit::Visitor<()> for EachBindingVisitor {
fn visit_pat(&mut self, pat:@ast::pat, _:()) {
fn visit_pat(&mut self, pat:@ast::Pat, _:()) {
match pat.node {
ast::pat_ident(_, ref path, _) => {
ast::PatIdent(_, ref path, _) => {
(self.f)(path, pat.id);
}
_ => {}

View file

@ -29,7 +29,7 @@ pub struct Ident { name: Name, ctxt: SyntaxContext }
impl Ident {
/// Construct an identifier with the given name and an empty context:
pub fn new(name: Name) -> Ident { Ident {name: name, ctxt: empty_ctxt}}
pub fn new(name: Name) -> Ident { Ident {name: name, ctxt: EMPTY_CTXT}}
}
/// A SyntaxContext represents a chain of macro-expandings
@ -52,9 +52,10 @@ pub struct SCTable {
mark_memo : HashMap<(SyntaxContext,Mrk),SyntaxContext>,
rename_memo : HashMap<(SyntaxContext,Ident,Name),SyntaxContext>
}
// NB: these must be placed in any SCTable...
pub static empty_ctxt : uint = 0;
pub static illegal_ctxt : uint = 1;
pub static EMPTY_CTXT : uint = 0;
pub static ILLEGAL_CTXT : uint = 1;
#[deriving(Eq, Encodable, Decodable,IterBytes)]
pub enum SyntaxContext_ {
@ -69,7 +70,7 @@ pub enum SyntaxContext_ {
// in the "from" slot. In essence, they're all
// pointers to a single "rename" event node.
Rename (Ident,Name,SyntaxContext),
IllegalCtxt()
IllegalCtxt
}
/// A name is a part of an identifier, representing a string or gensym. It's
@ -92,7 +93,7 @@ impl<D:Decoder> Decodable<D> for Ident {
}
/// Function name (not all functions have names)
pub type fn_ident = Option<Ident>;
pub type FnIdent = Option<Ident>;
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub struct Lifetime {
@ -133,7 +134,7 @@ pub type CrateNum = int;
pub type NodeId = int;
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes, ToStr)]
pub struct def_id {
pub struct DefId {
crate: CrateNum,
node: NodeId,
}
@ -178,40 +179,39 @@ impl Generics {
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum MethodProvenance {
FromTrait(def_id),
FromImpl(def_id),
FromTrait(DefId),
FromImpl(DefId),
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum def {
def_fn(def_id, purity),
def_static_method(/* method */ def_id, MethodProvenance, purity),
def_self(NodeId),
def_self_ty(/* trait id */ NodeId),
def_mod(def_id),
def_foreign_mod(def_id),
def_static(def_id, bool /* is_mutbl */),
def_arg(NodeId, bool /* is_mutbl */),
def_local(NodeId, bool /* is_mutbl */),
def_variant(def_id /* enum */, def_id /* variant */),
def_ty(def_id),
def_trait(def_id),
def_prim_ty(prim_ty),
def_ty_param(def_id, uint),
def_binding(NodeId, binding_mode),
def_use(def_id),
def_upvar(NodeId, // id of closed over var
@def, // closed over def
pub enum Def {
DefFn(DefId, purity),
DefStaticMethod(/* method */ DefId, MethodProvenance, purity),
DefSelf(NodeId),
DefSelfTy(/* trait id */ NodeId),
DefMod(DefId),
DefForeignMod(DefId),
DefStatic(DefId, bool /* is_mutbl */),
DefArg(NodeId, bool /* is_mutbl */),
DefLocal(NodeId, bool /* is_mutbl */),
DefVariant(DefId /* enum */, DefId /* variant */),
DefTy(DefId),
DefTrait(DefId),
DefPrimTy(prim_ty),
DefTyParam(DefId, uint),
DefBinding(NodeId, BindingMode),
DefUse(DefId),
DefUpvar(NodeId, // id of closed over var
@Def, // closed over def
NodeId, // expr node that creates the closure
NodeId), // id for the block/body of the closure expr
def_struct(def_id),
def_typaram_binder(NodeId), /* struct, impl or trait with ty params */
def_region(NodeId),
def_label(NodeId),
def_method(def_id /* method */, Option<def_id> /* trait */),
DefStruct(DefId),
DefTyParamBinder(NodeId), /* struct, impl or trait with ty params */
DefRegion(NodeId),
DefLabel(NodeId),
DefMethod(DefId /* method */, Option<DefId> /* trait */),
}
// The set of MetaItems that define the compilation environment of the crate,
// used to drive conditional compilation
pub type CrateConfig = ~[@MetaItem];
@ -261,35 +261,35 @@ impl Eq for MetaItem_ {
#[deriving(Clone, Eq, Encodable, Decodable,IterBytes)]
pub struct Block {
view_items: ~[view_item],
stmts: ~[@stmt],
expr: Option<@expr>,
stmts: ~[@Stmt],
expr: Option<@Expr>,
id: NodeId,
rules: BlockCheckMode,
span: Span,
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub struct pat {
pub struct Pat {
id: NodeId,
node: pat_,
node: Pat_,
span: Span,
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub struct field_pat {
pub struct FieldPat {
ident: Ident,
pat: @pat,
pat: @Pat,
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum binding_mode {
bind_by_ref(mutability),
bind_infer
pub enum BindingMode {
BindByRef(Mutability),
BindInfer
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum pat_ {
pat_wild,
pub enum Pat_ {
PatWild,
// A pat_ident may either be a new bound variable,
// or a nullary enum (in which case the second field
// is None).
@ -297,25 +297,25 @@ pub enum pat_ {
// which it is. The resolver determines this, and
// records this pattern's NodeId in an auxiliary
// set (of "pat_idents that refer to nullary enums")
pat_ident(binding_mode, Path, Option<@pat>),
pat_enum(Path, Option<~[@pat]>), /* "none" means a * pattern where
PatIdent(BindingMode, Path, Option<@Pat>),
PatEnum(Path, Option<~[@Pat]>), /* "none" means a * pattern where
* we don't bind the fields to names */
pat_struct(Path, ~[field_pat], bool),
pat_tup(~[@pat]),
pat_box(@pat),
pat_uniq(@pat),
pat_region(@pat), // borrowed pointer pattern
pat_lit(@expr),
pat_range(@expr, @expr),
PatStruct(Path, ~[FieldPat], bool),
PatTup(~[@Pat]),
PatBox(@Pat),
PatUniq(@Pat),
PatRegion(@Pat), // borrowed pointer pattern
PatLit(@Expr),
PatRange(@Expr, @Expr),
// [a, b, ..i, y, z] is represented as
// pat_vec(~[a, b], Some(i), ~[y, z])
pat_vec(~[@pat], Option<@pat>, ~[@pat])
PatVec(~[@Pat], Option<@Pat>, ~[@Pat])
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum mutability {
m_mutbl,
m_imm,
pub enum Mutability {
MutMutable,
MutImmutable,
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
@ -336,69 +336,69 @@ impl ToStr for Sigil {
}
#[deriving(Eq, Encodable, Decodable, IterBytes)]
pub enum vstore {
pub enum Vstore {
// FIXME (#3469): Change uint to @expr (actually only constant exprs)
vstore_fixed(Option<uint>), // [1,2,3,4]
vstore_uniq, // ~[1,2,3,4]
vstore_box, // @[1,2,3,4]
vstore_slice(Option<Lifetime>) // &'foo? [1,2,3,4]
VstoreFixed(Option<uint>), // [1,2,3,4]
VstoreUniq, // ~[1,2,3,4]
VstoreBox, // @[1,2,3,4]
VstoreSlice(Option<Lifetime>) // &'foo? [1,2,3,4]
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum expr_vstore {
expr_vstore_uniq, // ~[1,2,3,4]
expr_vstore_box, // @[1,2,3,4]
expr_vstore_mut_box, // @mut [1,2,3,4]
expr_vstore_slice, // &[1,2,3,4]
expr_vstore_mut_slice, // &mut [1,2,3,4]
pub enum ExprVstore {
ExprVstoreUniq, // ~[1,2,3,4]
ExprVstoreBox, // @[1,2,3,4]
ExprVstoreMutBox, // @mut [1,2,3,4]
ExprVstoreSlice, // &[1,2,3,4]
ExprVstoreMutSlice, // &mut [1,2,3,4]
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum binop {
add,
subtract,
mul,
div,
rem,
and,
or,
bitxor,
bitand,
bitor,
shl,
shr,
eq,
lt,
le,
ne,
ge,
gt,
pub enum BinOp {
BiAdd,
BiSub,
BiMul,
BiDiv,
BiRem,
BiAnd,
BiOr,
BiBitXor,
BiBitAnd,
BiBitOr,
BiShl,
BiShr,
BiEq,
BiLt,
BiLe,
BiNe,
BiGe,
BiGt,
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum unop {
box(mutability),
uniq,
deref,
not,
neg
pub enum UnOp {
UnBox(Mutability),
UnUniq,
UnDeref,
UnNot,
UnNeg
}
pub type stmt = Spanned<stmt_>;
pub type Stmt = Spanned<Stmt_>;
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum stmt_ {
pub enum Stmt_ {
// could be an item or a local (let) binding:
stmt_decl(@decl, NodeId),
StmtDecl(@Decl, NodeId),
// expr without trailing semi-colon (must have unit type):
stmt_expr(@expr, NodeId),
StmtExpr(@Expr, NodeId),
// expr with trailing semi-colon (may have any type):
stmt_semi(@expr, NodeId),
StmtSemi(@Expr, NodeId),
// bool: is there a trailing sem-colon?
stmt_mac(mac, bool),
StmtMac(mac, bool),
}
// FIXME (pending discussion of #1697, #2178...): local should really be
@ -407,33 +407,33 @@ pub enum stmt_ {
pub struct Local {
is_mutbl: bool,
ty: Ty,
pat: @pat,
init: Option<@expr>,
pat: @Pat,
init: Option<@Expr>,
id: NodeId,
span: Span,
}
pub type decl = Spanned<decl_>;
pub type Decl = Spanned<Decl_>;
#[deriving(Eq, Encodable, Decodable,IterBytes)]
pub enum decl_ {
pub enum Decl_ {
// a local (let) binding:
decl_local(@Local),
DeclLocal(@Local),
// an item binding:
decl_item(@item),
DeclItem(@item),
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub struct arm {
pats: ~[@pat],
guard: Option<@expr>,
pub struct Arm {
pats: ~[@Pat],
guard: Option<@Expr>,
body: Block,
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub struct Field {
ident: Ident,
expr: @expr,
expr: @Expr,
span: Span,
}
@ -444,20 +444,20 @@ pub enum BlockCheckMode {
}
#[deriving(Eq, Encodable, Decodable,IterBytes)]
pub struct expr {
pub struct Expr {
id: NodeId,
node: expr_,
node: Expr_,
span: Span,
}
impl expr {
impl Expr {
pub fn get_callee_id(&self) -> Option<NodeId> {
match self.node {
expr_method_call(callee_id, _, _, _, _, _) |
expr_index(callee_id, _, _) |
expr_binary(callee_id, _, _, _) |
expr_assign_op(callee_id, _, _, _) |
expr_unary(callee_id, _, _) => Some(callee_id),
ExprMethodCall(callee_id, _, _, _, _, _) |
ExprIndex(callee_id, _, _) |
ExprBinary(callee_id, _, _, _) |
ExprAssignOp(callee_id, _, _, _) |
ExprUnary(callee_id, _, _) => Some(callee_id),
_ => None,
}
}
@ -471,54 +471,54 @@ pub enum CallSugar {
}
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum expr_ {
expr_vstore(@expr, expr_vstore),
expr_vec(~[@expr], mutability),
expr_call(@expr, ~[@expr], CallSugar),
expr_method_call(NodeId, @expr, Ident, ~[Ty], ~[@expr], CallSugar),
expr_tup(~[@expr]),
expr_binary(NodeId, binop, @expr, @expr),
expr_unary(NodeId, unop, @expr),
expr_lit(@lit),
expr_cast(@expr, Ty),
expr_if(@expr, Block, Option<@expr>),
expr_while(@expr, Block),
expr_for_loop(@pat, @expr, Block),
pub enum Expr_ {
ExprVstore(@Expr, ExprVstore),
ExprVec(~[@Expr], Mutability),
ExprCall(@Expr, ~[@Expr], CallSugar),
ExprMethodCall(NodeId, @Expr, Ident, ~[Ty], ~[@Expr], CallSugar),
ExprTup(~[@Expr]),
ExprBinary(NodeId, BinOp, @Expr, @Expr),
ExprUnary(NodeId, UnOp, @Expr),
ExprLit(@lit),
ExprCast(@Expr, Ty),
ExprIf(@Expr, Block, Option<@Expr>),
ExprWhile(@Expr, Block),
ExprForLoop(@Pat, @Expr, Block),
/* Conditionless loop (can be exited with break, cont, or ret)
Same semantics as while(true) { body }, but typestate knows that the
(implicit) condition is always true. */
expr_loop(Block, Option<Ident>),
expr_match(@expr, ~[arm]),
expr_fn_block(fn_decl, Block),
expr_do_body(@expr),
expr_block(Block),
ExprLoop(Block, Option<Ident>),
ExprMatch(@Expr, ~[Arm]),
ExprFnBlock(fn_decl, Block),
ExprDoBody(@Expr),
ExprBlock(Block),
expr_assign(@expr, @expr),
expr_assign_op(NodeId, binop, @expr, @expr),
expr_field(@expr, Ident, ~[Ty]),
expr_index(NodeId, @expr, @expr),
expr_path(Path),
ExprAssign(@Expr, @Expr),
ExprAssignOp(NodeId, BinOp, @Expr, @Expr),
ExprField(@Expr, Ident, ~[Ty]),
ExprIndex(NodeId, @Expr, @Expr),
ExprPath(Path),
/// The special identifier `self`.
expr_self,
expr_addr_of(mutability, @expr),
expr_break(Option<Ident>),
expr_again(Option<Ident>),
expr_ret(Option<@expr>),
expr_log(@expr, @expr),
ExprSelf,
ExprAddrOf(Mutability, @Expr),
ExprBreak(Option<Ident>),
ExprAgain(Option<Ident>),
ExprRet(Option<@Expr>),
ExprLog(@Expr, @Expr),
expr_inline_asm(inline_asm),
ExprInlineAsm(inline_asm),
expr_mac(mac),
ExprMac(mac),
// A struct literal expression.
expr_struct(Path, ~[Field], Option<@expr> /* base */),
ExprStruct(Path, ~[Field], Option<@Expr> /* base */),
// A vector literal constructed from one repeated element.
expr_repeat(@expr /* element */, @expr /* count */, mutability),
ExprRepeat(@Expr /* element */, @Expr /* count */, Mutability),
// No-op: used solely so we can pretty-print faithfully
expr_paren(@expr)
ExprParen(@Expr)
}
// When the main rust parser encounters a syntax-extension invocation, it
@ -646,7 +646,7 @@ pub enum lit_ {
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub struct mt {
ty: ~Ty,
mutbl: mutability,
mutbl: Mutability,
}
#[deriving(Eq, Encodable, Decodable,IterBytes)]
@ -785,7 +785,7 @@ pub enum ty_ {
ty_box(mt),
ty_uniq(mt),
ty_vec(mt),
ty_fixed_length_vec(mt, @expr),
ty_fixed_length_vec(mt, @Expr),
ty_ptr(mt),
ty_rptr(Option<Lifetime>, mt),
ty_closure(@TyClosure),
@ -793,7 +793,7 @@ pub enum ty_ {
ty_tup(~[Ty]),
ty_path(Path, Option<OptVec<TyParamBound>>, NodeId), // for #7264; see above
ty_mac(mac),
ty_typeof(@expr),
ty_typeof(@Expr),
// ty_infer means the type should be inferred instead of it having been
// specified. This should only appear at the "top level" of a type and not
// nested in one.
@ -810,8 +810,8 @@ pub enum asm_dialect {
pub struct inline_asm {
asm: @str,
clobbers: @str,
inputs: ~[(@str, @expr)],
outputs: ~[(@str, @expr)],
inputs: ~[(@str, @Expr)],
outputs: ~[(@str, @Expr)],
volatile: bool,
alignstack: bool,
dialect: asm_dialect
@ -821,7 +821,7 @@ pub struct inline_asm {
pub struct arg {
is_mutbl: bool,
ty: Ty,
pat: @pat,
pat: @Pat,
id: NodeId,
}
@ -861,8 +861,8 @@ pub enum ret_style {
pub enum explicit_self_ {
sty_static, // no self
sty_value, // `self`
sty_region(Option<Lifetime>, mutability), // `&'lt self`
sty_box(mutability), // `@self`
sty_region(Option<Lifetime>, Mutability), // `&'lt self`
sty_box(Mutability), // `@self`
sty_uniq // `~self`
}
@ -927,7 +927,7 @@ pub struct variant_ {
attrs: ~[Attribute],
kind: variant_kind,
id: NodeId,
disr_expr: Option<@expr>,
disr_expr: Option<@Expr>,
vis: visibility,
}
@ -1067,7 +1067,7 @@ pub struct item {
#[deriving(Clone, Eq, Encodable, Decodable, IterBytes)]
pub enum item_ {
item_static(Ty, mutability, @expr),
item_static(Ty, Mutability, @Expr),
item_fn(fn_decl, purity, AbiSet, Generics, Block),
item_mod(_mod),
item_foreign_mod(foreign_mod),
@ -1105,7 +1105,7 @@ pub enum foreign_item_ {
#[deriving(Eq, Encodable, Decodable,IterBytes)]
pub enum inlined_item {
ii_item(@item),
ii_method(def_id /* impl id */, bool /* is provided */, @method),
ii_method(DefId /* impl id */, bool /* is provided */, @method),
ii_foreign(@foreign_item),
}

View file

@ -67,17 +67,17 @@ pub fn path_elt_to_str(pe: path_elt, itr: @ident_interner) -> ~str {
pub enum ast_node {
node_item(@item, @path),
node_foreign_item(@foreign_item, AbiSet, visibility, @path),
node_trait_method(@trait_method, def_id /* trait did */,
node_trait_method(@trait_method, DefId /* trait did */,
@path /* path to the trait */),
node_method(@method, def_id /* impl did */, @path /* path to the impl */),
node_method(@method, DefId /* impl did */, @path /* path to the impl */),
node_variant(variant, @item, @path),
node_expr(@expr),
node_stmt(@stmt),
node_expr(@Expr),
node_stmt(@Stmt),
node_arg,
node_local(Ident),
node_block(Block),
node_struct_ctor(@struct_def, @item, @path),
node_callee_scope(@expr)
node_callee_scope(@Expr)
}
pub type map = @mut HashMap<NodeId, ast_node>;
@ -94,7 +94,7 @@ impl Ctx {
}
fn map_method(&mut self,
impl_did: def_id,
impl_did: DefId,
impl_path: @path,
m: @method,
is_provided: bool) {
@ -130,7 +130,7 @@ impl Ctx {
}
}
fn map_expr(&mut self, ex: @expr) {
fn map_expr(&mut self, ex: @Expr) {
self.map.insert(ex.id, node_expr(ex));
// Expressions which are or might be calls:
@ -156,7 +156,7 @@ impl Ctx {
visit::walk_fn(self, fk, decl, body, sp, id, ());
}
fn map_stmt(&mut self, stmt: @stmt) {
fn map_stmt(&mut self, stmt: @Stmt) {
self.map.insert(stmt_id(stmt), node_stmt(stmt));
visit::walk_stmt(self, stmt, ());
}
@ -167,9 +167,9 @@ impl Ctx {
visit::walk_block(self, b, ());
}
fn map_pat(&mut self, pat: @pat) {
fn map_pat(&mut self, pat: @Pat) {
match pat.node {
pat_ident(_, ref path, _) => {
PatIdent(_, ref path, _) => {
// Note: this is at least *potentially* a pattern...
self.map.insert(pat.id,
node_local(ast_util::path_to_ident(path)));
@ -265,16 +265,16 @@ impl Visitor<()> for Ctx {
self.path.pop();
}
fn visit_pat(&mut self, pat: @pat, _: ()) {
fn visit_pat(&mut self, pat: @Pat, _: ()) {
self.map_pat(pat);
visit::walk_pat(self, pat, ())
}
fn visit_expr(&mut self, expr: @expr, _: ()) {
fn visit_expr(&mut self, expr: @Expr, _: ()) {
self.map_expr(expr)
}
fn visit_stmt(&mut self, stmt: @stmt, _: ()) {
fn visit_stmt(&mut self, stmt: @Stmt, _: ()) {
self.map_stmt(stmt)
}
@ -310,15 +310,15 @@ impl Visitor<()> for Ctx {
visit::walk_local(self, local, ())
}
fn visit_arm(&mut self, arm: &arm, _: ()) {
fn visit_arm(&mut self, arm: &Arm, _: ()) {
visit::walk_arm(self, arm, ())
}
fn visit_decl(&mut self, decl: @decl, _: ()) {
fn visit_decl(&mut self, decl: @Decl, _: ()) {
visit::walk_decl(self, decl, ())
}
fn visit_expr_post(&mut self, _: @expr, _: ()) {
fn visit_expr_post(&mut self, _: @Expr, _: ()) {
// Empty!
}

View file

@ -32,121 +32,121 @@ pub fn path_to_ident(path: &Path) -> Ident {
path.segments.last().identifier
}
pub fn local_def(id: NodeId) -> def_id {
ast::def_id { crate: LOCAL_CRATE, node: id }
pub fn local_def(id: NodeId) -> DefId {
ast::DefId { crate: LOCAL_CRATE, node: id }
}
pub fn is_local(did: ast::def_id) -> bool { did.crate == LOCAL_CRATE }
pub fn is_local(did: ast::DefId) -> bool { did.crate == LOCAL_CRATE }
pub fn stmt_id(s: &stmt) -> NodeId {
pub fn stmt_id(s: &Stmt) -> NodeId {
match s.node {
stmt_decl(_, id) => id,
stmt_expr(_, id) => id,
stmt_semi(_, id) => id,
stmt_mac(*) => fail!("attempted to analyze unexpanded stmt")
StmtDecl(_, id) => id,
StmtExpr(_, id) => id,
StmtSemi(_, id) => id,
StmtMac(*) => fail!("attempted to analyze unexpanded stmt")
}
}
pub fn variant_def_ids(d: def) -> Option<(def_id, def_id)> {
pub fn variant_def_ids(d: Def) -> Option<(DefId, DefId)> {
match d {
def_variant(enum_id, var_id) => {
DefVariant(enum_id, var_id) => {
Some((enum_id, var_id))
}
_ => None
}
}
pub fn def_id_of_def(d: def) -> def_id {
pub fn def_id_of_def(d: Def) -> DefId {
match d {
def_fn(id, _) | def_static_method(id, _, _) | def_mod(id) |
def_foreign_mod(id) | def_static(id, _) |
def_variant(_, id) | def_ty(id) | def_ty_param(id, _) |
def_use(id) | def_struct(id) | def_trait(id) | def_method(id, _) => {
DefFn(id, _) | DefStaticMethod(id, _, _) | DefMod(id) |
DefForeignMod(id) | DefStatic(id, _) |
DefVariant(_, id) | DefTy(id) | DefTyParam(id, _) |
DefUse(id) | DefStruct(id) | DefTrait(id) | DefMethod(id, _) => {
id
}
def_arg(id, _) | def_local(id, _) | def_self(id) | def_self_ty(id)
| def_upvar(id, _, _, _) | def_binding(id, _) | def_region(id)
| def_typaram_binder(id) | def_label(id) => {
DefArg(id, _) | DefLocal(id, _) | DefSelf(id) | DefSelfTy(id)
| DefUpvar(id, _, _, _) | DefBinding(id, _) | DefRegion(id)
| DefTyParamBinder(id) | DefLabel(id) => {
local_def(id)
}
def_prim_ty(_) => fail!()
DefPrimTy(_) => fail!()
}
}
pub fn binop_to_str(op: binop) -> ~str {
pub fn binop_to_str(op: BinOp) -> ~str {
match op {
add => return ~"+",
subtract => return ~"-",
mul => return ~"*",
div => return ~"/",
rem => return ~"%",
and => return ~"&&",
or => return ~"||",
bitxor => return ~"^",
bitand => return ~"&",
bitor => return ~"|",
shl => return ~"<<",
shr => return ~">>",
eq => return ~"==",
lt => return ~"<",
le => return ~"<=",
ne => return ~"!=",
ge => return ~">=",
gt => return ~">"
BiAdd => return ~"+",
BiSub => return ~"-",
BiMul => return ~"*",
BiDiv => return ~"/",
BiRem => return ~"%",
BiAnd => return ~"&&",
BiOr => return ~"||",
BiBitXor => return ~"^",
BiBitAnd => return ~"&",
BiBitOr => return ~"|",
BiShl => return ~"<<",
BiShr => return ~">>",
BiEq => return ~"==",
BiLt => return ~"<",
BiLe => return ~"<=",
BiNe => return ~"!=",
BiGe => return ~">=",
BiGt => return ~">"
}
}
pub fn binop_to_method_name(op: binop) -> Option<~str> {
pub fn binop_to_method_name(op: BinOp) -> Option<~str> {
match op {
add => return Some(~"add"),
subtract => return Some(~"sub"),
mul => return Some(~"mul"),
div => return Some(~"div"),
rem => return Some(~"rem"),
bitxor => return Some(~"bitxor"),
bitand => return Some(~"bitand"),
bitor => return Some(~"bitor"),
shl => return Some(~"shl"),
shr => return Some(~"shr"),
lt => return Some(~"lt"),
le => return Some(~"le"),
ge => return Some(~"ge"),
gt => return Some(~"gt"),
eq => return Some(~"eq"),
ne => return Some(~"ne"),
and | or => return None
BiAdd => return Some(~"add"),
BiSub => return Some(~"sub"),
BiMul => return Some(~"mul"),
BiDiv => return Some(~"div"),
BiRem => return Some(~"rem"),
BiBitXor => return Some(~"bitxor"),
BiBitAnd => return Some(~"bitand"),
BiBitOr => return Some(~"bitor"),
BiShl => return Some(~"shl"),
BiShr => return Some(~"shr"),
BiLt => return Some(~"lt"),
BiLe => return Some(~"le"),
BiGe => return Some(~"ge"),
BiGt => return Some(~"gt"),
BiEq => return Some(~"eq"),
BiNe => return Some(~"ne"),
BiAnd | BiOr => return None
}
}
pub fn lazy_binop(b: binop) -> bool {
pub fn lazy_binop(b: BinOp) -> bool {
match b {
and => true,
or => true,
BiAnd => true,
BiOr => true,
_ => false
}
}
pub fn is_shift_binop(b: binop) -> bool {
pub fn is_shift_binop(b: BinOp) -> bool {
match b {
shl => true,
shr => true,
BiShl => true,
BiShr => true,
_ => false
}
}
pub fn unop_to_str(op: unop) -> ~str {
pub fn unop_to_str(op: UnOp) -> ~str {
match op {
box(mt) => if mt == m_mutbl { ~"@mut " } else { ~"@" },
uniq => ~"~",
deref => ~"*",
not => ~"!",
neg => ~"-"
UnBox(mt) => if mt == MutMutable { ~"@mut " } else { ~"@" },
UnUniq => ~"~",
UnDeref => ~"*",
UnNot => ~"!",
UnNeg => ~"-"
}
}
pub fn is_path(e: @expr) -> bool {
return match e.node { expr_path(_) => true, _ => false };
pub fn is_path(e: @Expr) -> bool {
return match e.node { ExprPath(_) => true, _ => false };
}
pub fn int_ty_to_str(t: int_ty) -> ~str {
@ -192,19 +192,19 @@ pub fn float_ty_to_str(t: float_ty) -> ~str {
match t { ty_f => ~"f", ty_f32 => ~"f32", ty_f64 => ~"f64" }
}
pub fn is_call_expr(e: @expr) -> bool {
match e.node { expr_call(*) => true, _ => false }
pub fn is_call_expr(e: @Expr) -> bool {
match e.node { ExprCall(*) => true, _ => false }
}
pub fn block_from_expr(e: @expr) -> Block {
let mut blk = default_block(~[], option::Some::<@expr>(e), e.id);
pub fn block_from_expr(e: @Expr) -> Block {
let mut blk = default_block(~[], option::Some::<@Expr>(e), e.id);
blk.span = e.span;
return blk;
}
pub fn default_block(
stmts1: ~[@stmt],
expr1: Option<@expr>,
stmts1: ~[@Stmt],
expr1: Option<@Expr>,
id1: NodeId
) -> Block {
ast::Block {
@ -231,20 +231,20 @@ pub fn ident_to_path(s: Span, identifier: Ident) -> Path {
}
}
pub fn ident_to_pat(id: NodeId, s: Span, i: Ident) -> @pat {
@ast::pat { id: id,
node: pat_ident(bind_infer, ident_to_path(s, i), None),
pub fn ident_to_pat(id: NodeId, s: Span, i: Ident) -> @Pat {
@ast::Pat { id: id,
node: PatIdent(BindInfer, ident_to_path(s, i), None),
span: s }
}
pub fn is_unguarded(a: &arm) -> bool {
pub fn is_unguarded(a: &Arm) -> bool {
match a.guard {
None => true,
_ => false
}
}
pub fn unguarded_pat(a: &arm) -> Option<~[@pat]> {
pub fn unguarded_pat(a: &Arm) -> Option<~[@Pat]> {
if is_unguarded(a) {
Some(/* FIXME (#2543) */ a.pats.clone())
} else {
@ -335,28 +335,28 @@ impl inlined_item_utils for inlined_item {
/* True if d is either a def_self, or a chain of def_upvars
referring to a def_self */
pub fn is_self(d: ast::def) -> bool {
pub fn is_self(d: ast::Def) -> bool {
match d {
def_self(*) => true,
def_upvar(_, d, _, _) => is_self(*d),
DefSelf(*) => true,
DefUpvar(_, d, _, _) => is_self(*d),
_ => false
}
}
/// Maps a binary operator to its precedence
pub fn operator_prec(op: ast::binop) -> uint {
pub fn operator_prec(op: ast::BinOp) -> uint {
match op {
// 'as' sits here with 12
mul | div | rem => 11u,
add | subtract => 10u,
shl | shr => 9u,
bitand => 8u,
bitxor => 7u,
bitor => 6u,
lt | le | ge | gt => 4u,
eq | ne => 3u,
and => 2u,
or => 1u
BiMul | BiDiv | BiRem => 11u,
BiAdd | BiSub => 10u,
BiShl | BiShr => 9u,
BiBitAnd => 8u,
BiBitXor => 7u,
BiBitOr => 6u,
BiLt | BiLe | BiGe | BiGt => 4u,
BiEq | BiNe => 3u,
BiAnd => 2u,
BiOr => 1u
}
}
@ -497,27 +497,27 @@ impl Visitor<()> for IdVisitor {
visit::walk_block(self, block, env)
}
fn visit_stmt(&mut self, statement: @stmt, env: ()) {
fn visit_stmt(&mut self, statement: @Stmt, env: ()) {
(self.visit_callback)(ast_util::stmt_id(statement));
visit::walk_stmt(self, statement, env)
}
// XXX: Default
fn visit_arm(&mut self, arm: &arm, env: ()) {
fn visit_arm(&mut self, arm: &Arm, env: ()) {
visit::walk_arm(self, arm, env)
}
fn visit_pat(&mut self, pattern: @pat, env: ()) {
fn visit_pat(&mut self, pattern: @Pat, env: ()) {
(self.visit_callback)(pattern.id);
visit::walk_pat(self, pattern, env)
}
// XXX: Default
fn visit_decl(&mut self, declaration: @decl, env: ()) {
fn visit_decl(&mut self, declaration: @Decl, env: ()) {
visit::walk_decl(self, declaration, env)
}
fn visit_expr(&mut self, expression: @expr, env: ()) {
fn visit_expr(&mut self, expression: @Expr, env: ()) {
{
let optional_callee_id = expression.get_callee_id();
for callee_id in optional_callee_id.iter() {
@ -529,7 +529,7 @@ impl Visitor<()> for IdVisitor {
}
// XXX: Default
fn visit_expr_post(&mut self, _: @expr, _: ()) {
fn visit_expr_post(&mut self, _: @Expr, _: ()) {
// Empty!
}
@ -654,29 +654,29 @@ pub fn is_item_impl(item: @ast::item) -> bool {
}
}
pub fn walk_pat(pat: @pat, it: &fn(@pat) -> bool) -> bool {
pub fn walk_pat(pat: @Pat, it: &fn(@Pat) -> bool) -> bool {
if !it(pat) {
return false;
}
match pat.node {
pat_ident(_, _, Some(p)) => walk_pat(p, it),
pat_struct(_, ref fields, _) => {
PatIdent(_, _, Some(p)) => walk_pat(p, it),
PatStruct(_, ref fields, _) => {
fields.iter().advance(|f| walk_pat(f.pat, |p| it(p)))
}
pat_enum(_, Some(ref s)) | pat_tup(ref s) => {
PatEnum(_, Some(ref s)) | PatTup(ref s) => {
s.iter().advance(|&p| walk_pat(p, |p| it(p)))
}
pat_box(s) | pat_uniq(s) | pat_region(s) => {
PatBox(s) | PatUniq(s) | PatRegion(s) => {
walk_pat(s, it)
}
pat_vec(ref before, ref slice, ref after) => {
PatVec(ref before, ref slice, ref after) => {
before.iter().advance(|&p| walk_pat(p, |p| it(p))) &&
slice.iter().advance(|&p| walk_pat(p, |p| it(p))) &&
after.iter().advance(|&p| walk_pat(p, |p| it(p)))
}
pat_wild | pat_lit(_) | pat_range(_, _) | pat_ident(_, _, _) |
pat_enum(_, _) => {
PatWild | PatLit(_) | PatRange(_, _) | PatIdent(_, _, _) |
PatEnum(_, _) => {
true
}
}
@ -709,22 +709,22 @@ impl SimpleVisitor for EachViewItemData {
fn visit_block(&mut self, _: &Block) {
// XXX: Default method.
}
fn visit_stmt(&mut self, _: @stmt) {
fn visit_stmt(&mut self, _: @Stmt) {
// XXX: Default method.
}
fn visit_arm(&mut self, _: &arm) {
fn visit_arm(&mut self, _: &Arm) {
// XXX: Default method.
}
fn visit_pat(&mut self, _: @pat) {
fn visit_pat(&mut self, _: @Pat) {
// XXX: Default method.
}
fn visit_decl(&mut self, _: @decl) {
fn visit_decl(&mut self, _: @Decl) {
// XXX: Default method.
}
fn visit_expr(&mut self, _: @expr) {
fn visit_expr(&mut self, _: @Expr) {
// XXX: Default method.
}
fn visit_expr_post(&mut self, _: @expr) {
fn visit_expr_post(&mut self, _: @Expr) {
// XXX: Default method.
}
fn visit_ty(&mut self, _: &Ty) {
@ -817,9 +817,9 @@ pub enum Privacy {
/// Returns true if the given pattern consists solely of an identifier
/// and false otherwise.
pub fn pat_is_ident(pat: @ast::pat) -> bool {
pub fn pat_is_ident(pat: @ast::Pat) -> bool {
match pat.node {
ast::pat_ident(*) => true,
ast::PatIdent(*) => true,
_ => false,
}
}
@ -1015,7 +1015,7 @@ mod test {
// convert a list of uints to an @[ident]
// (ignores the interner completely)
fn uints_to_idents (uints: &~[uint]) -> @~[Ident] {
@uints.map(|u| Ident {name:*u, ctxt: empty_ctxt})
@uints.map(|u| Ident {name:*u, ctxt: EMPTY_CTXT})
}
fn id (u : uint, s: SyntaxContext) -> Ident {
@ -1065,7 +1065,7 @@ mod test {
let mut t = new_sctable_internal();
let test_sc = ~[M(3),R(id(101,0),14),M(9)];
assert_eq!(unfold_test_sc(test_sc.clone(),empty_ctxt,&mut t),4);
assert_eq!(unfold_test_sc(test_sc.clone(),EMPTY_CTXT,&mut t),4);
assert_eq!(t.table[2],Mark(9,0));
assert_eq!(t.table[3],Rename(id(101,0),14,2));
assert_eq!(t.table[4],Mark(3,3));
@ -1082,7 +1082,7 @@ mod test {
#[test] fn unfold_marks_test() {
let mut t = new_sctable_internal();
assert_eq!(unfold_marks(~[3,7],empty_ctxt,&mut t),3);
assert_eq!(unfold_marks(~[3,7],EMPTY_CTXT,&mut t),3);
assert_eq!(t.table[2],Mark(7,0));
assert_eq!(t.table[3],Mark(3,2));
}
@ -1091,31 +1091,31 @@ mod test {
let stopname = 242;
let name1 = 243;
let mut t = new_sctable_internal();
assert_eq!(marksof (empty_ctxt,stopname,&t),~[]);
assert_eq!(marksof (EMPTY_CTXT,stopname,&t),~[]);
// FIXME #5074: ANF'd to dodge nested calls
{ let ans = unfold_marks(~[4,98],empty_ctxt,&mut t);
{ let ans = unfold_marks(~[4,98],EMPTY_CTXT,&mut t);
assert_eq! (marksof (ans,stopname,&t),~[4,98]);}
// does xoring work?
{ let ans = unfold_marks(~[5,5,16],empty_ctxt,&mut t);
{ let ans = unfold_marks(~[5,5,16],EMPTY_CTXT,&mut t);
assert_eq! (marksof (ans,stopname,&t), ~[16]);}
// does nested xoring work?
{ let ans = unfold_marks(~[5,10,10,5,16],empty_ctxt,&mut t);
{ let ans = unfold_marks(~[5,10,10,5,16],EMPTY_CTXT,&mut t);
assert_eq! (marksof (ans, stopname,&t), ~[16]);}
// rename where stop doesn't match:
{ let chain = ~[M(9),
R(id(name1,
new_mark_internal (4, empty_ctxt,&mut t)),
new_mark_internal (4, EMPTY_CTXT,&mut t)),
100101102),
M(14)];
let ans = unfold_test_sc(chain,empty_ctxt,&mut t);
let ans = unfold_test_sc(chain,EMPTY_CTXT,&mut t);
assert_eq! (marksof (ans, stopname, &t), ~[9,14]);}
// rename where stop does match
{ let name1sc = new_mark_internal(4, empty_ctxt, &mut t);
{ let name1sc = new_mark_internal(4, EMPTY_CTXT, &mut t);
let chain = ~[M(9),
R(id(name1, name1sc),
stopname),
M(14)];
let ans = unfold_test_sc(chain,empty_ctxt,&mut t);
let ans = unfold_test_sc(chain,EMPTY_CTXT,&mut t);
assert_eq! (marksof (ans, stopname, &t), ~[9]); }
}
@ -1124,38 +1124,38 @@ mod test {
let a = 40;
let mut t = new_sctable_internal();
// - ctxt is MT
assert_eq!(resolve_internal(id(a,empty_ctxt),&mut t),a);
assert_eq!(resolve_internal(id(a,EMPTY_CTXT),&mut t),a);
// - simple ignored marks
{ let sc = unfold_marks(~[1,2,3],empty_ctxt,&mut t);
{ let sc = unfold_marks(~[1,2,3],EMPTY_CTXT,&mut t);
assert_eq!(resolve_internal(id(a,sc),&mut t),a);}
// - orthogonal rename where names don't match
{ let sc = unfold_test_sc(~[R(id(50,empty_ctxt),51),M(12)],empty_ctxt,&mut t);
{ let sc = unfold_test_sc(~[R(id(50,EMPTY_CTXT),51),M(12)],EMPTY_CTXT,&mut t);
assert_eq!(resolve_internal(id(a,sc),&mut t),a);}
// - rename where names do match, but marks don't
{ let sc1 = new_mark_internal(1,empty_ctxt,&mut t);
{ let sc1 = new_mark_internal(1,EMPTY_CTXT,&mut t);
let sc = unfold_test_sc(~[R(id(a,sc1),50),
M(1),
M(2)],
empty_ctxt,&mut t);
EMPTY_CTXT,&mut t);
assert_eq!(resolve_internal(id(a,sc),&mut t), a);}
// - rename where names and marks match
{ let sc1 = unfold_test_sc(~[M(1),M(2)],empty_ctxt,&mut t);
let sc = unfold_test_sc(~[R(id(a,sc1),50),M(1),M(2)],empty_ctxt,&mut t);
{ let sc1 = unfold_test_sc(~[M(1),M(2)],EMPTY_CTXT,&mut t);
let sc = unfold_test_sc(~[R(id(a,sc1),50),M(1),M(2)],EMPTY_CTXT,&mut t);
assert_eq!(resolve_internal(id(a,sc),&mut t), 50); }
// - rename where names and marks match by literal sharing
{ let sc1 = unfold_test_sc(~[M(1),M(2)],empty_ctxt,&mut t);
{ let sc1 = unfold_test_sc(~[M(1),M(2)],EMPTY_CTXT,&mut t);
let sc = unfold_test_sc(~[R(id(a,sc1),50)],sc1,&mut t);
assert_eq!(resolve_internal(id(a,sc),&mut t), 50); }
// - two renames of the same var.. can only happen if you use
// local-expand to prevent the inner binding from being renamed
// during the rename-pass caused by the first:
io::println("about to run bad test");
{ let sc = unfold_test_sc(~[R(id(a,empty_ctxt),50),
R(id(a,empty_ctxt),51)],
empty_ctxt,&mut t);
{ let sc = unfold_test_sc(~[R(id(a,EMPTY_CTXT),50),
R(id(a,EMPTY_CTXT),51)],
EMPTY_CTXT,&mut t);
assert_eq!(resolve_internal(id(a,sc),&mut t), 51); }
// the simplest double-rename:
{ let a_to_a50 = new_rename_internal(id(a,empty_ctxt),50,empty_ctxt,&mut t);
{ let a_to_a50 = new_rename_internal(id(a,EMPTY_CTXT),50,EMPTY_CTXT,&mut t);
let a50_to_a51 = new_rename_internal(id(a,a_to_a50),51,a_to_a50,&mut t);
assert_eq!(resolve_internal(id(a,a50_to_a51),&mut t),51);
// mark on the outside doesn't stop rename:
@ -1171,10 +1171,10 @@ mod test {
#[test] fn hashing_tests () {
let mut t = new_sctable_internal();
assert_eq!(new_mark_internal(12,empty_ctxt,&mut t),2);
assert_eq!(new_mark_internal(13,empty_ctxt,&mut t),3);
assert_eq!(new_mark_internal(12,EMPTY_CTXT,&mut t),2);
assert_eq!(new_mark_internal(13,EMPTY_CTXT,&mut t),3);
// using the same one again should result in the same index:
assert_eq!(new_mark_internal(12,empty_ctxt,&mut t),2);
assert_eq!(new_mark_internal(12,EMPTY_CTXT,&mut t),2);
// I'm assuming that the rename table will behave the same....
}

View file

@ -75,10 +75,10 @@ pub fn expand_asm(cx: @ExtCtxt, sp: Span, tts: &[ast::token_tree])
let out = p.parse_expr();
p.expect(&token::RPAREN);
let out = @ast::expr {
let out = @ast::Expr {
id: cx.next_id(),
span: out.span,
node: ast::expr_addr_of(ast::m_mutbl, out)
node: ast::ExprAddrOf(ast::MutMutable, out)
};
outputs.push((constraint, out));
@ -171,9 +171,9 @@ pub fn expand_asm(cx: @ExtCtxt, sp: Span, tts: &[ast::token_tree])
}
}
MRExpr(@ast::expr {
MRExpr(@ast::Expr {
id: cx.next_id(),
node: ast::expr_inline_asm(ast::inline_asm {
node: ast::ExprInlineAsm(ast::inline_asm {
asm: asm,
clobbers: cons.to_managed(),
inputs: inputs,

View file

@ -62,11 +62,11 @@ pub type SyntaxExpanderTTItemFun = @fn(@ExtCtxt,
-> MacResult;
pub enum MacResult {
MRExpr(@ast::expr),
MRExpr(@ast::Expr),
MRItem(@ast::item),
MRAny(@fn() -> @ast::expr,
MRAny(@fn() -> @ast::Expr,
@fn() -> Option<@ast::item>,
@fn() -> @ast::stmt),
@fn() -> @ast::Stmt),
MRDef(MacroDef)
}
@ -319,9 +319,9 @@ impl ExtCtxt {
}
}
pub fn expr_to_str(cx: @ExtCtxt, expr: @ast::expr, err_msg: &str) -> @str {
pub fn expr_to_str(cx: @ExtCtxt, expr: @ast::Expr, err_msg: &str) -> @str {
match expr.node {
ast::expr_lit(l) => match l.node {
ast::ExprLit(l) => match l.node {
ast::lit_str(s) => s,
_ => cx.span_fatal(l.span, err_msg)
},
@ -353,7 +353,7 @@ pub fn get_single_str_from_tts(cx: @ExtCtxt,
pub fn get_exprs_from_tts(cx: @ExtCtxt,
sp: Span,
tts: &[ast::token_tree]) -> ~[@ast::expr] {
tts: &[ast::token_tree]) -> ~[@ast::Expr] {
let p = parse::new_parser_from_tts(cx.parse_sess(),
cx.cfg(),
tts.to_owned());

View file

@ -21,7 +21,7 @@ use opt_vec::OptVec;
pub struct Field {
ident: ast::Ident,
ex: @ast::expr
ex: @ast::Expr
}
// Transitional reexports so qquote can find the paths it is looking for
@ -43,7 +43,7 @@ pub trait AstBuilder {
-> ast::Path;
// types
fn ty_mt(&self, ty: ast::Ty, mutbl: ast::mutability) -> ast::mt;
fn ty_mt(&self, ty: ast::Ty, mutbl: ast::Mutability) -> ast::mt;
fn ty(&self, span: Span, ty: ast::ty_) -> ast::Ty;
fn ty_path(&self, ast::Path, Option<OptVec<ast::TyParamBound>>) -> ast::Ty;
@ -52,9 +52,9 @@ pub trait AstBuilder {
fn ty_rptr(&self, span: Span,
ty: ast::Ty,
lifetime: Option<ast::Lifetime>,
mutbl: ast::mutability) -> ast::Ty;
mutbl: ast::Mutability) -> ast::Ty;
fn ty_uniq(&self, span: Span, ty: ast::Ty) -> ast::Ty;
fn ty_box(&self, span: Span, ty: ast::Ty, mutbl: ast::mutability) -> ast::Ty;
fn ty_box(&self, span: Span, ty: ast::Ty, mutbl: ast::Mutability) -> ast::Ty;
fn ty_option(&self, ty: ast::Ty) -> ast::Ty;
fn ty_infer(&self, sp: Span) -> ast::Ty;
@ -72,101 +72,101 @@ pub trait AstBuilder {
fn lifetime(&self, span: Span, ident: ast::Ident) -> ast::Lifetime;
// statements
fn stmt_expr(&self, expr: @ast::expr) -> @ast::stmt;
fn stmt_let(&self, sp: Span, mutbl: bool, ident: ast::Ident, ex: @ast::expr) -> @ast::stmt;
fn stmt_expr(&self, expr: @ast::Expr) -> @ast::Stmt;
fn stmt_let(&self, sp: Span, mutbl: bool, ident: ast::Ident, ex: @ast::Expr) -> @ast::Stmt;
fn stmt_let_typed(&self,
sp: Span,
mutbl: bool,
ident: ast::Ident,
typ: ast::Ty,
ex: @ast::expr)
-> @ast::stmt;
ex: @ast::Expr)
-> @ast::Stmt;
// blocks
fn block(&self, span: Span, stmts: ~[@ast::stmt], expr: Option<@ast::expr>) -> ast::Block;
fn block_expr(&self, expr: @ast::expr) -> ast::Block;
fn block(&self, span: Span, stmts: ~[@ast::Stmt], expr: Option<@ast::Expr>) -> ast::Block;
fn block_expr(&self, expr: @ast::Expr) -> ast::Block;
fn block_all(&self, span: Span,
view_items: ~[ast::view_item],
stmts: ~[@ast::stmt],
expr: Option<@ast::expr>) -> ast::Block;
stmts: ~[@ast::Stmt],
expr: Option<@ast::Expr>) -> ast::Block;
// expressions
fn expr(&self, span: Span, node: ast::expr_) -> @ast::expr;
fn expr_path(&self, path: ast::Path) -> @ast::expr;
fn expr_ident(&self, span: Span, id: ast::Ident) -> @ast::expr;
fn expr(&self, span: Span, node: ast::Expr_) -> @ast::Expr;
fn expr_path(&self, path: ast::Path) -> @ast::Expr;
fn expr_ident(&self, span: Span, id: ast::Ident) -> @ast::Expr;
fn expr_self(&self, span: Span) -> @ast::expr;
fn expr_binary(&self, sp: Span, op: ast::binop,
lhs: @ast::expr, rhs: @ast::expr) -> @ast::expr;
fn expr_deref(&self, sp: Span, e: @ast::expr) -> @ast::expr;
fn expr_unary(&self, sp: Span, op: ast::unop, e: @ast::expr) -> @ast::expr;
fn expr_self(&self, span: Span) -> @ast::Expr;
fn expr_binary(&self, sp: Span, op: ast::BinOp,
lhs: @ast::Expr, rhs: @ast::Expr) -> @ast::Expr;
fn expr_deref(&self, sp: Span, e: @ast::Expr) -> @ast::Expr;
fn expr_unary(&self, sp: Span, op: ast::UnOp, e: @ast::Expr) -> @ast::Expr;
fn expr_managed(&self, sp: Span, e: @ast::expr) -> @ast::expr;
fn expr_addr_of(&self, sp: Span, e: @ast::expr) -> @ast::expr;
fn expr_mut_addr_of(&self, sp: Span, e: @ast::expr) -> @ast::expr;
fn expr_field_access(&self, span: Span, expr: @ast::expr, ident: ast::Ident) -> @ast::expr;
fn expr_call(&self, span: Span, expr: @ast::expr, args: ~[@ast::expr]) -> @ast::expr;
fn expr_call_ident(&self, span: Span, id: ast::Ident, args: ~[@ast::expr]) -> @ast::expr;
fn expr_managed(&self, sp: Span, e: @ast::Expr) -> @ast::Expr;
fn expr_addr_of(&self, sp: Span, e: @ast::Expr) -> @ast::Expr;
fn expr_mut_addr_of(&self, sp: Span, e: @ast::Expr) -> @ast::Expr;
fn expr_field_access(&self, span: Span, expr: @ast::Expr, ident: ast::Ident) -> @ast::Expr;
fn expr_call(&self, span: Span, expr: @ast::Expr, args: ~[@ast::Expr]) -> @ast::Expr;
fn expr_call_ident(&self, span: Span, id: ast::Ident, args: ~[@ast::Expr]) -> @ast::Expr;
fn expr_call_global(&self, sp: Span, fn_path: ~[ast::Ident],
args: ~[@ast::expr]) -> @ast::expr;
args: ~[@ast::Expr]) -> @ast::Expr;
fn expr_method_call(&self, span: Span,
expr: @ast::expr, ident: ast::Ident,
args: ~[@ast::expr]) -> @ast::expr;
fn expr_block(&self, b: ast::Block) -> @ast::expr;
expr: @ast::Expr, ident: ast::Ident,
args: ~[@ast::Expr]) -> @ast::Expr;
fn expr_block(&self, b: ast::Block) -> @ast::Expr;
fn field_imm(&self, span: Span, name: Ident, e: @ast::expr) -> ast::Field;
fn expr_struct(&self, span: Span, path: ast::Path, fields: ~[ast::Field]) -> @ast::expr;
fn expr_struct_ident(&self, span: Span, id: ast::Ident, fields: ~[ast::Field]) -> @ast::expr;
fn field_imm(&self, span: Span, name: Ident, e: @ast::Expr) -> ast::Field;
fn expr_struct(&self, span: Span, path: ast::Path, fields: ~[ast::Field]) -> @ast::Expr;
fn expr_struct_ident(&self, span: Span, id: ast::Ident, fields: ~[ast::Field]) -> @ast::Expr;
fn expr_lit(&self, sp: Span, lit: ast::lit_) -> @ast::expr;
fn expr_lit(&self, sp: Span, lit: ast::lit_) -> @ast::Expr;
fn expr_uint(&self, span: Span, i: uint) -> @ast::expr;
fn expr_int(&self, sp: Span, i: int) -> @ast::expr;
fn expr_u8(&self, sp: Span, u: u8) -> @ast::expr;
fn expr_bool(&self, sp: Span, value: bool) -> @ast::expr;
fn expr_uint(&self, span: Span, i: uint) -> @ast::Expr;
fn expr_int(&self, sp: Span, i: int) -> @ast::Expr;
fn expr_u8(&self, sp: Span, u: u8) -> @ast::Expr;
fn expr_bool(&self, sp: Span, value: bool) -> @ast::Expr;
fn expr_vstore(&self, sp: Span, expr: @ast::expr, vst: ast::expr_vstore) -> @ast::expr;
fn expr_vec(&self, sp: Span, exprs: ~[@ast::expr]) -> @ast::expr;
fn expr_vec_uniq(&self, sp: Span, exprs: ~[@ast::expr]) -> @ast::expr;
fn expr_vec_slice(&self, sp: Span, exprs: ~[@ast::expr]) -> @ast::expr;
fn expr_str(&self, sp: Span, s: @str) -> @ast::expr;
fn expr_str_uniq(&self, sp: Span, s: @str) -> @ast::expr;
fn expr_vstore(&self, sp: Span, expr: @ast::Expr, vst: ast::ExprVstore) -> @ast::Expr;
fn expr_vec(&self, sp: Span, exprs: ~[@ast::Expr]) -> @ast::Expr;
fn expr_vec_uniq(&self, sp: Span, exprs: ~[@ast::Expr]) -> @ast::Expr;
fn expr_vec_slice(&self, sp: Span, exprs: ~[@ast::Expr]) -> @ast::Expr;
fn expr_str(&self, sp: Span, s: @str) -> @ast::Expr;
fn expr_str_uniq(&self, sp: Span, s: @str) -> @ast::Expr;
fn expr_unreachable(&self, span: Span) -> @ast::expr;
fn expr_unreachable(&self, span: Span) -> @ast::Expr;
fn pat(&self, span: Span, pat: ast::pat_) -> @ast::pat;
fn pat_wild(&self, span: Span) -> @ast::pat;
fn pat_lit(&self, span: Span, expr: @ast::expr) -> @ast::pat;
fn pat_ident(&self, span: Span, ident: ast::Ident) -> @ast::pat;
fn pat(&self, span: Span, pat: ast::Pat_) -> @ast::Pat;
fn pat_wild(&self, span: Span) -> @ast::Pat;
fn pat_lit(&self, span: Span, expr: @ast::Expr) -> @ast::Pat;
fn pat_ident(&self, span: Span, ident: ast::Ident) -> @ast::Pat;
fn pat_ident_binding_mode(&self,
span: Span,
ident: ast::Ident,
bm: ast::binding_mode) -> @ast::pat;
fn pat_enum(&self, span: Span, path: ast::Path, subpats: ~[@ast::pat]) -> @ast::pat;
bm: ast::BindingMode) -> @ast::Pat;
fn pat_enum(&self, span: Span, path: ast::Path, subpats: ~[@ast::Pat]) -> @ast::Pat;
fn pat_struct(&self, span: Span,
path: ast::Path, field_pats: ~[ast::field_pat]) -> @ast::pat;
path: ast::Path, field_pats: ~[ast::FieldPat]) -> @ast::Pat;
fn arm(&self, span: Span, pats: ~[@ast::pat], expr: @ast::expr) -> ast::arm;
fn arm_unreachable(&self, span: Span) -> ast::arm;
fn arm(&self, span: Span, pats: ~[@ast::Pat], expr: @ast::Expr) -> ast::Arm;
fn arm_unreachable(&self, span: Span) -> ast::Arm;
fn expr_match(&self, span: Span, arg: @ast::expr, arms: ~[ast::arm]) -> @ast::expr;
fn expr_match(&self, span: Span, arg: @ast::Expr, arms: ~[ast::Arm]) -> @ast::Expr;
fn expr_if(&self, span: Span,
cond: @ast::expr, then: @ast::expr, els: Option<@ast::expr>) -> @ast::expr;
cond: @ast::Expr, then: @ast::Expr, els: Option<@ast::Expr>) -> @ast::Expr;
fn lambda_fn_decl(&self, span: Span, fn_decl: ast::fn_decl, blk: ast::Block) -> @ast::expr;
fn lambda_fn_decl(&self, span: Span, fn_decl: ast::fn_decl, blk: ast::Block) -> @ast::Expr;
fn lambda(&self, span: Span, ids: ~[ast::Ident], blk: ast::Block) -> @ast::expr;
fn lambda0(&self, span: Span, blk: ast::Block) -> @ast::expr;
fn lambda1(&self, span: Span, blk: ast::Block, ident: ast::Ident) -> @ast::expr;
fn lambda(&self, span: Span, ids: ~[ast::Ident], blk: ast::Block) -> @ast::Expr;
fn lambda0(&self, span: Span, blk: ast::Block) -> @ast::Expr;
fn lambda1(&self, span: Span, blk: ast::Block, ident: ast::Ident) -> @ast::Expr;
fn lambda_expr(&self, span: Span, ids: ~[ast::Ident], blk: @ast::expr) -> @ast::expr;
fn lambda_expr_0(&self, span: Span, expr: @ast::expr) -> @ast::expr;
fn lambda_expr_1(&self, span: Span, expr: @ast::expr, ident: ast::Ident) -> @ast::expr;
fn lambda_expr(&self, span: Span, ids: ~[ast::Ident], blk: @ast::Expr) -> @ast::Expr;
fn lambda_expr_0(&self, span: Span, expr: @ast::Expr) -> @ast::Expr;
fn lambda_expr_1(&self, span: Span, expr: @ast::Expr, ident: ast::Ident) -> @ast::Expr;
fn lambda_stmts(&self, span: Span, ids: ~[ast::Ident], blk: ~[@ast::stmt]) -> @ast::expr;
fn lambda_stmts_0(&self, span: Span, stmts: ~[@ast::stmt]) -> @ast::expr;
fn lambda_stmts_1(&self, span: Span, stmts: ~[@ast::stmt], ident: ast::Ident) -> @ast::expr;
fn lambda_stmts(&self, span: Span, ids: ~[ast::Ident], blk: ~[@ast::Stmt]) -> @ast::Expr;
fn lambda_stmts_0(&self, span: Span, stmts: ~[@ast::Stmt]) -> @ast::Expr;
fn lambda_stmts_1(&self, span: Span, stmts: ~[@ast::Stmt], ident: ast::Ident) -> @ast::Expr;
// items
fn item(&self, span: Span,
@ -268,7 +268,7 @@ impl AstBuilder for @ExtCtxt {
}
}
fn ty_mt(&self, ty: ast::Ty, mutbl: ast::mutability) -> ast::mt {
fn ty_mt(&self, ty: ast::Ty, mutbl: ast::Mutability) -> ast::mt {
ast::mt {
ty: ~ty,
mutbl: mutbl
@ -300,16 +300,16 @@ impl AstBuilder for @ExtCtxt {
span: Span,
ty: ast::Ty,
lifetime: Option<ast::Lifetime>,
mutbl: ast::mutability)
mutbl: ast::Mutability)
-> ast::Ty {
self.ty(span,
ast::ty_rptr(lifetime, self.ty_mt(ty, mutbl)))
}
fn ty_uniq(&self, span: Span, ty: ast::Ty) -> ast::Ty {
self.ty(span, ast::ty_uniq(self.ty_mt(ty, ast::m_imm)))
self.ty(span, ast::ty_uniq(self.ty_mt(ty, ast::MutImmutable)))
}
fn ty_box(&self, span: Span,
ty: ast::Ty, mutbl: ast::mutability) -> ast::Ty {
ty: ast::Ty, mutbl: ast::Mutability) -> ast::Ty {
self.ty(span, ast::ty_box(self.ty_mt(ty, mutbl)))
}
@ -329,7 +329,7 @@ impl AstBuilder for @ExtCtxt {
fn ty_field_imm(&self, span: Span, name: Ident, ty: ast::Ty) -> ast::TypeField {
ast::TypeField {
ident: name,
mt: ast::mt { ty: ~ty, mutbl: ast::m_imm },
mt: ast::mt { ty: ~ty, mutbl: ast::MutImmutable },
span: span,
}
}
@ -389,11 +389,11 @@ impl AstBuilder for @ExtCtxt {
ast::Lifetime { id: self.next_id(), span: span, ident: ident }
}
fn stmt_expr(&self, expr: @ast::expr) -> @ast::stmt {
@respan(expr.span, ast::stmt_semi(expr, self.next_id()))
fn stmt_expr(&self, expr: @ast::Expr) -> @ast::Stmt {
@respan(expr.span, ast::StmtSemi(expr, self.next_id()))
}
fn stmt_let(&self, sp: Span, mutbl: bool, ident: ast::Ident, ex: @ast::expr) -> @ast::stmt {
fn stmt_let(&self, sp: Span, mutbl: bool, ident: ast::Ident, ex: @ast::Expr) -> @ast::Stmt {
let pat = self.pat_ident(sp, ident);
let local = @ast::Local {
is_mutbl: mutbl,
@ -403,8 +403,8 @@ impl AstBuilder for @ExtCtxt {
id: self.next_id(),
span: sp,
};
let decl = respan(sp, ast::decl_local(local));
@respan(sp, ast::stmt_decl(@decl, self.next_id()))
let decl = respan(sp, ast::DeclLocal(local));
@respan(sp, ast::StmtDecl(@decl, self.next_id()))
}
fn stmt_let_typed(&self,
@ -412,8 +412,8 @@ impl AstBuilder for @ExtCtxt {
mutbl: bool,
ident: ast::Ident,
typ: ast::Ty,
ex: @ast::expr)
-> @ast::stmt {
ex: @ast::Expr)
-> @ast::Stmt {
let pat = self.pat_ident(sp, ident);
let local = @ast::Local {
is_mutbl: mutbl,
@ -423,22 +423,22 @@ impl AstBuilder for @ExtCtxt {
id: self.next_id(),
span: sp,
};
let decl = respan(sp, ast::decl_local(local));
@respan(sp, ast::stmt_decl(@decl, self.next_id()))
let decl = respan(sp, ast::DeclLocal(local));
@respan(sp, ast::StmtDecl(@decl, self.next_id()))
}
fn block(&self, span: Span, stmts: ~[@ast::stmt], expr: Option<@expr>) -> ast::Block {
fn block(&self, span: Span, stmts: ~[@ast::Stmt], expr: Option<@Expr>) -> ast::Block {
self.block_all(span, ~[], stmts, expr)
}
fn block_expr(&self, expr: @ast::expr) -> ast::Block {
fn block_expr(&self, expr: @ast::Expr) -> ast::Block {
self.block_all(expr.span, ~[], ~[], Some(expr))
}
fn block_all(&self,
span: Span,
view_items: ~[ast::view_item],
stmts: ~[@ast::stmt],
expr: Option<@ast::expr>) -> ast::Block {
stmts: ~[@ast::Stmt],
expr: Option<@ast::Expr>) -> ast::Block {
ast::Block {
view_items: view_items,
stmts: stmts,
@ -449,122 +449,122 @@ impl AstBuilder for @ExtCtxt {
}
}
fn expr(&self, span: Span, node: ast::expr_) -> @ast::expr {
@ast::expr {
fn expr(&self, span: Span, node: ast::Expr_) -> @ast::Expr {
@ast::Expr {
id: self.next_id(),
node: node,
span: span,
}
}
fn expr_path(&self, path: ast::Path) -> @ast::expr {
self.expr(path.span, ast::expr_path(path))
fn expr_path(&self, path: ast::Path) -> @ast::Expr {
self.expr(path.span, ast::ExprPath(path))
}
fn expr_ident(&self, span: Span, id: ast::Ident) -> @ast::expr {
fn expr_ident(&self, span: Span, id: ast::Ident) -> @ast::Expr {
self.expr_path(self.path_ident(span, id))
}
fn expr_self(&self, span: Span) -> @ast::expr {
self.expr(span, ast::expr_self)
fn expr_self(&self, span: Span) -> @ast::Expr {
self.expr(span, ast::ExprSelf)
}
fn expr_binary(&self, sp: Span, op: ast::binop,
lhs: @ast::expr, rhs: @ast::expr) -> @ast::expr {
self.expr(sp, ast::expr_binary(self.next_id(), op, lhs, rhs))
fn expr_binary(&self, sp: Span, op: ast::BinOp,
lhs: @ast::Expr, rhs: @ast::Expr) -> @ast::Expr {
self.expr(sp, ast::ExprBinary(self.next_id(), op, lhs, rhs))
}
fn expr_deref(&self, sp: Span, e: @ast::expr) -> @ast::expr {
self.expr_unary(sp, ast::deref, e)
fn expr_deref(&self, sp: Span, e: @ast::Expr) -> @ast::Expr {
self.expr_unary(sp, ast::UnDeref, e)
}
fn expr_unary(&self, sp: Span, op: ast::unop, e: @ast::expr)
-> @ast::expr {
self.expr(sp, ast::expr_unary(self.next_id(), op, e))
fn expr_unary(&self, sp: Span, op: ast::UnOp, e: @ast::Expr)
-> @ast::Expr {
self.expr(sp, ast::ExprUnary(self.next_id(), op, e))
}
fn expr_managed(&self, sp: Span, e: @ast::expr) -> @ast::expr {
self.expr_unary(sp, ast::box(ast::m_imm), e)
fn expr_managed(&self, sp: Span, e: @ast::Expr) -> @ast::Expr {
self.expr_unary(sp, ast::UnBox(ast::MutImmutable), e)
}
fn expr_field_access(&self, sp: Span, expr: @ast::expr, ident: ast::Ident) -> @ast::expr {
self.expr(sp, ast::expr_field(expr, ident, ~[]))
fn expr_field_access(&self, sp: Span, expr: @ast::Expr, ident: ast::Ident) -> @ast::Expr {
self.expr(sp, ast::ExprField(expr, ident, ~[]))
}
fn expr_addr_of(&self, sp: Span, e: @ast::expr) -> @ast::expr {
self.expr(sp, ast::expr_addr_of(ast::m_imm, e))
fn expr_addr_of(&self, sp: Span, e: @ast::Expr) -> @ast::Expr {
self.expr(sp, ast::ExprAddrOf(ast::MutImmutable, e))
}
fn expr_mut_addr_of(&self, sp: Span, e: @ast::expr) -> @ast::expr {
self.expr(sp, ast::expr_addr_of(ast::m_mutbl, e))
fn expr_mut_addr_of(&self, sp: Span, e: @ast::Expr) -> @ast::Expr {
self.expr(sp, ast::ExprAddrOf(ast::MutMutable, e))
}
fn expr_call(&self, span: Span, expr: @ast::expr, args: ~[@ast::expr]) -> @ast::expr {
self.expr(span, ast::expr_call(expr, args, ast::NoSugar))
fn expr_call(&self, span: Span, expr: @ast::Expr, args: ~[@ast::Expr]) -> @ast::Expr {
self.expr(span, ast::ExprCall(expr, args, ast::NoSugar))
}
fn expr_call_ident(&self, span: Span, id: ast::Ident, args: ~[@ast::expr]) -> @ast::expr {
fn expr_call_ident(&self, span: Span, id: ast::Ident, args: ~[@ast::Expr]) -> @ast::Expr {
self.expr(span,
ast::expr_call(self.expr_ident(span, id), args, ast::NoSugar))
ast::ExprCall(self.expr_ident(span, id), args, ast::NoSugar))
}
fn expr_call_global(&self, sp: Span, fn_path: ~[ast::Ident],
args: ~[@ast::expr]) -> @ast::expr {
args: ~[@ast::Expr]) -> @ast::Expr {
let pathexpr = self.expr_path(self.path_global(sp, fn_path));
self.expr_call(sp, pathexpr, args)
}
fn expr_method_call(&self, span: Span,
expr: @ast::expr,
expr: @ast::Expr,
ident: ast::Ident,
args: ~[@ast::expr]) -> @ast::expr {
args: ~[@ast::Expr]) -> @ast::Expr {
self.expr(span,
ast::expr_method_call(self.next_id(), expr, ident, ~[], args, ast::NoSugar))
ast::ExprMethodCall(self.next_id(), expr, ident, ~[], args, ast::NoSugar))
}
fn expr_block(&self, b: ast::Block) -> @ast::expr {
self.expr(b.span, ast::expr_block(b))
fn expr_block(&self, b: ast::Block) -> @ast::Expr {
self.expr(b.span, ast::ExprBlock(b))
}
fn field_imm(&self, span: Span, name: Ident, e: @ast::expr) -> ast::Field {
fn field_imm(&self, span: Span, name: Ident, e: @ast::Expr) -> ast::Field {
ast::Field { ident: name, expr: e, span: span }
}
fn expr_struct(&self, span: Span, path: ast::Path, fields: ~[ast::Field]) -> @ast::expr {
self.expr(span, ast::expr_struct(path, fields, None))
fn expr_struct(&self, span: Span, path: ast::Path, fields: ~[ast::Field]) -> @ast::Expr {
self.expr(span, ast::ExprStruct(path, fields, None))
}
fn expr_struct_ident(&self, span: Span,
id: ast::Ident, fields: ~[ast::Field]) -> @ast::expr {
id: ast::Ident, fields: ~[ast::Field]) -> @ast::Expr {
self.expr_struct(span, self.path_ident(span, id), fields)
}
fn expr_lit(&self, sp: Span, lit: ast::lit_) -> @ast::expr {
self.expr(sp, ast::expr_lit(@respan(sp, lit)))
fn expr_lit(&self, sp: Span, lit: ast::lit_) -> @ast::Expr {
self.expr(sp, ast::ExprLit(@respan(sp, lit)))
}
fn expr_uint(&self, span: Span, i: uint) -> @ast::expr {
fn expr_uint(&self, span: Span, i: uint) -> @ast::Expr {
self.expr_lit(span, ast::lit_uint(i as u64, ast::ty_u))
}
fn expr_int(&self, sp: Span, i: int) -> @ast::expr {
fn expr_int(&self, sp: Span, i: int) -> @ast::Expr {
self.expr_lit(sp, ast::lit_int(i as i64, ast::ty_i))
}
fn expr_u8(&self, sp: Span, u: u8) -> @ast::expr {
fn expr_u8(&self, sp: Span, u: u8) -> @ast::Expr {
self.expr_lit(sp, ast::lit_uint(u as u64, ast::ty_u8))
}
fn expr_bool(&self, sp: Span, value: bool) -> @ast::expr {
fn expr_bool(&self, sp: Span, value: bool) -> @ast::Expr {
self.expr_lit(sp, ast::lit_bool(value))
}
fn expr_vstore(&self, sp: Span, expr: @ast::expr, vst: ast::expr_vstore) -> @ast::expr {
self.expr(sp, ast::expr_vstore(expr, vst))
fn expr_vstore(&self, sp: Span, expr: @ast::Expr, vst: ast::ExprVstore) -> @ast::Expr {
self.expr(sp, ast::ExprVstore(expr, vst))
}
fn expr_vec(&self, sp: Span, exprs: ~[@ast::expr]) -> @ast::expr {
self.expr(sp, ast::expr_vec(exprs, ast::m_imm))
fn expr_vec(&self, sp: Span, exprs: ~[@ast::Expr]) -> @ast::Expr {
self.expr(sp, ast::ExprVec(exprs, ast::MutImmutable))
}
fn expr_vec_uniq(&self, sp: Span, exprs: ~[@ast::expr]) -> @ast::expr {
self.expr_vstore(sp, self.expr_vec(sp, exprs), ast::expr_vstore_uniq)
fn expr_vec_uniq(&self, sp: Span, exprs: ~[@ast::Expr]) -> @ast::Expr {
self.expr_vstore(sp, self.expr_vec(sp, exprs), ast::ExprVstoreUniq)
}
fn expr_vec_slice(&self, sp: Span, exprs: ~[@ast::expr]) -> @ast::expr {
self.expr_vstore(sp, self.expr_vec(sp, exprs), ast::expr_vstore_slice)
fn expr_vec_slice(&self, sp: Span, exprs: ~[@ast::Expr]) -> @ast::Expr {
self.expr_vstore(sp, self.expr_vec(sp, exprs), ast::ExprVstoreSlice)
}
fn expr_str(&self, sp: Span, s: @str) -> @ast::expr {
fn expr_str(&self, sp: Span, s: @str) -> @ast::Expr {
self.expr_lit(sp, ast::lit_str(s))
}
fn expr_str_uniq(&self, sp: Span, s: @str) -> @ast::expr {
self.expr_vstore(sp, self.expr_str(sp, s), ast::expr_vstore_uniq)
fn expr_str_uniq(&self, sp: Span, s: @str) -> @ast::Expr {
self.expr_vstore(sp, self.expr_str(sp, s), ast::ExprVstoreUniq)
}
fn expr_unreachable(&self, span: Span) -> @ast::expr {
fn expr_unreachable(&self, span: Span) -> @ast::Expr {
let loc = self.codemap().lookup_char_pos(span.lo);
self.expr_call_global(
span,
@ -582,110 +582,110 @@ impl AstBuilder for @ExtCtxt {
}
fn pat(&self, span: Span, pat: ast::pat_) -> @ast::pat {
@ast::pat { id: self.next_id(), node: pat, span: span }
fn pat(&self, span: Span, pat: ast::Pat_) -> @ast::Pat {
@ast::Pat { id: self.next_id(), node: pat, span: span }
}
fn pat_wild(&self, span: Span) -> @ast::pat {
self.pat(span, ast::pat_wild)
fn pat_wild(&self, span: Span) -> @ast::Pat {
self.pat(span, ast::PatWild)
}
fn pat_lit(&self, span: Span, expr: @ast::expr) -> @ast::pat {
self.pat(span, ast::pat_lit(expr))
fn pat_lit(&self, span: Span, expr: @ast::Expr) -> @ast::Pat {
self.pat(span, ast::PatLit(expr))
}
fn pat_ident(&self, span: Span, ident: ast::Ident) -> @ast::pat {
self.pat_ident_binding_mode(span, ident, ast::bind_infer)
fn pat_ident(&self, span: Span, ident: ast::Ident) -> @ast::Pat {
self.pat_ident_binding_mode(span, ident, ast::BindInfer)
}
fn pat_ident_binding_mode(&self,
span: Span,
ident: ast::Ident,
bm: ast::binding_mode) -> @ast::pat {
bm: ast::BindingMode) -> @ast::Pat {
let path = self.path_ident(span, ident);
let pat = ast::pat_ident(bm, path, None);
let pat = ast::PatIdent(bm, path, None);
self.pat(span, pat)
}
fn pat_enum(&self, span: Span, path: ast::Path, subpats: ~[@ast::pat]) -> @ast::pat {
let pat = ast::pat_enum(path, Some(subpats));
fn pat_enum(&self, span: Span, path: ast::Path, subpats: ~[@ast::Pat]) -> @ast::Pat {
let pat = ast::PatEnum(path, Some(subpats));
self.pat(span, pat)
}
fn pat_struct(&self, span: Span,
path: ast::Path, field_pats: ~[ast::field_pat]) -> @ast::pat {
let pat = ast::pat_struct(path, field_pats, false);
path: ast::Path, field_pats: ~[ast::FieldPat]) -> @ast::Pat {
let pat = ast::PatStruct(path, field_pats, false);
self.pat(span, pat)
}
fn arm(&self, _span: Span, pats: ~[@ast::pat], expr: @ast::expr) -> ast::arm {
ast::arm {
fn arm(&self, _span: Span, pats: ~[@ast::Pat], expr: @ast::Expr) -> ast::Arm {
ast::Arm {
pats: pats,
guard: None,
body: self.block_expr(expr)
}
}
fn arm_unreachable(&self, span: Span) -> ast::arm {
fn arm_unreachable(&self, span: Span) -> ast::Arm {
self.arm(span, ~[self.pat_wild(span)], self.expr_unreachable(span))
}
fn expr_match(&self, span: Span, arg: @ast::expr, arms: ~[ast::arm]) -> @expr {
self.expr(span, ast::expr_match(arg, arms))
fn expr_match(&self, span: Span, arg: @ast::Expr, arms: ~[ast::Arm]) -> @Expr {
self.expr(span, ast::ExprMatch(arg, arms))
}
fn expr_if(&self, span: Span,
cond: @ast::expr, then: @ast::expr, els: Option<@ast::expr>) -> @ast::expr {
cond: @ast::Expr, then: @ast::Expr, els: Option<@ast::Expr>) -> @ast::Expr {
let els = els.map_move(|x| self.expr_block(self.block_expr(x)));
self.expr(span, ast::expr_if(cond, self.block_expr(then), els))
self.expr(span, ast::ExprIf(cond, self.block_expr(then), els))
}
fn lambda_fn_decl(&self, span: Span, fn_decl: ast::fn_decl, blk: ast::Block) -> @ast::expr {
self.expr(span, ast::expr_fn_block(fn_decl, blk))
fn lambda_fn_decl(&self, span: Span, fn_decl: ast::fn_decl, blk: ast::Block) -> @ast::Expr {
self.expr(span, ast::ExprFnBlock(fn_decl, blk))
}
fn lambda(&self, span: Span, ids: ~[ast::Ident], blk: ast::Block) -> @ast::expr {
fn lambda(&self, span: Span, ids: ~[ast::Ident], blk: ast::Block) -> @ast::Expr {
let fn_decl = self.fn_decl(
ids.map(|id| self.arg(span, *id, self.ty_infer(span))),
self.ty_infer(span));
self.expr(span, ast::expr_fn_block(fn_decl, blk))
self.expr(span, ast::ExprFnBlock(fn_decl, blk))
}
#[cfg(stage0)]
fn lambda0(&self, _span: Span, blk: ast::Block) -> @ast::expr {
fn lambda0(&self, _span: Span, blk: ast::Block) -> @ast::Expr {
let ext_cx = *self;
let blk_e = self.expr(blk.span, ast::expr_block(blk.clone()));
let blk_e = self.expr(blk.span, ast::ExprBlock(blk.clone()));
quote_expr!(|| $blk_e )
}
#[cfg(not(stage0))]
fn lambda0(&self, _span: Span, blk: ast::Block) -> @ast::expr {
let blk_e = self.expr(blk.span, ast::expr_block(blk.clone()));
fn lambda0(&self, _span: Span, blk: ast::Block) -> @ast::Expr {
let blk_e = self.expr(blk.span, ast::ExprBlock(blk.clone()));
quote_expr!(*self, || $blk_e )
}
#[cfg(stage0)]
fn lambda1(&self, _span: Span, blk: ast::Block, ident: ast::Ident) -> @ast::expr {
fn lambda1(&self, _span: Span, blk: ast::Block, ident: ast::Ident) -> @ast::Expr {
let ext_cx = *self;
let blk_e = self.expr(blk.span, ast::expr_block(blk.clone()));
let blk_e = self.expr(blk.span, ast::ExprBlock(blk.clone()));
quote_expr!(|$ident| $blk_e )
}
#[cfg(not(stage0))]
fn lambda1(&self, _span: Span, blk: ast::Block, ident: ast::Ident) -> @ast::expr {
let blk_e = self.expr(blk.span, ast::expr_block(blk.clone()));
fn lambda1(&self, _span: Span, blk: ast::Block, ident: ast::Ident) -> @ast::Expr {
let blk_e = self.expr(blk.span, ast::ExprBlock(blk.clone()));
quote_expr!(*self, |$ident| $blk_e )
}
fn lambda_expr(&self, span: Span, ids: ~[ast::Ident], expr: @ast::expr) -> @ast::expr {
fn lambda_expr(&self, span: Span, ids: ~[ast::Ident], expr: @ast::Expr) -> @ast::Expr {
self.lambda(span, ids, self.block_expr(expr))
}
fn lambda_expr_0(&self, span: Span, expr: @ast::expr) -> @ast::expr {
fn lambda_expr_0(&self, span: Span, expr: @ast::Expr) -> @ast::Expr {
self.lambda0(span, self.block_expr(expr))
}
fn lambda_expr_1(&self, span: Span, expr: @ast::expr, ident: ast::Ident) -> @ast::expr {
fn lambda_expr_1(&self, span: Span, expr: @ast::Expr, ident: ast::Ident) -> @ast::Expr {
self.lambda1(span, self.block_expr(expr), ident)
}
fn lambda_stmts(&self, span: Span, ids: ~[ast::Ident], stmts: ~[@ast::stmt]) -> @ast::expr {
fn lambda_stmts(&self, span: Span, ids: ~[ast::Ident], stmts: ~[@ast::Stmt]) -> @ast::Expr {
self.lambda(span, ids, self.block(span, stmts, None))
}
fn lambda_stmts_0(&self, span: Span, stmts: ~[@ast::stmt]) -> @ast::expr {
fn lambda_stmts_0(&self, span: Span, stmts: ~[@ast::Stmt]) -> @ast::Expr {
self.lambda0(span, self.block(span, stmts, None))
}
fn lambda_stmts_1(&self, span: Span, stmts: ~[@ast::stmt], ident: ast::Ident) -> @ast::expr {
fn lambda_stmts_1(&self, span: Span, stmts: ~[@ast::Stmt], ident: ast::Ident) -> @ast::Expr {
self.lambda1(span, self.block(span, stmts, None), ident)
}
@ -889,8 +889,8 @@ pub trait Duplicate {
fn duplicate(&self, cx: @ExtCtxt) -> Self;
}
impl Duplicate for @ast::expr {
fn duplicate(&self, cx: @ExtCtxt) -> @ast::expr {
impl Duplicate for @ast::Expr {
fn duplicate(&self, cx: @ExtCtxt) -> @ast::Expr {
let folder = fold::default_ast_fold();
let folder = @fold::AstFoldFns {
new_id: |_| cx.next_id(),

View file

@ -24,7 +24,7 @@ pub fn expand_syntax_ext(cx: @ExtCtxt, sp: Span, tts: &[ast::token_tree]) -> bas
for expr in exprs.iter() {
match expr.node {
// expression is a literal
ast::expr_lit(lit) => match lit.node {
ast::ExprLit(lit) => match lit.node {
// string literal, push each byte to vector expression
ast::lit_str(s) => {
for byte in s.byte_iter() {

View file

@ -34,9 +34,9 @@ pub fn expand_syntax_ext(cx: @ExtCtxt, sp: Span, tts: &[ast::token_tree])
}
let res = str_to_ident(res_str);
let e = @ast::expr {
let e = @ast::Expr {
id: cx.next_id(),
node: ast::expr_path(
node: ast::ExprPath(
ast::Path {
span: sp,
global: false,

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use ast::{MetaItem, item, expr};
use ast::{MetaItem, item, Expr};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -69,7 +69,7 @@ pub fn expand_deriving_deep_clone(cx: @ExtCtxt,
fn cs_clone(
name: &str,
cx: @ExtCtxt, span: Span,
substr: &Substructure) -> @expr {
substr: &Substructure) -> @Expr {
let clone_ident = substr.method_ident;
let ctor_ident;
let all_fields;

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use ast::{MetaItem, item, expr};
use ast::{MetaItem, item, Expr};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -20,11 +20,11 @@ pub fn expand_deriving_eq(cx: @ExtCtxt,
in_items: ~[@item]) -> ~[@item] {
// structures are equal if all fields are equal, and non equal, if
// any fields are not equal or if the enum variants are different
fn cs_eq(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @expr {
fn cs_eq(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr {
cs_and(|cx, span, _, _| cx.expr_bool(span, false),
cx, span, substr)
}
fn cs_ne(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @expr {
fn cs_ne(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr {
cs_or(|cx, span, _, _| cx.expr_bool(span, true),
cx, span, substr)
}

View file

@ -9,7 +9,7 @@
// except according to those terms.
use ast;
use ast::{MetaItem, item, expr};
use ast::{MetaItem, item, Expr};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -48,8 +48,8 @@ pub fn expand_deriving_ord(cx: @ExtCtxt,
}
/// Strict inequality.
fn cs_op(less: bool, equal: bool, cx: @ExtCtxt, span: Span, substr: &Substructure) -> @expr {
let op = if less {ast::lt} else {ast::gt};
fn cs_op(less: bool, equal: bool, cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr {
let op = if less {ast::BiLt} else {ast::BiGt};
cs_fold(
false, // need foldr,
|cx, span, subexpr, self_f, other_fs| {
@ -79,13 +79,13 @@ fn cs_op(less: bool, equal: bool, cx: @ExtCtxt, span: Span, substr: &Substructur
cx.expr_deref(span, self_f),
cx.expr_deref(span, other_f));
let not_cmp = cx.expr_unary(span, ast::not,
let not_cmp = cx.expr_unary(span, ast::UnNot,
cx.expr_binary(span, op,
cx.expr_deref(span, other_f),
cx.expr_deref(span, self_f)));
let and = cx.expr_binary(span, ast::and, not_cmp, subexpr);
cx.expr_binary(span, ast::or, cmp, and)
let and = cx.expr_binary(span, ast::BiAnd, not_cmp, subexpr);
cx.expr_binary(span, ast::BiOr, cmp, and)
},
cx.expr_bool(span, equal),
|cx, span, args, _| {

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use ast::{MetaItem, item, expr};
use ast::{MetaItem, item, Expr};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -18,7 +18,7 @@ pub fn expand_deriving_totaleq(cx: @ExtCtxt,
span: Span,
mitem: @MetaItem,
in_items: ~[@item]) -> ~[@item] {
fn cs_equals(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @expr {
fn cs_equals(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr {
cs_and(|cx, span, _, _| cx.expr_bool(span, false),
cx, span, substr)
}

View file

@ -9,7 +9,7 @@
// except according to those terms.
use ast;
use ast::{MetaItem, item, expr};
use ast::{MetaItem, item, Expr};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -54,7 +54,7 @@ pub fn ordering_const(cx: @ExtCtxt, span: Span, cnst: Ordering) -> ast::Path {
}
pub fn cs_cmp(cx: @ExtCtxt, span: Span,
substr: &Substructure) -> @expr {
substr: &Substructure) -> @Expr {
let test_id = cx.ident_of("__test");
let equals_path = ordering_const(cx, span, Equal);
@ -89,7 +89,7 @@ pub fn cs_cmp(cx: @ExtCtxt, span: Span,
let assign = cx.stmt_let(span, false, test_id, new);
let cond = cx.expr_binary(span, ast::eq,
let cond = cx.expr_binary(span, ast::BiEq,
cx.expr_ident(span, test_id),
cx.expr_path(equals_path.clone()));
let if_ = cx.expr_if(span,

View file

@ -15,7 +15,7 @@ encodable.rs for more.
use std::vec;
use ast::{MetaItem, item, expr, m_mutbl};
use ast::{MetaItem, item, Expr, MutMutable};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -39,7 +39,7 @@ pub fn expand_deriving_decodable(cx: @ExtCtxt,
generics: LifetimeBounds::empty(),
explicit_self: None,
args: ~[Ptr(~Literal(Path::new_local("__D")),
Borrowed(None, m_mutbl))],
Borrowed(None, MutMutable))],
ret_ty: Self,
const_nonmatching: true,
combine_substructure: decodable_substructure,
@ -51,7 +51,7 @@ pub fn expand_deriving_decodable(cx: @ExtCtxt,
}
fn decodable_substructure(cx: @ExtCtxt, span: Span,
substr: &Substructure) -> @expr {
substr: &Substructure) -> @Expr {
let decoder = substr.nonself_args[0];
let recurse = ~[cx.ident_of("extra"),
cx.ident_of("serialize"),

View file

@ -75,7 +75,7 @@ would yield functions like:
}
*/
use ast::{MetaItem, item, expr, m_imm, m_mutbl};
use ast::{MetaItem, item, Expr, MutImmutable, MutMutable};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -97,9 +97,9 @@ pub fn expand_deriving_encodable(cx: @ExtCtxt,
MethodDef {
name: "encode",
generics: LifetimeBounds::empty(),
explicit_self: Some(Some(Borrowed(None, m_imm))),
explicit_self: Some(Some(Borrowed(None, MutImmutable))),
args: ~[Ptr(~Literal(Path::new_local("__E")),
Borrowed(None, m_mutbl))],
Borrowed(None, MutMutable))],
ret_ty: nil_ty(),
const_nonmatching: true,
combine_substructure: encodable_substructure,
@ -111,7 +111,7 @@ pub fn expand_deriving_encodable(cx: @ExtCtxt,
}
fn encodable_substructure(cx: @ExtCtxt, span: Span,
substr: &Substructure) -> @expr {
substr: &Substructure) -> @Expr {
let encoder = substr.nonself_args[0];
// throw an underscore in front to suppress unused variable warnings
let blkarg = cx.ident_of("_e");

View file

@ -163,7 +163,7 @@ StaticEnum(<ast::enum_def of C>, ~[(<ident of C0>, Left(1)),
*/
use ast;
use ast::{enum_def, expr, Ident, Generics, struct_def};
use ast::{enum_def, Expr, Ident, Generics, struct_def};
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -220,9 +220,9 @@ pub struct Substructure<'self> {
/// ident of the method
method_ident: Ident,
/// dereferenced access to any Self or Ptr(Self, _) arguments
self_args: &'self [@expr],
self_args: &'self [@Expr],
/// verbatim access to any other arguments
nonself_args: &'self [@expr],
nonself_args: &'self [@Expr],
fields: &'self SubstructureFields<'self>
}
@ -234,21 +234,21 @@ pub enum SubstructureFields<'self> {
ident is the ident of the current field (`None` for all fields in tuple
structs).
*/
Struct(~[(Option<Ident>, @expr, ~[@expr])]),
Struct(~[(Option<Ident>, @Expr, ~[@Expr])]),
/**
Matching variants of the enum: variant index, ast::variant,
fields: `(field ident, self, [others])`, where the field ident is
only non-`None` in the case of a struct variant.
*/
EnumMatching(uint, &'self ast::variant, ~[(Option<Ident>, @expr, ~[@expr])]),
EnumMatching(uint, &'self ast::variant, ~[(Option<Ident>, @Expr, ~[@Expr])]),
/**
non-matching variants of the enum, [(variant index, ast::variant,
[field ident, fields])] (i.e. all fields for self are in the
first tuple, for other1 are in the second tuple, etc.)
*/
EnumNonMatching(&'self [(uint, ast::variant, ~[(Option<Ident>, @expr)])]),
EnumNonMatching(&'self [(uint, ast::variant, ~[(Option<Ident>, @Expr)])]),
/// A static method where Self is a struct
StaticStruct(&'self ast::struct_def, Either<uint, ~[Ident]>),
@ -263,7 +263,7 @@ Combine the values of all the fields together. The last argument is
all the fields of all the structures, see above for details.
*/
pub type CombineSubstructureFunc<'self> =
&'self fn(@ExtCtxt, Span, &Substructure) -> @expr;
&'self fn(@ExtCtxt, Span, &Substructure) -> @Expr;
/**
Deal with non-matching enum variants, the arguments are a list
@ -273,8 +273,8 @@ representing each variant: (variant index, ast::variant instance,
pub type EnumNonMatchFunc<'self> =
&'self fn(@ExtCtxt, Span,
&[(uint, ast::variant,
~[(Option<Ident>, @expr)])],
&[@expr]) -> @expr;
~[(Option<Ident>, @Expr)])],
&[@Expr]) -> @Expr;
impl<'self> TraitDef<'self> {
@ -440,10 +440,10 @@ impl<'self> MethodDef<'self> {
cx: @ExtCtxt,
span: Span,
type_ident: Ident,
self_args: &[@expr],
nonself_args: &[@expr],
self_args: &[@Expr],
nonself_args: &[@Expr],
fields: &SubstructureFields)
-> @expr {
-> @Expr {
let substructure = Substructure {
type_ident: type_ident,
method_ident: cx.ident_of(self.name),
@ -466,7 +466,7 @@ impl<'self> MethodDef<'self> {
fn split_self_nonself_args(&self, cx: @ExtCtxt, span: Span,
type_ident: Ident, generics: &Generics)
-> (ast::explicit_self, ~[@expr], ~[@expr], ~[(Ident, ast::Ty)]) {
-> (ast::explicit_self, ~[@Expr], ~[@Expr], ~[(Ident, ast::Ty)]) {
let mut self_args = ~[];
let mut nonself_args = ~[];
@ -515,7 +515,7 @@ impl<'self> MethodDef<'self> {
generics: &Generics,
explicit_self: ast::explicit_self,
arg_types: ~[(Ident, ast::Ty)],
body: @expr) -> @ast::method {
body: @Expr) -> @ast::method {
// create the generics that aren't for Self
let fn_generics = self.generics.to_generics(cx, span, type_ident, generics);
@ -572,9 +572,9 @@ impl<'self> MethodDef<'self> {
span: Span,
struct_def: &struct_def,
type_ident: Ident,
self_args: &[@expr],
nonself_args: &[@expr])
-> @expr {
self_args: &[@Expr],
nonself_args: &[@Expr])
-> @Expr {
let mut raw_fields = ~[]; // ~[[fields of self],
// [fields of next Self arg], [etc]]
@ -582,7 +582,7 @@ impl<'self> MethodDef<'self> {
for i in range(0u, self_args.len()) {
let (pat, ident_expr) = create_struct_pattern(cx, span,
type_ident, struct_def,
fmt!("__self_%u", i), ast::m_imm);
fmt!("__self_%u", i), ast::MutImmutable);
patterns.push(pat);
raw_fields.push(ident_expr);
}
@ -626,9 +626,9 @@ impl<'self> MethodDef<'self> {
span: Span,
struct_def: &struct_def,
type_ident: Ident,
self_args: &[@expr],
nonself_args: &[@expr])
-> @expr {
self_args: &[@Expr],
nonself_args: &[@Expr])
-> @Expr {
let summary = summarise_struct(cx, span, struct_def);
self.call_substructure_method(cx, span,
@ -668,9 +668,9 @@ impl<'self> MethodDef<'self> {
span: Span,
enum_def: &enum_def,
type_ident: Ident,
self_args: &[@expr],
nonself_args: &[@expr])
-> @expr {
self_args: &[@Expr],
nonself_args: &[@Expr])
-> @Expr {
let mut matches = ~[];
self.build_enum_match(cx, span, enum_def, type_ident,
self_args, nonself_args,
@ -703,12 +703,12 @@ impl<'self> MethodDef<'self> {
cx: @ExtCtxt, span: Span,
enum_def: &enum_def,
type_ident: Ident,
self_args: &[@expr],
nonself_args: &[@expr],
self_args: &[@Expr],
nonself_args: &[@Expr],
matching: Option<uint>,
matches_so_far: &mut ~[(uint, ast::variant,
~[(Option<Ident>, @expr)])],
match_count: uint) -> @expr {
~[(Option<Ident>, @Expr)])],
match_count: uint) -> @Expr {
if match_count == self_args.len() {
// we've matched against all arguments, so make the final
// expression at the bottom of the match tree
@ -787,7 +787,7 @@ impl<'self> MethodDef<'self> {
let (pattern, idents) = create_enum_variant_pattern(cx, span,
variant,
current_match_str,
ast::m_imm);
ast::MutImmutable);
matches_so_far.push((index,
/*bad*/ (*variant).clone(),
@ -818,7 +818,7 @@ impl<'self> MethodDef<'self> {
let (pattern, idents) = create_enum_variant_pattern(cx, span,
variant,
current_match_str,
ast::m_imm);
ast::MutImmutable);
matches_so_far.push((index,
/*bad*/ (*variant).clone(),
@ -853,9 +853,9 @@ impl<'self> MethodDef<'self> {
span: Span,
enum_def: &enum_def,
type_ident: Ident,
self_args: &[@expr],
nonself_args: &[@expr])
-> @expr {
self_args: &[@Expr],
nonself_args: &[@Expr])
-> @Expr {
let summary = do enum_def.variants.map |v| {
let ident = v.node.name;
let summary = match v.node.kind {
@ -898,11 +898,11 @@ fn summarise_struct(cx: @ExtCtxt, span: Span,
pub fn create_subpatterns(cx: @ExtCtxt,
span: Span,
field_paths: ~[ast::Path],
mutbl: ast::mutability)
-> ~[@ast::pat] {
mutbl: ast::Mutability)
-> ~[@ast::Pat] {
do field_paths.map |path| {
cx.pat(span,
ast::pat_ident(ast::bind_by_ref(mutbl), (*path).clone(), None))
ast::PatIdent(ast::BindByRef(mutbl), (*path).clone(), None))
}
}
@ -916,12 +916,12 @@ fn create_struct_pattern(cx: @ExtCtxt,
struct_ident: Ident,
struct_def: &struct_def,
prefix: &str,
mutbl: ast::mutability)
-> (@ast::pat, ~[(Option<Ident>, @expr)]) {
mutbl: ast::Mutability)
-> (@ast::Pat, ~[(Option<Ident>, @Expr)]) {
if struct_def.fields.is_empty() {
return (
cx.pat_ident_binding_mode(
span, struct_ident, ast::bind_infer),
span, struct_ident, ast::BindInfer),
~[]);
}
@ -961,7 +961,7 @@ fn create_struct_pattern(cx: @ExtCtxt,
let field_pats = do vec::build |push| {
for (&pat, &(id, _)) in subpats.iter().zip(ident_expr.iter()) {
// id is guaranteed to be Some
push(ast::field_pat { ident: id.unwrap(), pat: pat })
push(ast::FieldPat { ident: id.unwrap(), pat: pat })
}
};
cx.pat_struct(span, matching_path, field_pats)
@ -976,15 +976,15 @@ fn create_enum_variant_pattern(cx: @ExtCtxt,
span: Span,
variant: &ast::variant,
prefix: &str,
mutbl: ast::mutability)
-> (@ast::pat, ~[(Option<Ident>, @expr)]) {
mutbl: ast::Mutability)
-> (@ast::Pat, ~[(Option<Ident>, @Expr)]) {
let variant_ident = variant.node.name;
match variant.node.kind {
ast::tuple_variant_kind(ref variant_args) => {
if variant_args.is_empty() {
return (cx.pat_ident_binding_mode(
span, variant_ident, ast::bind_infer), ~[]);
span, variant_ident, ast::BindInfer), ~[]);
}
let matching_path = cx.path_ident(span, variant_ident);
@ -1023,13 +1023,13 @@ left-to-right (`true`) or right-to-left (`false`).
*/
pub fn cs_fold(use_foldl: bool,
f: &fn(@ExtCtxt, Span,
old: @expr,
self_f: @expr,
other_fs: &[@expr]) -> @expr,
base: @expr,
old: @Expr,
self_f: @Expr,
other_fs: &[@Expr]) -> @Expr,
base: @Expr,
enum_nonmatch_f: EnumNonMatchFunc,
cx: @ExtCtxt, span: Span,
substructure: &Substructure) -> @expr {
substructure: &Substructure) -> @Expr {
match *substructure.fields {
EnumMatching(_, _, ref all_fields) | Struct(ref all_fields) => {
if use_foldl {
@ -1064,10 +1064,10 @@ f(cx, span, ~[self_1.method(__arg_1_1, __arg_2_1),
~~~
*/
#[inline]
pub fn cs_same_method(f: &fn(@ExtCtxt, Span, ~[@expr]) -> @expr,
pub fn cs_same_method(f: &fn(@ExtCtxt, Span, ~[@Expr]) -> @Expr,
enum_nonmatch_f: EnumNonMatchFunc,
cx: @ExtCtxt, span: Span,
substructure: &Substructure) -> @expr {
substructure: &Substructure) -> @Expr {
match *substructure.fields {
EnumMatching(_, _, ref all_fields) | Struct(ref all_fields) => {
// call self_n.method(other_1_n, other_2_n, ...)
@ -1097,11 +1097,11 @@ fields. `use_foldl` controls whether this is done left-to-right
*/
#[inline]
pub fn cs_same_method_fold(use_foldl: bool,
f: &fn(@ExtCtxt, Span, @expr, @expr) -> @expr,
base: @expr,
f: &fn(@ExtCtxt, Span, @Expr, @Expr) -> @Expr,
base: @Expr,
enum_nonmatch_f: EnumNonMatchFunc,
cx: @ExtCtxt, span: Span,
substructure: &Substructure) -> @expr {
substructure: &Substructure) -> @Expr {
cs_same_method(
|cx, span, vals| {
if use_foldl {
@ -1124,10 +1124,10 @@ Use a given binop to combine the result of calling the derived method
on all the fields.
*/
#[inline]
pub fn cs_binop(binop: ast::binop, base: @expr,
pub fn cs_binop(binop: ast::BinOp, base: @Expr,
enum_nonmatch_f: EnumNonMatchFunc,
cx: @ExtCtxt, span: Span,
substructure: &Substructure) -> @expr {
substructure: &Substructure) -> @Expr {
cs_same_method_fold(
true, // foldl is good enough
|cx, span, old, new| {
@ -1145,8 +1145,8 @@ pub fn cs_binop(binop: ast::binop, base: @expr,
#[inline]
pub fn cs_or(enum_nonmatch_f: EnumNonMatchFunc,
cx: @ExtCtxt, span: Span,
substructure: &Substructure) -> @expr {
cs_binop(ast::or, cx.expr_bool(span, false),
substructure: &Substructure) -> @Expr {
cs_binop(ast::BiOr, cx.expr_bool(span, false),
enum_nonmatch_f,
cx, span, substructure)
}
@ -1154,8 +1154,8 @@ pub fn cs_or(enum_nonmatch_f: EnumNonMatchFunc,
#[inline]
pub fn cs_and(enum_nonmatch_f: EnumNonMatchFunc,
cx: @ExtCtxt, span: Span,
substructure: &Substructure) -> @expr {
cs_binop(ast::and, cx.expr_bool(span, true),
substructure: &Substructure) -> @Expr {
cs_binop(ast::BiAnd, cx.expr_bool(span, true),
enum_nonmatch_f,
cx, span, substructure)
}

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use ast::{MetaItem, item, expr, and};
use ast::{MetaItem, item, Expr, BiAnd};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -42,7 +42,7 @@ pub fn expand_deriving_iter_bytes(cx: @ExtCtxt,
trait_def.expand(cx, span, mitem, in_items)
}
fn iter_bytes_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @expr {
fn iter_bytes_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr {
let (lsb0, f)= match substr.nonself_args {
[l, f] => (l, f),
_ => cx.span_bug(span, "Incorrect number of arguments in `deriving(IterBytes)`")
@ -90,6 +90,6 @@ fn iter_bytes_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @
}
do exprs.slice(1, exprs.len()).iter().fold(exprs[0]) |prev, me| {
cx.expr_binary(span, and, prev, *me)
cx.expr_binary(span, BiAnd, prev, *me)
}
}

View file

@ -9,7 +9,7 @@
// except according to those terms.
use ast;
use ast::{MetaItem, item, expr, Ident};
use ast::{MetaItem, item, Expr, Ident};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::{AstBuilder, Duplicate};
@ -37,7 +37,7 @@ pub fn expand_deriving_rand(cx: @ExtCtxt,
explicit_self: None,
args: ~[
Ptr(~Literal(Path::new_local("R")),
Borrowed(None, ast::m_mutbl))
Borrowed(None, ast::MutMutable))
],
ret_ty: Self,
const_nonmatching: false,
@ -48,7 +48,7 @@ pub fn expand_deriving_rand(cx: @ExtCtxt,
trait_def.expand(cx, span, mitem, in_items)
}
fn rand_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @expr {
fn rand_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr {
let rng = match substr.nonself_args {
[rng] => ~[ rng ],
_ => cx.bug("Incorrect number of arguments to `rand` in `deriving(Rand)`")
@ -100,7 +100,7 @@ fn rand_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @expr {
// rand() % variants.len()
let value_ref = cx.expr_ident(span, value_ident);
let rand_variant = cx.expr_binary(span,
ast::rem,
ast::BiRem,
value_ref,
variant_count);
@ -115,7 +115,7 @@ fn rand_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @expr {
rand_thing(cx, span, ident, summary, || rand_call()))
}
}
}.collect::<~[ast::arm]>();
}.collect::<~[ast::Arm]>();
// _ => {} at the end. Should never occur
arms.push(cx.arm_unreachable(span));
@ -131,7 +131,7 @@ fn rand_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @expr {
fn rand_thing(cx: @ExtCtxt, span: Span,
ctor_ident: Ident,
summary: &Either<uint, ~[Ident]>,
rand_call: &fn() -> @expr) -> @expr {
rand_call: &fn() -> @Expr) -> @Expr {
match *summary {
Left(count) => {
if count == 0 {

View file

@ -9,7 +9,7 @@
// except according to those terms.
use ast;
use ast::{MetaItem, item, expr};
use ast::{MetaItem, item, Expr};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -44,11 +44,11 @@ pub fn expand_deriving_to_str(cx: @ExtCtxt,
// to_str() method on each field. Hence we mirror the logic of the log_str()
// method, but with tweaks to call to_str() on sub-fields.
fn to_str_substructure(cx: @ExtCtxt, span: Span,
substr: &Substructure) -> @expr {
substr: &Substructure) -> @Expr {
let to_str = cx.ident_of("to_str");
let doit = |start: &str, end: @str, name: ast::Ident,
fields: &[(Option<ast::Ident>, @expr, ~[@expr])]| {
fields: &[(Option<ast::Ident>, @Expr, ~[@Expr])]| {
if fields.len() == 0 {
cx.expr_str_uniq(span, cx.str_of(name))
} else {
@ -58,7 +58,7 @@ fn to_str_substructure(cx: @ExtCtxt, span: Span,
let mut stmts = ~[cx.stmt_let(span, true, buf, init)];
let push_str = cx.ident_of("push_str");
let push = |s: @expr| {
let push = |s: @Expr| {
let ebuf = cx.expr_ident(span, buf);
let call = cx.expr_method_call(span, ebuf, push_str, ~[s]);
stmts.push(cx.stmt_expr(call));

View file

@ -14,7 +14,7 @@ explicit `Self` type to use when specifying impls to be derived.
*/
use ast;
use ast::{expr,Generics,Ident};
use ast::{Expr,Generics,Ident};
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
use codemap::{Span,respan};
@ -23,8 +23,8 @@ use opt_vec;
/// The types of pointers
pub enum PtrTy<'self> {
Send, // ~
Managed(ast::mutability), // @[mut]
Borrowed(Option<&'self str>, ast::mutability), // &['lifetime] [mut]
Managed(ast::Mutability), // @[mut]
Borrowed(Option<&'self str>, ast::Mutability), // &['lifetime] [mut]
}
/// A path, e.g. `::std::option::Option::<int>` (global). Has support
@ -91,7 +91,7 @@ pub enum Ty<'self> {
}
pub fn borrowed_ptrty<'r>() -> PtrTy<'r> {
Borrowed(None, ast::m_imm)
Borrowed(None, ast::MutImmutable)
}
pub fn borrowed<'r>(ty: ~Ty<'r>) -> Ty<'r> {
Ptr(ty, borrowed_ptrty())
@ -236,7 +236,7 @@ impl<'self> LifetimeBounds<'self> {
pub fn get_explicit_self(cx: @ExtCtxt, span: Span, self_ptr: &Option<PtrTy>)
-> (@expr, ast::explicit_self) {
-> (@Expr, ast::explicit_self) {
let self_path = cx.expr_self(span);
match *self_ptr {
None => {

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use ast::{MetaItem, item, expr};
use ast::{MetaItem, item, Expr};
use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
@ -55,7 +55,7 @@ pub fn expand_deriving_zero(cx: @ExtCtxt,
trait_def.expand(cx, span, mitem, in_items)
}
fn zero_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @expr {
fn zero_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr {
let zero_ident = ~[
cx.ident_of("std"),
cx.ident_of("num"),

View file

@ -8,9 +8,9 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use ast::{Block, Crate, NodeId, expr_, expr_mac, Ident, mac_invoc_tt};
use ast::{item_mac, stmt_, stmt_mac, stmt_expr, stmt_semi};
use ast::{illegal_ctxt};
use ast::{Block, Crate, NodeId, Expr_, ExprMac, Ident, mac_invoc_tt};
use ast::{item_mac, Stmt_, StmtMac, StmtExpr, StmtSemi};
use ast::{ILLEGAL_CTXT};
use ast;
use ast_util::{new_rename, new_mark, resolve};
use attr;
@ -31,15 +31,15 @@ use std::vec;
pub fn expand_expr(extsbox: @mut SyntaxEnv,
cx: @ExtCtxt,
e: &expr_,
e: &Expr_,
s: Span,
fld: @ast_fold,
orig: @fn(&expr_, Span, @ast_fold) -> (expr_, Span))
-> (expr_, Span) {
orig: @fn(&Expr_, Span, @ast_fold) -> (Expr_, Span))
-> (Expr_, Span) {
match *e {
// expr_mac should really be expr_ext or something; it's the
// entry-point for all syntax extensions.
expr_mac(ref mac) => {
ExprMac(ref mac) => {
match (*mac).node {
// Token-tree macros:
mac_invoc_tt(ref pth, ref tts) => {
@ -104,7 +104,7 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv,
// Desugar expr_for_loop
// From: `for <src_pat> in <src_expr> <src_loop_block>`
ast::expr_for_loop(src_pat, src_expr, ref src_loop_block) => {
ast::ExprForLoop(src_pat, src_expr, ref src_loop_block) => {
let src_pat = src_pat.clone();
let src_expr = src_expr.clone();
@ -118,8 +118,8 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv,
let hi = s.hi;
pub fn mk_expr(cx: @ExtCtxt, span: Span,
node: expr_) -> @ast::expr {
@ast::expr {
node: Expr_) -> @ast::Expr {
@ast::Expr {
id: cx.next_id(),
node: node,
span: span,
@ -127,8 +127,8 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv,
}
fn mk_block(cx: @ExtCtxt,
stmts: &[@ast::stmt],
expr: Option<@ast::expr>,
stmts: &[@ast::Stmt],
expr: Option<@ast::Expr>,
span: Span) -> ast::Block {
ast::Block {
view_items: ~[],
@ -186,33 +186,33 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv,
let local = @ast::Local {
is_mutbl: false,
ty: ty,
pat: @ast::pat {
pat: @ast::Pat {
id: cx.next_id(),
node: ast::pat_ident(ast::bind_infer, local_path_1, None),
node: ast::PatIdent(ast::BindInfer, local_path_1, None),
span: src_expr.span
},
init: Some(mk_expr(cx, src_expr.span,
ast::expr_addr_of(ast::m_mutbl, src_expr))),
ast::ExprAddrOf(ast::MutMutable, src_expr))),
id: cx.next_id(),
span: src_expr.span,
};
let e = @spanned(src_expr.span.lo,
src_expr.span.hi,
ast::decl_local(local));
@spanned(lo, hi, ast::stmt_decl(e, cx.next_id()))
ast::DeclLocal(local));
@spanned(lo, hi, ast::StmtDecl(e, cx.next_id()))
};
// `None => break;`
let none_arm = {
let break_expr = mk_expr(cx, span, ast::expr_break(None));
let break_stmt = @spanned(lo, hi, ast::stmt_expr(break_expr, cx.next_id()));
let break_expr = mk_expr(cx, span, ast::ExprBreak(None));
let break_stmt = @spanned(lo, hi, ast::StmtExpr(break_expr, cx.next_id()));
let none_block = mk_block(cx, [break_stmt], None, span);
let none_pat = @ast::pat {
let none_pat = @ast::Pat {
id: cx.next_id(),
node: ast::pat_ident(ast::bind_infer, none_path, None),
node: ast::PatIdent(ast::BindInfer, none_path, None),
span: span
};
ast::arm {
ast::Arm {
pats: ~[none_pat],
guard: None,
body: none_block
@ -221,12 +221,12 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv,
// `Some(<src_pat>) => <src_loop_block>`
let some_arm = {
let pat = @ast::pat {
let pat = @ast::Pat {
id: cx.next_id(),
node: ast::pat_enum(some_path, Some(~[src_pat])),
node: ast::PatEnum(some_path, Some(~[src_pat])),
span: src_pat.span
};
ast::arm {
ast::Arm {
pats: ~[pat],
guard: None,
body: src_loop_block
@ -235,27 +235,27 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv,
// `match i.next() { ... }`
let match_stmt = {
let local_expr = mk_expr(cx, span, ast::expr_path(local_path_2));
let local_expr = mk_expr(cx, span, ast::ExprPath(local_path_2));
let next_call_expr = mk_expr(cx, span,
ast::expr_method_call(cx.next_id(),
ast::ExprMethodCall(cx.next_id(),
local_expr, next_ident,
~[], ~[], ast::NoSugar));
let match_expr = mk_expr(cx, span, ast::expr_match(next_call_expr,
let match_expr = mk_expr(cx, span, ast::ExprMatch(next_call_expr,
~[none_arm, some_arm]));
@spanned(lo, hi, ast::stmt_expr(match_expr, cx.next_id()))
@spanned(lo, hi, ast::StmtExpr(match_expr, cx.next_id()))
};
// `loop { ... }`
let loop_block = {
let loop_body_block = mk_block(cx, [match_stmt], None, span);
let loop_body_expr = mk_expr(cx, span, ast::expr_loop(loop_body_block, None));
let loop_body_stmt = @spanned(lo, hi, ast::stmt_expr(loop_body_expr, cx.next_id()));
let loop_body_expr = mk_expr(cx, span, ast::ExprLoop(loop_body_block, None));
let loop_body_stmt = @spanned(lo, hi, ast::StmtExpr(loop_body_expr, cx.next_id()));
mk_block(cx, [iter_decl_stmt,
loop_body_stmt],
None, span)
};
(ast::expr_block(loop_block), span)
(ast::ExprBlock(loop_block), span)
}
_ => orig(e, s, fld)
@ -448,14 +448,14 @@ fn insert_macro(exts: SyntaxEnv, name: ast::Name, transformer: @Transformer) {
// expand a stmt
pub fn expand_stmt(extsbox: @mut SyntaxEnv,
cx: @ExtCtxt,
s: &stmt_,
s: &Stmt_,
sp: Span,
fld: @ast_fold,
orig: @fn(&stmt_, Span, @ast_fold)
-> (Option<stmt_>, Span))
-> (Option<stmt_>, Span) {
orig: @fn(&Stmt_, Span, @ast_fold)
-> (Option<Stmt_>, Span))
-> (Option<Stmt_>, Span) {
let (mac, pth, tts, semi) = match *s {
stmt_mac(ref mac, semi) => {
StmtMac(ref mac, semi) => {
match mac.node {
mac_invoc_tt(ref pth, ref tts) => {
((*mac).clone(), pth, (*tts).clone(), semi)
@ -484,7 +484,7 @@ pub fn expand_stmt(extsbox: @mut SyntaxEnv,
});
let expanded = match exp(cx, mac.span, tts) {
MRExpr(e) =>
@codemap::Spanned { node: stmt_expr(e, cx.next_id()),
@codemap::Spanned { node: StmtExpr(e, cx.next_id()),
span: e.span},
MRAny(_,_,stmt_mkr) => stmt_mkr(),
_ => cx.span_fatal(
@ -515,7 +515,7 @@ pub fn expand_stmt(extsbox: @mut SyntaxEnv,
};
(match fully_expanded {
stmt_expr(e, stmt_id) if semi => Some(stmt_semi(e, stmt_id)),
StmtExpr(e, stmt_id) if semi => Some(StmtSemi(e, stmt_id)),
_ => { Some(fully_expanded) } /* might already have a semi */
}, sp)
@ -527,12 +527,12 @@ struct NewNameFinderContext {
}
impl Visitor<()> for NewNameFinderContext {
fn visit_pat(&mut self, pattern: @ast::pat, _: ()) {
fn visit_pat(&mut self, pattern: @ast::Pat, _: ()) {
match *pattern {
// we found a pat_ident!
ast::pat {
ast::Pat {
id: _,
node: ast::pat_ident(_, ref path, ref inner),
node: ast::PatIdent(_, ref path, ref inner),
span: _
} => {
match path {
@ -589,23 +589,23 @@ impl Visitor<()> for NewNameFinderContext {
visit::walk_block(self, block, ())
}
fn visit_stmt(&mut self, stmt: @ast::stmt, _: ()) {
fn visit_stmt(&mut self, stmt: @ast::Stmt, _: ()) {
visit::walk_stmt(self, stmt, ())
}
fn visit_arm(&mut self, arm: &ast::arm, _: ()) {
fn visit_arm(&mut self, arm: &ast::Arm, _: ()) {
visit::walk_arm(self, arm, ())
}
fn visit_decl(&mut self, decl: @ast::decl, _: ()) {
fn visit_decl(&mut self, decl: @ast::Decl, _: ()) {
visit::walk_decl(self, decl, ())
}
fn visit_expr(&mut self, expr: @ast::expr, _: ()) {
fn visit_expr(&mut self, expr: @ast::Expr, _: ()) {
visit::walk_expr(self, expr, ())
}
fn visit_expr_post(&mut self, _: @ast::expr, _: ()) {
fn visit_expr_post(&mut self, _: @ast::Expr, _: ()) {
// Empty!
}
@ -714,7 +714,7 @@ fn renames_to_fold(renames : @mut ~[(ast::Ident,ast::Name)]) -> @ast_fold {
}
// perform a bunch of renames
fn apply_pending_renames(folder : @ast_fold, stmt : ast::stmt) -> @ast::stmt {
fn apply_pending_renames(folder : @ast_fold, stmt : ast::Stmt) -> @ast::Stmt {
match folder.fold_stmt(&stmt) {
Some(s) => s,
None => fail!(fmt!("renaming of stmt produced None"))
@ -1182,7 +1182,7 @@ pub fn new_ident_resolver() ->
|id : ast::Ident|
ast::Ident {
name : resolve(id),
ctxt : illegal_ctxt
ctxt : ILLEGAL_CTXT
}
}
@ -1191,7 +1191,7 @@ pub fn new_ident_resolver() ->
mod test {
use super::*;
use ast;
use ast::{Attribute_, AttrOuter, MetaWord, empty_ctxt};
use ast::{Attribute_, AttrOuter, MetaWord, EMPTY_CTXT};
use codemap;
use codemap::Spanned;
use parse;
@ -1304,7 +1304,7 @@ mod test {
};
let a_name = intern("a");
let a2_name = intern("a2");
let renamer = new_ident_renamer(ast::Ident{name:a_name,ctxt:empty_ctxt},
let renamer = new_ident_renamer(ast::Ident{name:a_name,ctxt:EMPTY_CTXT},
a2_name);
let renamed_ast = fun_to_ident_folder(renamer).fold_item(item_ast).unwrap();
let resolver = new_ident_resolver();

View file

@ -48,8 +48,8 @@ pub fn expand_syntax_ext(cx: @ExtCtxt, sp: Span, tts: &[ast::token_tree])
// expressions. Also: Cleanup the naming of these functions.
// Note: Moved many of the common ones to build.rs --kevina
fn pieces_to_expr(cx: @ExtCtxt, sp: Span,
pieces: ~[Piece], args: ~[@ast::expr])
-> @ast::expr {
pieces: ~[Piece], args: ~[@ast::Expr])
-> @ast::Expr {
fn make_path_vec(ident: &str) -> ~[ast::Ident] {
return ~[str_to_ident("std"),
str_to_ident("unstable"),
@ -57,15 +57,15 @@ fn pieces_to_expr(cx: @ExtCtxt, sp: Span,
str_to_ident("rt"),
str_to_ident(ident)];
}
fn make_rt_path_expr(cx: @ExtCtxt, sp: Span, nm: &str) -> @ast::expr {
fn make_rt_path_expr(cx: @ExtCtxt, sp: Span, nm: &str) -> @ast::Expr {
let path = make_path_vec(nm);
cx.expr_path(cx.path_global(sp, path))
}
// Produces an AST expression that represents a RT::conv record,
// which tells the RT::conv* functions how to perform the conversion
fn make_rt_conv_expr(cx: @ExtCtxt, sp: Span, cnv: &Conv) -> @ast::expr {
fn make_flags(cx: @ExtCtxt, sp: Span, flags: &[Flag]) -> @ast::expr {
fn make_rt_conv_expr(cx: @ExtCtxt, sp: Span, cnv: &Conv) -> @ast::Expr {
fn make_flags(cx: @ExtCtxt, sp: Span, flags: &[Flag]) -> @ast::Expr {
let mut tmp_expr = make_rt_path_expr(cx, sp, "flag_none");
for f in flags.iter() {
let fstr = match *f {
@ -75,12 +75,12 @@ fn pieces_to_expr(cx: @ExtCtxt, sp: Span,
FlagSignAlways => "flag_sign_always",
FlagAlternate => "flag_alternate"
};
tmp_expr = cx.expr_binary(sp, ast::bitor, tmp_expr,
tmp_expr = cx.expr_binary(sp, ast::BiBitOr, tmp_expr,
make_rt_path_expr(cx, sp, fstr));
}
return tmp_expr;
}
fn make_count(cx: @ExtCtxt, sp: Span, cnt: Count) -> @ast::expr {
fn make_count(cx: @ExtCtxt, sp: Span, cnt: Count) -> @ast::Expr {
match cnt {
CountImplied => {
return make_rt_path_expr(cx, sp, "CountImplied");
@ -94,7 +94,7 @@ fn pieces_to_expr(cx: @ExtCtxt, sp: Span,
_ => cx.span_unimpl(sp, "unimplemented fmt! conversion")
}
}
fn make_ty(cx: @ExtCtxt, sp: Span, t: Ty) -> @ast::expr {
fn make_ty(cx: @ExtCtxt, sp: Span, t: Ty) -> @ast::Expr {
let rt_type = match t {
TyHex(c) => match c {
CaseUpper => "TyHexUpper",
@ -106,9 +106,9 @@ fn pieces_to_expr(cx: @ExtCtxt, sp: Span,
};
return make_rt_path_expr(cx, sp, rt_type);
}
fn make_conv_struct(cx: @ExtCtxt, sp: Span, flags_expr: @ast::expr,
width_expr: @ast::expr, precision_expr: @ast::expr,
ty_expr: @ast::expr) -> @ast::expr {
fn make_conv_struct(cx: @ExtCtxt, sp: Span, flags_expr: @ast::Expr,
width_expr: @ast::Expr, precision_expr: @ast::Expr,
ty_expr: @ast::Expr) -> @ast::Expr {
cx.expr_struct(
sp,
cx.path_global(sp, make_path_vec("Conv")),
@ -128,7 +128,7 @@ fn pieces_to_expr(cx: @ExtCtxt, sp: Span,
rt_conv_precision, rt_conv_ty)
}
fn make_conv_call(cx: @ExtCtxt, sp: Span, conv_type: &str, cnv: &Conv,
arg: @ast::expr, buf: @ast::expr) -> @ast::expr {
arg: @ast::Expr, buf: @ast::Expr) -> @ast::Expr {
let fname = ~"conv_" + conv_type;
let path = make_path_vec(fname);
let cnv_expr = make_rt_conv_expr(cx, sp, cnv);
@ -137,7 +137,7 @@ fn pieces_to_expr(cx: @ExtCtxt, sp: Span,
}
fn make_new_conv(cx: @ExtCtxt, sp: Span, cnv: &Conv,
arg: @ast::expr, buf: @ast::expr) -> @ast::expr {
arg: @ast::Expr, buf: @ast::Expr) -> @ast::Expr {
fn is_signed_type(cnv: &Conv) -> bool {
match cnv.ty {
TyInt(s) => match s {

Some files were not shown because too many files have changed in this diff Show more