public override void GenerateCode(ILCodeGenerator cg) { LValue.LoadVariableInTheStack = false; LValue.GenerateCode(cg); LValue.LoadVariableInTheStack = true; //generamos Expression Expression.GenerateCode(cg); if (LValue is LValueIdNode) { LValueIdNode id = LValue as LValueIdNode; ILElementInfo ile = cg.ILContextTable.GetDefinedVarOrFunction(id.VariableName); if (!Object.Equals(ile.FieldBuilder, null)) { cg.ILGenerator.Emit(OpCodes.Stsfld, ile.FieldBuilder); } else if (!Object.Equals(ile.LocalBuilder, null)) { cg.ILGenerator.Emit(OpCodes.Stloc, ile.LocalBuilder); } } else if (LValue is ArrayIndexAccessNode) { ArrayIndexAccessNode arrayElement = LValue as ArrayIndexAccessNode; cg.ILGenerator.Emit(OpCodes.Stelem, arrayElement.NodeInfo.Type.ILType); } else { RecordDotAccessNode recordAccess = (LValue as RecordDotAccessNode); ILElementInfo ile = cg.ILContextTable.GetDefinedType(recordAccess.RecordName); FieldInfo fi = ile.TypeBuilder.GetField(recordAccess.ID); cg.ILGenerator.Emit(OpCodes.Stfld, fi); } }
public override void GenerateCode(StringBuilder sb, int tabsOffset) { LValue.GenerateCode(sb, tabsOffset); sb.AppendFormat(" {0} ", GetValue(Operator)); Value.GenerateCode(sb, 0); }