public void Emit(ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(owner, gen); foreach (var exp in args) { exp.Emit(gen); } if (VirtualCall) { gen.Emit(OpCodes.Callvirt, method); } else { gen.Emit(OpCodes.Call, method); } }
public override void Emit(IMemberEmitter member, ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(owner, gen); foreach (Expression exp in args) { exp.Emit(member, gen); } if (virtualCall) { gen.Emit(OpCodes.Callvirt, method); } else { gen.Emit(OpCodes.Call, method); } }
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(); }
public override void Emit(IEasyMember member, System.Reflection.Emit.ILGenerator gen) { if (_reference != null) { ArgumentsUtil.EmitLoadOwnerAndReference(_reference, gen); } else if (_expression != null) { _expression.Emit(member, gen); } else { if (member.ReturnType != typeof(void)) { OpCodeUtil.EmitLoadOpCodeForDefaultValueOfType(gen, member.ReturnType); } } gen.Emit(OpCodes.Ret); }
public void Emit(IMemberEmitter member, ILGenerator gen) { if (reference != null) { ArgumentsUtil.EmitLoadOwnerAndReference(reference, gen); } else if (expression != null) { expression.Emit(member, gen); } else { if (member.ReturnType != typeof(void)) { OpCodeUtil.EmitLoadOpCodeForDefaultValueOfType(gen, member.ReturnType); } } gen.Emit(OpCodes.Ret); }
public void Emit(ILGenerator gen) { if (reference != null) { ArgumentsUtil.EmitLoadOwnerAndReference(reference, gen); } else if (expression != null) { expression.Emit(gen); } var notNull = gen.DefineLabel(); gen.Emit(OpCodes.Brtrue_S, notNull); ifNull.Emit(gen); gen.MarkLabel(notNull); if (ifNotNull != null) // yeah, I know that reads funny :) { ifNotNull.Emit(gen); } }
public override void Emit(IMemberEmitter member, ILGenerator gen) { var local = gen.DeclareLocal(typeof(object[])); gen.Emit(OpCodes.Ldc_I4, args.Length); gen.Emit(OpCodes.Newarr, typeof(object)); gen.Emit(OpCodes.Stloc, local); for (var i = 0; i < args.Length; i++) { gen.Emit(OpCodes.Ldloc, local); gen.Emit(OpCodes.Ldc_I4, i); var reference = args[i]; ArgumentsUtil.EmitLoadOwnerAndReference(reference, gen); if (reference.Type.GetTypeInfo().IsByRef) { throw new NotSupportedException(); } if (reference.Type.GetTypeInfo().IsPointer) { gen.Emit(OpCodes.Call, ArgumentsUtil.IntPtrFromPointer()); gen.Emit(OpCodes.Box, typeof(IntPtr)); } if (reference.Type.GetTypeInfo().IsValueType) { gen.Emit(OpCodes.Box, reference.Type); } else if (reference.Type.GetTypeInfo().IsGenericParameter) { gen.Emit(OpCodes.Box, reference.Type); } gen.Emit(OpCodes.Stelem_Ref); } gen.Emit(OpCodes.Ldloc, local); }
public override void Emit(IMemberEmitter member, ILGenerator gen) { LocalBuilder local = gen.DeclareLocal(typeof(object[])); gen.Emit(OpCodes.Ldc_I4, args.Length); gen.Emit(OpCodes.Newarr, typeof(object)); gen.Emit(OpCodes.Stloc, local); for (int i = 0; i < args.Length; i++) { gen.Emit(OpCodes.Ldloc, local); gen.Emit(OpCodes.Ldc_I4, i); TypeReference reference = args[i]; ArgumentsUtil.EmitLoadOwnerAndReference(reference, gen); if (reference.Type.IsByRef) { throw new NotSupportedException(); } if (reference.Type.IsValueType) { gen.Emit(OpCodes.Box, reference.Type.UnderlyingSystemType); } if (reference.Type.IsGenericParameter) { gen.Emit(OpCodes.Box, reference.Type); } gen.Emit(OpCodes.Stelem_Ref); } gen.Emit(OpCodes.Ldloc, local); }
public void Emit(ILGenerator gen) { var local = gen.DeclareLocal(typeof(object[])); gen.Emit(OpCodes.Ldc_I4, args.Length); gen.Emit(OpCodes.Newarr, typeof(object)); gen.Emit(OpCodes.Stloc, local); for (var i = 0; i < args.Length; i++) { gen.Emit(OpCodes.Ldloc, local); gen.Emit(OpCodes.Ldc_I4, i); var reference = args[i]; ArgumentsUtil.EmitLoadOwnerAndReference(reference, gen); if (reference.Type.IsByRef) { throw new NotSupportedException(); } if (reference.Type.IsValueType) { gen.Emit(OpCodes.Box, reference.Type); } else if (reference.Type.IsGenericParameter) { gen.Emit(OpCodes.Box, reference.Type); } gen.Emit(OpCodes.Stelem_Ref); } gen.Emit(OpCodes.Ldloc, local); }
public override void Emit(IMemberEmitter member, ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(target.OwnerReference, gen); expression.Emit(member, gen); target.StoreReference(gen); }
public override void Emit(IMemberEmitter member, ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(arrayReference, gen); ArgumentsUtil.EmitLoadOwnerAndReference(index, gen); gen.Emit(OpCodes.Ldelem, returnType); }
public void Emit(ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(target.OwnerReference, gen); expression.Emit(gen); target.StoreReference(gen); }
public override void Emit(IMemberEmitter member, ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(reference.OwnerReference, gen); reference.LoadAddressOfReference(gen); }
public override void Emit(IEasyMember member, ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(_arrayReference, gen); ArgumentsUtil.EmitLoadOwnerAndReference(_index, gen); gen.Emit(OpCodes.Ldelem_Ref); }
public void Emit(IMemberEmitter member, ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(argument, gen); expression.Emit(member, gen); }
public void Emit(ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(arrayReference, gen); index.Emit(gen); gen.Emit(OpCodes.Ldelem_Ref); }
public void Emit(ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(this, gen); }
public override void Emit(IEasyMember member, ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(this._reference, gen); }
public void Emit(ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(argument, gen); expression.Emit(gen); }
public void Emit(IMemberEmitter member, ILGenerator gen) { ArgumentsUtil.EmitLoadOwnerAndReference(arrayReference, gen); ArgumentsUtil.EmitLoadOwnerAndReference(index, gen); gen.Emit(OpCodes.Ldelem_Ref); }