public InterOp CompileAssignExpression(SyntaxTreeNode node) { CodeSymbol symbol = ToIntermediateExpression(node[0]) as CodeSymbol; InterCopy copy; CodeValue source; if (node[2].ValueString == "None") { source = ToIntermediateExpression(node[1]); } else { var i = new InterBinOp(Operator.FromName(node[2].ValueString), symbol, ToIntermediateExpression(node[1])); source = new InterOpValue(i, builder.CurrentMethod); } if (symbol == null) { copy = new InterCopy(new LateReferenceResolver(node[0], builder.CurrentType.NamespaceContext), source); } else { copy = new InterCopy(symbol, source); } copy.SetOwner(builder.CurrentMethod); return(copy); }
public InterOp CompilePostIncrementOrDecrementExpression(SyntaxTreeNode node) { var op1 = ToIntermediateExpression(node[0]); var op2 = new CodeValue(CodeType.Int32, 1); var op = new InterBinOp(Operator.FromName(node[1].ValueString), op1, op2); var copy = new InterCopy((CodeSymbol)ToIntermediateExpression(node[0]), new InterOpValue(op, builder.CurrentMethod)); copy.SetOwner(builder.CurrentMethod); return(copy); }