diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index d5dba02ed28f2..af5b3f8b0cdd3 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -212,9 +212,7 @@ pub fn phase_2_configure_and_expand(sess: &Session, let time_passes = sess.time_passes(); sess.building_library.set(session::building_library(&sess.opts, &krate)); - sess.crate_types.set(session::collect_crate_types(sess, - krate.attrs - .as_slice())); + *sess.crate_types.borrow_mut() = session::collect_crate_types(sess, krate.attrs.as_slice()); time(time_passes, "gated feature checking", (), |_| front::feature_gate::check_crate(sess, &krate)); diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index e39a4a9cc51f2..82e2e3147c93d 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -90,7 +90,7 @@ impl<'a> fold::Folder for TestHarnessGenerator<'a> { fn fold_item(&mut self, i: @ast::Item) -> SmallVector<@ast::Item> { self.cx.path.borrow_mut().push(i.ident); debug!("current path: {}", - ast_util::path_name_i(self.cx.path.get().as_slice())); + ast_util::path_name_i(self.cx.path.borrow().as_slice())); if is_test_fn(&self.cx, i) || is_bench_fn(&self.cx, i) { match i.node { @@ -104,7 +104,7 @@ impl<'a> fold::Folder for TestHarnessGenerator<'a> { debug!("this is a test function"); let test = Test { span: i.span, - path: self.cx.path.get(), + path: self.cx.path.borrow().clone(), bench: is_bench_fn(&self.cx, i), ignore: is_ignored(&self.cx, i), should_fail: should_fail(i) diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index ec6bb7de380f8..e453acac8109e 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1345,7 +1345,7 @@ fn encode_info_for_items(ecx: &EncodeContext, } ebml_w.end_tag(); - return /*bad*/(*index).get(); + return /*bad*/index.borrow().clone(); } @@ -1365,7 +1365,7 @@ fn create_index( let mut buckets_frozen = Vec::new(); for bucket in buckets.iter() { - buckets_frozen.push(@/*bad*/(**bucket).get()); + buckets_frozen.push(@/*bad*/bucket.borrow().clone()); } return buckets_frozen; } diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs index 1d23218583fc4..d0bf70ea1c2c1 100644 --- a/src/librustc/middle/dead.rs +++ b/src/librustc/middle/dead.rs @@ -270,7 +270,7 @@ fn create_and_seed_worklist(tcx: &ty::ctxt, } // Seed entry point - match tcx.sess.entry_fn.get() { + match *tcx.sess.entry_fn.borrow() { Some((id, _)) => worklist.push(id), None => () } diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs index 7adfd6e0af03b..441a3a3672983 100644 --- a/src/librustc/middle/entry.rs +++ b/src/librustc/middle/entry.rs @@ -123,13 +123,13 @@ fn find_item(item: &Item, ctxt: &mut EntryContext) { fn configure_main(this: &mut EntryContext) { if this.start_fn.is_some() { - this.session.entry_fn.set(this.start_fn); + *this.session.entry_fn.borrow_mut() = this.start_fn; this.session.entry_type.set(Some(session::EntryStart)); } else if this.attr_main_fn.is_some() { - this.session.entry_fn.set(this.attr_main_fn); + *this.session.entry_fn.borrow_mut() = this.attr_main_fn; this.session.entry_type.set(Some(session::EntryMain)); } else if this.main_fn.is_some() { - this.session.entry_fn.set(this.main_fn); + *this.session.entry_fn.borrow_mut() = this.main_fn; this.session.entry_type.set(Some(session::EntryMain)); } else { if !this.session.building_library.get() { diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 3e1c1828b6c48..143b02f96d22f 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -385,6 +385,10 @@ struct ImportResolution { type_id: Cell, } +fn get(cell: &RefCell) -> T { + cell.borrow().clone() +} + impl ImportResolution { fn new(id: NodeId, is_public: bool) -> ImportResolution { ImportResolution { @@ -400,8 +404,8 @@ impl ImportResolution { fn target_for_namespace(&self, namespace: Namespace) -> Option { match namespace { - TypeNS => return self.type_target.get(), - ValueNS => return self.value_target.get(), + TypeNS => return self.type_target.borrow().clone(), + ValueNS => return self.value_target.borrow().clone(), } } @@ -546,22 +550,23 @@ impl NameBindings { // Merges the module with the existing type def or creates a new one. let module_ = @Module::new(parent_link, def_id, kind, external, is_public); - match self.type_def.get() { + let type_def = self.type_def.borrow().clone(); + match type_def { None => { - self.type_def.set(Some(TypeNsDef { + *self.type_def.borrow_mut() = Some(TypeNsDef { is_public: is_public, module_def: Some(module_), type_def: None, type_span: Some(sp) - })); + }); } Some(type_def) => { - self.type_def.set(Some(TypeNsDef { + *self.type_def.borrow_mut() = Some(TypeNsDef { is_public: is_public, module_def: Some(module_), type_span: Some(sp), type_def: type_def.type_def - })); + }); } } } @@ -574,16 +579,17 @@ impl NameBindings { external: bool, is_public: bool, _sp: Span) { - match self.type_def.get() { + let type_def = self.type_def.borrow().clone(); + match type_def { None => { let module = @Module::new(parent_link, def_id, kind, external, is_public); - self.type_def.set(Some(TypeNsDef { + *self.type_def.borrow_mut() = Some(TypeNsDef { is_public: is_public, module_def: Some(module), type_def: None, type_span: None, - })) + }); } Some(type_def) => { match type_def.module_def { @@ -593,12 +599,12 @@ impl NameBindings { kind, external, is_public); - self.type_def.set(Some(TypeNsDef { + *self.type_def.borrow_mut() = Some(TypeNsDef { is_public: is_public, module_def: Some(module), type_def: type_def.type_def, type_span: None, - })) + }); } Some(module_def) => module_def.kind.set(kind), } @@ -609,33 +615,34 @@ impl NameBindings { /// Records a type definition. fn define_type(&self, def: Def, sp: Span, is_public: bool) { // Merges the type with the existing type def or creates a new one. - match self.type_def.get() { + let type_def = self.type_def.borrow().clone(); + match type_def { None => { - self.type_def.set(Some(TypeNsDef { + *self.type_def.borrow_mut() = Some(TypeNsDef { module_def: None, type_def: Some(def), type_span: Some(sp), is_public: is_public, - })); + }); } Some(type_def) => { - self.type_def.set(Some(TypeNsDef { + *self.type_def.borrow_mut() = Some(TypeNsDef { type_def: Some(def), type_span: Some(sp), module_def: type_def.module_def, is_public: is_public, - })); + }); } } } /// Records a value definition. fn define_value(&self, def: Def, sp: Span, is_public: bool) { - self.value_def.set(Some(ValueNsDef { + *self.value_def.borrow_mut() = Some(ValueNsDef { def: def, value_span: Some(sp), is_public: is_public, - })); + }); } /// Returns the module node if applicable. @@ -662,17 +669,17 @@ impl NameBindings { fn defined_in_namespace(&self, namespace: Namespace) -> bool { match namespace { - TypeNS => return self.type_def.get().is_some(), - ValueNS => return self.value_def.get().is_some() + TypeNS => return self.type_def.borrow().is_some(), + ValueNS => return self.value_def.borrow().is_some() } } fn defined_in_public_namespace(&self, namespace: Namespace) -> bool { match namespace { - TypeNS => match self.type_def.get() { + TypeNS => match *self.type_def.borrow() { Some(def) => def.is_public, None => false }, - ValueNS => match self.value_def.get() { + ValueNS => match *self.value_def.borrow() { Some(def) => def.is_public, None => false } } @@ -681,7 +688,7 @@ impl NameBindings { fn def_for_namespace(&self, namespace: Namespace) -> Option { match namespace { TypeNS => { - match self.type_def.get() { + match *self.type_def.borrow() { None => None, Some(type_def) => { match type_def.type_def { @@ -702,7 +709,7 @@ impl NameBindings { } } ValueNS => { - match self.value_def.get() { + match *self.value_def.borrow() { None => None, Some(value_def) => Some(value_def.def) } @@ -714,13 +721,13 @@ impl NameBindings { if self.defined_in_namespace(namespace) { match namespace { TypeNS => { - match self.type_def.get() { + match *self.type_def.borrow() { None => None, Some(type_def) => type_def.type_span } } ValueNS => { - match self.value_def.get() { + match *self.value_def.borrow() { None => None, Some(value_def) => value_def.value_span } @@ -1620,7 +1627,8 @@ impl<'a> Resolver<'a> { match def { DefMod(def_id) | DefForeignMod(def_id) | DefStruct(def_id) | DefTy(def_id) => { - match child_name_bindings.type_def.get() { + let type_def = child_name_bindings.type_def.borrow().clone(); + match type_def { Some(TypeNsDef { module_def: Some(module_def), .. }) => { debug!("(building reduced graph for external crate) \ already created module"); @@ -1812,7 +1820,8 @@ impl<'a> Resolver<'a> { // Process the static methods. First, // create the module. let type_module; - match child_name_bindings.type_def.get() { + let type_def = child_name_bindings.type_def.borrow().clone(); + match type_def { Some(TypeNsDef { module_def: Some(module_def), .. @@ -2408,8 +2417,8 @@ impl<'a> Resolver<'a> { match value_result { BoundResult(target_module, name_bindings) => { debug!("(resolving single import) found value target"); - import_resolution.value_target.set( - Some(Target::new(target_module, name_bindings))); + *import_resolution.value_target.borrow_mut() = + Some(Target::new(target_module, name_bindings)); import_resolution.value_id.set(directive.id); value_used_public = name_bindings.defined_in_public_namespace(ValueNS); } @@ -2421,9 +2430,9 @@ impl<'a> Resolver<'a> { match type_result { BoundResult(target_module, name_bindings) => { debug!("(resolving single import) found type target: {:?}", - {name_bindings.type_def.get().unwrap().type_def}); - import_resolution.type_target.set( - Some(Target::new(target_module, name_bindings))); + { name_bindings.type_def.borrow().clone().unwrap().type_def }); + *import_resolution.type_target.borrow_mut() = + Some(Target::new(target_module, name_bindings)); import_resolution.type_id.set(directive.id); type_used_public = name_bindings.defined_in_public_namespace(TypeNS); } @@ -2433,8 +2442,8 @@ impl<'a> Resolver<'a> { } } - if import_resolution.value_target.get().is_none() && - import_resolution.type_target.get().is_none() { + if import_resolution.value_target.borrow().is_none() && + import_resolution.type_target.borrow().is_none() { let msg = format!("unresolved import: there is no \ `{}` in `{}`", token::get_ident(source), @@ -2452,7 +2461,7 @@ impl<'a> Resolver<'a> { // record what this import resolves to for later uses in documentation, // this may resolve to either a value or a type, but for documentation // purposes it's good enough to just favor one over the other. - let value_private = match import_resolution.value_target.get() { + let value_private = match *import_resolution.value_target.borrow() { Some(target) => { let def = target.bindings.def_for_namespace(ValueNS).unwrap(); self.def_map.borrow_mut().insert(directive.id, def); @@ -2463,7 +2472,7 @@ impl<'a> Resolver<'a> { // _exists is false. None => None, }; - let type_private = match import_resolution.type_target.get() { + let type_private = match *import_resolution.type_target.borrow() { Some(target) => { let def = target.bindings.def_for_namespace(TypeNS).unwrap(); self.def_map.borrow_mut().insert(directive.id, def); @@ -2513,7 +2522,7 @@ impl<'a> Resolver<'a> { for (ident, target_import_resolution) in import_resolutions.iter() { debug!("(resolving glob import) writing module resolution \ {:?} into `{}`", - target_import_resolution.type_target.get().is_none(), + target_import_resolution.type_target.borrow().is_none(), self.module_to_str(module_)); if !target_import_resolution.is_public.get() { @@ -2528,10 +2537,10 @@ impl<'a> Resolver<'a> { // Simple: just copy the old import resolution. let new_import_resolution = @ImportResolution::new(id, is_public); - new_import_resolution.value_target.set( - target_import_resolution.value_target.get()); - new_import_resolution.type_target.set( - target_import_resolution.type_target.get()); + *new_import_resolution.value_target.borrow_mut() = + get(&target_import_resolution.value_target); + *new_import_resolution.type_target.borrow_mut() = + get(&target_import_resolution.type_target); import_resolutions.insert (*ident, new_import_resolution); @@ -2540,22 +2549,20 @@ impl<'a> Resolver<'a> { // Merge the two import resolutions at a finer-grained // level. - match target_import_resolution.value_target.get() { + match *target_import_resolution.value_target.borrow() { None => { // Continue. } Some(value_target) => { - dest_import_resolution.value_target.set( - Some(value_target)); + *dest_import_resolution.value_target.borrow_mut() = Some(value_target); } } - match target_import_resolution.type_target.get() { + match *target_import_resolution.type_target.borrow() { None => { // Continue. } Some(type_target) => { - dest_import_resolution.type_target.set( - Some(type_target)); + *dest_import_resolution.type_target.borrow_mut() = Some(type_target); } } dest_import_resolution.is_public.set(is_public); @@ -2627,14 +2634,14 @@ impl<'a> Resolver<'a> { // Merge the child item into the import resolution. if name_bindings.defined_in_public_namespace(ValueNS) { debug!("(resolving glob import) ... for value target"); - dest_import_resolution.value_target.set( - Some(Target::new(containing_module, name_bindings))); + *dest_import_resolution.value_target.borrow_mut() = + Some(Target::new(containing_module, name_bindings)); dest_import_resolution.value_id.set(id); } if name_bindings.defined_in_public_namespace(TypeNS) { debug!("(resolving glob import) ... for type target"); - dest_import_resolution.type_target.set( - Some(Target::new(containing_module, name_bindings))); + *dest_import_resolution.type_target.borrow_mut() = + Some(Target::new(containing_module, name_bindings)); dest_import_resolution.type_id.set(id); } dest_import_resolution.is_public.set(is_public); @@ -2692,7 +2699,7 @@ impl<'a> Resolver<'a> { Success((target, used_proxy)) => { // Check to see whether there are type bindings, and, if // so, whether there is a module within. - match target.bindings.type_def.get() { + match *target.bindings.type_def.borrow() { Some(type_def) => { match type_def.module_def { None => { @@ -3004,7 +3011,7 @@ impl<'a> Resolver<'a> { match resolve_result { Success((target, _)) => { let bindings = &*target.bindings; - match bindings.type_def.get() { + match *bindings.type_def.borrow() { Some(type_def) => { match type_def.module_def { None => { @@ -4526,8 +4533,8 @@ impl<'a> Resolver<'a> { debug!("(resolve bare identifier pattern) succeeded in \ finding {} at {:?}", token::get_ident(name), - target.bindings.value_def.get()); - match target.bindings.value_def.get() { + target.bindings.value_def.borrow()); + match *target.bindings.value_def.borrow() { None => { fail!("resolved name in the value namespace to a \ set of name bindings with no def?!"); diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 09bbb95fdd04e..9657265e14038 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -1128,7 +1128,7 @@ pub fn make_return_pointer(fcx: &FunctionContext, output_type: ty::t) llvm::LLVMGetParam(fcx.llfn, 0) } else { let lloutputtype = type_of::type_of(fcx.ccx, output_type); - let bcx = fcx.entry_bcx.get().unwrap(); + let bcx = fcx.entry_bcx.borrow().clone().unwrap(); Alloca(bcx, lloutputtype, "__make_return_pointer") } } @@ -1209,7 +1209,7 @@ pub fn init_function<'a>( param_substs: Option<@param_substs>) { let entry_bcx = fcx.new_temp_block("entry-block"); - fcx.entry_bcx.set(Some(entry_bcx)); + *fcx.entry_bcx.borrow_mut() = Some(entry_bcx); // Use a dummy instruction as the insertion point for all allocas. // This is later removed in FunctionContext::cleanup. @@ -1399,7 +1399,7 @@ pub fn trans_closure(ccx: &CrateContext, // Create the first basic block in the function and keep a handle on it to // pass to finish_fn later. - let bcx_top = fcx.entry_bcx.get().unwrap(); + let bcx_top = fcx.entry_bcx.borrow().clone().unwrap(); let mut bcx = bcx_top; let block_ty = node_id_type(bcx, body.id); @@ -1547,7 +1547,7 @@ fn trans_enum_variant_or_tuple_like_struct(ccx: &CrateContext, let arg_datums = create_datums_for_fn_args(&fcx, arg_tys.as_slice()); - let bcx = fcx.entry_bcx.get().unwrap(); + let bcx = fcx.entry_bcx.borrow().clone().unwrap(); if !type_is_zero_size(fcx.ccx, result_ty) { let repr = adt::represent_type(ccx, result_ty); @@ -1752,7 +1752,7 @@ pub fn register_fn_llvmty(ccx: &CrateContext, } pub fn is_entry_fn(sess: &Session, node_id: ast::NodeId) -> bool { - match sess.entry_fn.get() { + match *sess.entry_fn.borrow() { Some((entry_id, _)) => node_id == entry_id, None => false } diff --git a/src/librustc/middle/trans/closure.rs b/src/librustc/middle/trans/closure.rs index 1d2e1d0232c34..4671e21170e86 100644 --- a/src/librustc/middle/trans/closure.rs +++ b/src/librustc/middle/trans/closure.rs @@ -464,7 +464,7 @@ pub fn get_wrapper_for_bare_fn(ccx: &CrateContext, let arena = TypedArena::new(); let fcx = new_fn_ctxt(ccx, llfn, -1, true, f.sig.output, None, None, &arena); init_function(&fcx, true, f.sig.output, None); - let bcx = fcx.entry_bcx.get().unwrap(); + let bcx = fcx.entry_bcx.borrow().clone().unwrap(); let args = create_datums_for_fn_args(&fcx, ty::ty_fn_args(closure_ty) diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index 97638f7e4690a..369807e98d7e0 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -322,7 +322,7 @@ impl<'a> FunctionContext<'a> { .unwrap()); } // Remove the cycle between fcx and bcx, so memory can be freed - self.entry_bcx.set(None); + *self.entry_bcx.borrow_mut() = None; } pub fn get_llreturn(&self) -> BasicBlockRef { diff --git a/src/librustc/middle/trans/glue.rs b/src/librustc/middle/trans/glue.rs index da9d06b9a7526..87234ce368353 100644 --- a/src/librustc/middle/trans/glue.rs +++ b/src/librustc/middle/trans/glue.rs @@ -463,7 +463,7 @@ fn make_generic_glue(ccx: &CrateContext, // llfn is expected be declared to take a parameter of the appropriate // type, so we don't need to explicitly cast the function parameter. - let bcx = fcx.entry_bcx.get().unwrap(); + let bcx = fcx.entry_bcx.borrow().clone().unwrap(); let llrawptr0 = unsafe { llvm::LLVMGetParam(llfn, fcx.arg_pos(0) as c_uint) }; let bcx = helper(bcx, llrawptr0, t); finish_fn(&fcx, bcx); diff --git a/src/librustc/middle/trans/intrinsic.rs b/src/librustc/middle/trans/intrinsic.rs index 95c0b08d400ea..28a39718e7fb6 100644 --- a/src/librustc/middle/trans/intrinsic.rs +++ b/src/librustc/middle/trans/intrinsic.rs @@ -199,7 +199,7 @@ pub fn trans_intrinsic(ccx: &CrateContext, set_always_inline(fcx.llfn); - let mut bcx = fcx.entry_bcx.get().unwrap(); + let mut bcx = fcx.entry_bcx.borrow().clone().unwrap(); let first_real_arg = fcx.arg_pos(0u); let name = token::get_ident(item.ident); diff --git a/src/librustc/middle/trans/reflect.rs b/src/librustc/middle/trans/reflect.rs index e73ef639a0ba8..1adf5cf8afe5d 100644 --- a/src/librustc/middle/trans/reflect.rs +++ b/src/librustc/middle/trans/reflect.rs @@ -300,7 +300,7 @@ impl<'a> Reflector<'a> { // llvm::LLVMGetParam(llfdecl, fcx.arg_pos(0u) as c_uint) }; - let bcx = fcx.entry_bcx.get().unwrap(); + let bcx = fcx.entry_bcx.borrow().clone().unwrap(); let arg = BitCast(bcx, arg, llptrty); let ret = adt::trans_get_discr(bcx, repr, arg, Some(Type::i64(ccx))); Store(bcx, ret, fcx.llretptr.get().unwrap()); diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 20ab2b699c2b6..8f9b67f81e884 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -2209,8 +2209,8 @@ fn check_expr_with_unifier(fcx: &FnCtxt, fcx.write_ty(expr.id, fty); let (inherited_purity, id) = - ty::determine_inherited_purity((fcx.ps.get().purity, - fcx.ps.get().def), + ty::determine_inherited_purity((fcx.ps.borrow().purity, + fcx.ps.borrow().def), (purity, expr.id), sigil); @@ -3333,7 +3333,7 @@ pub fn check_block_with_expected(fcx: &FnCtxt, }; }); - fcx.ps.set(prev); + *fcx.ps.borrow_mut() = prev; } pub fn check_const(ccx: &CrateCtxt, diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index e67a83cd9269d..c8613fd70652e 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -398,7 +398,7 @@ fn visit_expr(rcx: &mut Rcx, expr: &ast::Expr) { expr.repr(rcx.fcx.tcx()), rcx.repeating_scope); let method_call = MethodCall::expr(expr.id); - let has_method_map = rcx.fcx.inh.method_map.get().contains_key(&method_call); + let has_method_map = rcx.fcx.inh.method_map.borrow().contains_key(&method_call); // Check any autoderefs or autorefs that appear. for &adjustment in rcx.fcx.inh.adjustments.borrow().find(&expr.id).iter() { @@ -498,7 +498,7 @@ fn visit_expr(rcx: &mut Rcx, expr: &ast::Expr) { ast::ExprUnary(ast::UnDeref, base) => { // For *a, the lifetime of a must enclose the deref let method_call = MethodCall::expr(expr.id); - let base_ty = match rcx.fcx.inh.method_map.get().find(&method_call) { + let base_ty = match rcx.fcx.inh.method_map.borrow().find(&method_call) { Some(method) => { constrain_call(rcx, None, expr, Some(base), [], true); ty::ty_fn_ret(method.ty) @@ -852,7 +852,7 @@ fn constrain_autoderefs(rcx: &mut Rcx, i, derefs); let method_call = MethodCall::autoderef(deref_expr.id, i as u32); - derefd_ty = match rcx.fcx.inh.method_map.get().find(&method_call) { + derefd_ty = match rcx.fcx.inh.method_map.borrow().find(&method_call) { Some(method) => { // Treat overloaded autoderefs as if an AutoRef adjustment // was applied on the base type, as that is always the case. diff --git a/src/librustc/middle/typeck/infer/error_reporting.rs b/src/librustc/middle/typeck/infer/error_reporting.rs index 83ca7ea7dfbd4..9c947fb3360e4 100644 --- a/src/librustc/middle/typeck/infer/error_reporting.rs +++ b/src/librustc/middle/typeck/infer/error_reporting.rs @@ -1286,6 +1286,6 @@ impl LifeGiver { } fn get_generated_lifetimes(&self) -> Vec { - self.generated.get() + self.generated.borrow().clone() } } diff --git a/src/librustc/middle/typeck/mod.rs b/src/librustc/middle/typeck/mod.rs index d635a9bdec41e..446d2ff055cca 100644 --- a/src/librustc/middle/typeck/mod.rs +++ b/src/librustc/middle/typeck/mod.rs @@ -431,7 +431,7 @@ fn check_start_fn_ty(ccx: &CrateCtxt, fn check_for_entry_fn(ccx: &CrateCtxt) { let tcx = ccx.tcx; if !tcx.sess.building_library.get() { - match tcx.sess.entry_fn.get() { + match *tcx.sess.entry_fn.borrow() { Some((id, sp)) => match tcx.sess.entry_type.get() { Some(session::EntryMain) => check_main_fn_ty(ccx, id, sp), Some(session::EntryStart) => check_start_fn_ty(ccx, id, sp), diff --git a/src/libstd/cell.rs b/src/libstd/cell.rs index eb114e895103a..40c6c3ebccf0b 100644 --- a/src/libstd/cell.rs +++ b/src/libstd/cell.rs @@ -164,33 +164,11 @@ impl RefCell { None => fail!("RefCell already borrowed") } } - - /// Sets the value, replacing what was there. - /// - /// # Failure - /// - /// Fails if the value is currently borrowed. - #[inline] - pub fn set(&self, value: T) { - *self.borrow_mut() = value; - } -} - -impl RefCell { - /// Returns a copy of the contained value. - /// - /// # Failure - /// - /// Fails if the value is currently mutably borrowed. - #[inline] - pub fn get(&self) -> T { - (*self.borrow()).clone() - } } impl Clone for RefCell { fn clone(&self) -> RefCell { - RefCell::new(self.get()) + RefCell::new(self.borrow().clone()) } } @@ -216,7 +194,7 @@ impl<'b, T> Drop for Ref<'b, T> { impl<'b, T> Deref for Ref<'b, T> { #[inline] fn deref<'a>(&'a self) -> &'a T { - unsafe{ &*self.parent.value.get() } + unsafe { &*self.parent.value.get() } } } @@ -236,14 +214,14 @@ impl<'b, T> Drop for RefMut<'b, T> { impl<'b, T> Deref for RefMut<'b, T> { #[inline] fn deref<'a>(&'a self) -> &'a T { - unsafe{ &*self.parent.value.get() } + unsafe { &*self.parent.value.get() } } } impl<'b, T> DerefMut for RefMut<'b, T> { #[inline] fn deref_mut<'a>(&'a mut self) -> &'a mut T { - unsafe{ &mut *self.parent.value.get() } + unsafe { &mut *self.parent.value.get() } } } diff --git a/src/libstd/option.rs b/src/libstd/option.rs index be1c87ba7886c..ca1ea0169e66a 100644 --- a/src/libstd/option.rs +++ b/src/libstd/option.rs @@ -651,7 +651,8 @@ mod tests { impl ::ops::Drop for R { fn drop(&mut self) { let ii = &*self.i; - ii.set(ii.get() + 1); + let i = ii.borrow().clone(); + *ii.borrow_mut() = i + 1; } } @@ -667,7 +668,7 @@ mod tests { let opt = Some(x); let _y = opt.unwrap(); } - assert_eq!(i.get(), 1); + assert_eq!(*i.borrow(), 1); } #[test] diff --git a/src/test/auxiliary/issue-2631-a.rs b/src/test/auxiliary/issue-2631-a.rs index e7e0bf1bd60fa..e61510f2ef2d8 100644 --- a/src/test/auxiliary/issue-2631-a.rs +++ b/src/test/auxiliary/issue-2631-a.rs @@ -21,5 +21,5 @@ pub type header_map = HashMap<~str, @RefCell>>; // the unused ty param is necessary so this gets monomorphized pub fn request(req: &header_map) { - let _x = (**((**req.get(&~"METHOD")).clone()).get().get(0)).clone(); + let _x = (**((**req.get(&~"METHOD")).clone()).borrow().clone().get(0)).clone(); } diff --git a/src/test/run-pass/cycle-collection.rs b/src/test/run-pass/cycle-collection.rs index ca1e18eb87b97..c6f353136bada 100644 --- a/src/test/run-pass/cycle-collection.rs +++ b/src/test/run-pass/cycle-collection.rs @@ -19,7 +19,7 @@ enum taggy { fn f() { let a_box = @RefCell::new(nil); - a_box.set(cons(a_box)); + *a_box.borrow_mut() = cons(a_box); } pub fn main() { diff --git a/src/test/run-pass/issue-980.rs b/src/test/run-pass/issue-980.rs index f6dc4adcf9b5a..06f95bae5593b 100644 --- a/src/test/run-pass/issue-980.rs +++ b/src/test/run-pass/issue-980.rs @@ -23,7 +23,7 @@ struct Pointy { pub fn main() { let m = @RefCell::new(Pointy { x : no_pointy }); - m.set(Pointy { + *m.borrow_mut() = Pointy { x: yes_pointy(m) - }); + }; } diff --git a/src/test/run-pass/out-of-stack.rs b/src/test/run-pass/out-of-stack.rs index d1daa1e365eca..71fde86670322 100644 --- a/src/test/run-pass/out-of-stack.rs +++ b/src/test/run-pass/out-of-stack.rs @@ -17,6 +17,9 @@ use std::os; use std::str; // lifted from the test module +// Inlining to avoid llvm turning the recursive functions into tail calls, +// which doesn't consume stack. +#[inline(always)] pub fn black_box(dummy: T) { unsafe { asm!("" : : "r"(&dummy)) } } fn silent_recurse() {