diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 6c6b2c590af..ca456ef1c31 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -3026,7 +3026,7 @@ fn lval_static_fn(bcx: @block_ctxt, tpt: ty::ty_param_kinds_and_ty, } fn lookup_discriminant(lcx: @local_ctxt, vid: ast::def_id) -> ValueRef { - alt lcx.ccx.discrims.find(vid.node) { + alt lcx.ccx.discrims.find(vid) { none. { // It's an external discriminant that we haven't seen yet. assert (vid.crate != ast::local_crate); @@ -3039,7 +3039,7 @@ fn lookup_discriminant(lcx: @local_ctxt, vid: ast::def_id) -> ValueRef { llvm::LLVMSetLinkage(gvar, lib::llvm::LLVMExternalLinkage as llvm::Linkage); llvm::LLVMSetGlobalConstant(gvar, True); - lcx.ccx.discrims.insert(vid.node, gvar); + lcx.ccx.discrims.insert(vid, gvar); ret gvar; } some(llval) { ret llval; } @@ -6086,7 +6086,8 @@ fn trans_constant(ccx: @crate_ctxt, it: @ast::item, &&pt: [str], }); llvm::LLVMSetInitializer(discrim_gvar, C_int(i as int)); llvm::LLVMSetGlobalConstant(discrim_gvar, True); - ccx.discrims.insert(variant.node.id, discrim_gvar); + ccx.discrims.insert( + ast_util::local_def(variant.node.id), discrim_gvar); ccx.discrim_symbols.insert(variant.node.id, s); i += 1u; } @@ -6288,7 +6289,7 @@ fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt, mutable main_fn: none::, link_meta: link_meta, tag_sizes: tag_sizes, - discrims: new_int_hash::(), + discrims: ast_util::new_def_id_hash::(), discrim_symbols: new_int_hash::(), consts: new_int_hash::(), obj_methods: new_int_hash::<()>(), diff --git a/src/comp/middle/trans_common.rs b/src/comp/middle/trans_common.rs index 2218b5a8ee8..3b0043e1660 100644 --- a/src/comp/middle/trans_common.rs +++ b/src/comp/middle/trans_common.rs @@ -102,7 +102,7 @@ type crate_ctxt = mutable main_fn: option::t, link_meta: link::link_meta, tag_sizes: hashmap, - discrims: hashmap, + discrims: hashmap, discrim_symbols: hashmap, consts: hashmap, obj_methods: hashmap, diff --git a/src/comp/syntax/ast_util.rs b/src/comp/syntax/ast_util.rs index db9cdc2f1a1..ca3b6c94698 100644 --- a/src/comp/syntax/ast_util.rs +++ b/src/comp/syntax/ast_util.rs @@ -184,6 +184,18 @@ fn eq_ty(&&a: @ty, &&b: @ty) -> bool { ret std::box::ptr_eq(a, b); } fn hash_ty(&&t: @ty) -> uint { ret t.span.lo << 16u + t.span.hi; } +fn hash_def_id(&&id: def_id) -> uint { + id.crate as uint << 16u + (id.node as uint) +} + +fn eq_def_id(&&a: def_id, &&b: def_id) -> bool { + a == b +} + +fn new_def_id_hash<@T>() -> std::map::hashmap { + std::map::mk_hashmap(hash_def_id, eq_def_id) +} + fn block_from_expr(e: @expr) -> blk { let blk_ = default_block([], option::some::<@expr>(e), e.id); ret {node: blk_, span: e.span};