// Initialize ref variable
//
lock_taken.EmitAssign (ec, new BoolLiteral (false, loc));
+ } else {
+ //
+ // Monitor.Enter (expr_copy)
+ //
+ expr_copy.Emit (ec);
+ ec.Emit (OpCodes.Call, TypeManager.void_monitor_enter_object);
}
}
//
// Monitor.Enter (expr_copy, ref lock_taken)
//
- expr_copy.Emit (ec);
-
if (lock_taken != null) {
+ expr_copy.Emit (ec);
lock_taken.LocalInfo.CreateBuilder (ec);
lock_taken.AddressOf (ec, AddressOp.Load);
+ ec.Emit (OpCodes.Call, TypeManager.void_monitor_enter_object);
}
- ec.Emit (OpCodes.Call, TypeManager.void_monitor_enter_object);
-
Statement.Emit (ec);
}