public override void GenCode(ICodeGenerator cg) { LValue.GenCode(cg); var expType = LValue.ReturnType.PrimitiveType.ILType; //Obtengo el tipo del LValue var fieldInfo = expType.GetField(FieldName); //Obtengo el tipo del campo cg.GetGenerator.Emit(OpCodes.Ldfld, fieldInfo); }
public override void GenCode(ICodeGenerator cg) { var gen = cg.GetGenerator; ArrayType arrayType = (LValue.ReturnType.PrimitiveType as ArrayType); LValue.GenCode(cg); IndexInstruction.GenCode(cg); gen.Emit(OpCodes.Ldelem, arrayType.BaseType.ILType); }
public void AssignValue(ICodeGenerator cg) { var gen = cg.GetGenerator; ArrayType arrayType = (LValue.ReturnType.PrimitiveType as ArrayType); LocalBuilder aux = gen.DeclareLocal(arrayType.BaseType.ILType); gen.Emit(OpCodes.Stloc, aux); LValue.GenCode(cg); IndexInstruction.GenCode(cg); gen.Emit(OpCodes.Ldloc, aux); gen.Emit(OpCodes.Stelem, arrayType.BaseType.ILType); }
public void AssignValue(ICodeGenerator cg) { var gen = cg.GetGenerator; var value = gen.DeclareLocal(ReturnType.PrimitiveType.ILType); gen.Emit(OpCodes.Stloc, value); //Ponemos losvalores necesarios en la pila LValue.GenCode(cg); gen.Emit(OpCodes.Ldloc, value); var expType = LValue.ReturnType.PrimitiveType.ILType; //Obtengo el tipo del LValue var fieldInfo = expType.GetField(FieldName); //Obtengo el tipo del campo gen.Emit(OpCodes.Stfld, fieldInfo); //pongo el valor de la pila en el campo del record }