public void Compile(CompilationContext context) { targetObject.Compile(context); value.Compile(context); CompilationHelper.PrepareValueOnStack(context, fieldInfo.FieldType, value.itemType); context.Emit(OpCodes.Stfld, fieldInfo); }
public static void EmitCall( CompilationContext context, IAstRefOrAddr invocationObject, MethodInfo methodInfo, List<IAstStackItem> arguments) { if (arguments == null) { arguments = new List<IAstStackItem>(); } if (invocationObject != null) { invocationObject.Compile(context); } ParameterInfo[] args = methodInfo.GetParameters(); if (args.Length != arguments.Count) { throw new Exception("Invalid method parameters count"); } for (int i = 0; i < args.Length; ++i) { arguments[i].Compile(context); PrepareValueOnStack(context, args[i].ParameterType, arguments[i].itemType); } if (methodInfo.IsVirtual) { context.EmitCall(OpCodes.Callvirt, methodInfo); } else { context.EmitCall(OpCodes.Call, methodInfo); } }
/// <summary> /// Emits the call. /// </summary> /// <param name="context">The context.</param> /// <param name="invocationObject">The invocation object.</param> /// <param name="methodInfo">The method info.</param> /// <param name="arguments">The arguments.</param> /// <exception cref="Exception"></exception> public static void EmitCall( CompilationContext context, IAstRefOrAddr invocationObject, MethodInfo methodInfo, List <IAstStackItem> arguments) { arguments ??= new List <IAstStackItem>(); if (invocationObject != null) { invocationObject.Compile(context); } var args = methodInfo.GetParameters(); if (args.Length != arguments.Count) { throw new Exception("Invalid method parameters count"); } for (var i = 0; i < args.Length; ++i) { arguments[i].Compile(context); PrepareValueOnStack(context, args[i].ParameterType, arguments[i].ItemType); } context.EmitCall(methodInfo.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, methodInfo); }
public virtual void Compile(CompilationContext context) { if (sourceObject != null) { sourceObject.Compile(context); context.Emit(OpCodes.Ldfld, fieldInfo); } else { context.Emit(OpCodes.Ldsfld, fieldInfo); } }
/// <summary> /// </summary> /// <param name="context">The context.</param> public virtual void Compile(CompilationContext context) { SourceObject.Compile(context); context.Emit(OpCodes.Ldfld, FieldInfo); }