diff --git a/src/libcore/arc.rs b/src/libcore/arc.rs index 312606be906a..eb11c8f1c540 100644 --- a/src/libcore/arc.rs +++ b/src/libcore/arc.rs @@ -102,11 +102,14 @@ impl methods for exclusive { fn with(f: fn(sys::condition, x: &T) -> U) -> U { unsafe { let ptr: ~arc_data> = unsafe::reinterpret_cast(*self); - let rec: &ex_data = &(*ptr).data; + let r = { + let rec: &ex_data = &(*ptr).data; + rec.lock.lock_cond() {|c| + f(c, &rec.data) + } + }; unsafe::forget(ptr); - rec.lock.lock_cond() {|c| - f(c, &rec.data) - } + r } } } diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index aa457cb4c634..09bb2cc54093 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -454,7 +454,7 @@ fn id_visitor(vfn: fn@(node_id)) -> visit::vt<()> { visit_expr: fn@(e: @expr) { vfn(e.id); - alt e.node { + alt e.node { expr_index(*) | expr_assign_op(*) | expr_unary(*) | expr_binary(*) { vfn(ast_util::op_expr_callee_id(e));