using System; using System.IO; using CPU = Indy.IL2CPU.Assembler; using System.Reflection; namespace Indy.IL2CPU.IL.X86 { [OpCode(OpCodeEnum.Ldfld)] public class Ldfld: Op { private readonly TypeInformation.Field mField; private readonly TypeInformation mType; public Ldfld(TypeInformation.Field aField) : base(null, null) { mField = aField; } public Ldfld(ILReader aReader, MethodInformation aMethodInfo) : base(aReader, aMethodInfo) { FieldInfo xField = aReader.OperandValueField; if (xField == null) { throw new Exception("Field not found!"); } string xFieldId = xField.GetFullName(); mType = Engine.GetTypeInfo(xField.DeclaringType); mField = mType.Fields[xFieldId]; } public override void DoAssemble() { Ldfld(Assembler, mType, mField); } } }