@@ -137,7 +137,7 @@ pub fn log_fn_time(ccx: @crate_ctxt, +name: ~str, start: time::Timespec,
137
137
ccx. stats . fn_times . push ( { ident: name, time: elapsed} ) ;
138
138
}
139
139
140
- pub fn decl_fn ( llmod : ModuleRef , name : ~ str , cc : lib:: llvm:: CallConv ,
140
+ pub fn decl_fn ( llmod : ModuleRef , name : & str , cc : lib:: llvm:: CallConv ,
141
141
llty : TypeRef ) -> ValueRef {
142
142
let llfn: ValueRef = str:: as_c_str ( name, |buf| {
143
143
unsafe {
@@ -150,7 +150,7 @@ pub fn decl_fn(llmod: ModuleRef, name: ~str, cc: lib::llvm::CallConv,
150
150
return llfn;
151
151
}
152
152
153
- pub fn decl_cdecl_fn ( llmod : ModuleRef , + name : ~ str , llty : TypeRef )
153
+ pub fn decl_cdecl_fn ( llmod : ModuleRef , name : & str , llty : TypeRef )
154
154
-> ValueRef {
155
155
return decl_fn ( llmod, name, lib:: llvm:: CCallConv , llty) ;
156
156
}
@@ -164,20 +164,19 @@ pub fn decl_internal_cdecl_fn(llmod: ModuleRef, +name: ~str, llty: TypeRef) ->
164
164
return llfn;
165
165
}
166
166
167
- pub fn get_extern_fn ( externs : HashMap < ~ str , ValueRef > ,
167
+ pub fn get_extern_fn ( externs : ExternMap ,
168
168
llmod : ModuleRef ,
169
- + name : ~ str ,
169
+ name : @ str ,
170
170
cc : lib:: llvm:: CallConv ,
171
171
ty : TypeRef ) -> ValueRef {
172
172
if externs. contains_key_ref ( & name) { return externs. get ( & name) ; }
173
- // XXX: Bad copy.
174
- let f = decl_fn ( llmod, copy name, cc, ty) ;
173
+ let f = decl_fn ( llmod, name, cc, ty) ;
175
174
externs. insert ( name, f) ;
176
175
return f;
177
176
}
178
177
179
- pub fn get_extern_const ( externs : HashMap < ~ str , ValueRef > , llmod : ModuleRef ,
180
- + name : ~ str , ty : TypeRef ) -> ValueRef {
178
+ pub fn get_extern_const ( externs : ExternMap , llmod : ModuleRef ,
179
+ name : @ str , ty : TypeRef ) -> ValueRef {
181
180
unsafe {
182
181
if externs. contains_key_ref ( & name) { return externs. get ( & name) ; }
183
182
let c = str:: as_c_str ( name, |buf| {
@@ -189,9 +188,9 @@ pub fn get_extern_const(externs: HashMap<~str, ValueRef>, llmod: ModuleRef,
189
188
}
190
189
191
190
fn get_simple_extern_fn ( cx : block ,
192
- externs : HashMap < ~ str , ValueRef > ,
191
+ externs : ExternMap ,
193
192
llmod : ModuleRef ,
194
- + name : ~ str ,
193
+ name : @ str ,
195
194
n_args : int ) -> ValueRef {
196
195
let _icx = cx. insn_ctxt ( "get_simple_extern_fn" ) ;
197
196
let ccx = cx. fcx . ccx ;
@@ -201,8 +200,8 @@ pub fn get_extern_const(externs: HashMap<~str, ValueRef>, llmod: ModuleRef,
201
200
return get_extern_fn ( externs, llmod, name, lib:: llvm:: CCallConv , t) ;
202
201
}
203
202
204
- pub fn trans_foreign_call ( cx : block , externs : HashMap < ~ str , ValueRef > ,
205
- llmod : ModuleRef , + name : ~ str , args : ~[ ValueRef ] ) ->
203
+ pub fn trans_foreign_call ( cx : block , externs : ExternMap ,
204
+ llmod : ModuleRef , name : @ str , args : ~[ ValueRef ] ) ->
206
205
ValueRef {
207
206
let _icx = cx. insn_ctxt ( "trans_foreign_call" ) ;
208
207
let n = args. len ( ) as int ;
@@ -474,6 +473,7 @@ pub fn get_res_dtor(ccx: @crate_ctxt, did: ast::def_id,
474
473
let class_ty = ty:: subst_tps ( tcx, substs, None ,
475
474
ty:: lookup_item_type ( tcx, parent_id) . ty ) ;
476
475
let llty = type_of_dtor ( ccx, class_ty) ;
476
+ let name = name. to_managed ( ) ; // :-(
477
477
get_extern_fn ( ccx. externs , ccx. llmod , name, lib:: llvm:: CCallConv ,
478
478
llty)
479
479
}
@@ -775,7 +775,7 @@ pub fn null_env_ptr(bcx: block) -> ValueRef {
775
775
776
776
pub fn trans_external_path(ccx: @crate_ctxt, did: ast::def_id, t: ty::t)
777
777
-> ValueRef {
778
- let name = csearch::get_symbol(ccx.sess.cstore, did);
778
+ let name = csearch::get_symbol(ccx.sess.cstore, did).to_managed(); // Sad
779
779
match ty::get(t).sty {
780
780
ty::ty_fn(_) => {
781
781
let llty = type_of_fn_from_ty(ccx, t);
0 commit comments