Castle.DynamicProxy.Builder.CodeBuilder.SimpleAST.LockBlockExpression.Emit C# (CSharp) Method

Emit() public method

public Emit ( IEasyMember member, ILGenerator gen ) : void
member IEasyMember
gen System.Reflection.Emit.ILGenerator
return void
		public override void Emit(IEasyMember member, ILGenerator gen)
		{
			ArgumentsUtil.EmitLoadOwnerAndReference(_syncLockSource, gen);

			gen.Emit(OpCodes.Call, typeof(Monitor).GetMethod("Enter"));

			Label tryBlock = gen.BeginExceptionBlock();

			foreach(Statement stmt in _stmts)
			{
				stmt.Emit(member, gen);
			}


			gen.BeginFinallyBlock();
			ArgumentsUtil.EmitLoadOwnerAndReference(_syncLockSource, gen);
			gen.Emit(OpCodes.Call, typeof(Monitor).GetMethod("Exit"));
			gen.EndExceptionBlock();

		}
	}