public RedILNode VisitAssignmentExpression(AssignmentExpression assignmentExpression, State data) { if (data.ParentNode.NodeType != NodeType.Statement) { throw new RedILException("Assigment is only possible within a statement"); } var assignNode = new AssignNode(); var left = CastUtilities.CastRedILNode <ExpressionNode>(assignmentExpression.Left.AcceptVisitor(this, data.NewState(assignmentExpression, assignNode))); var right = CastUtilities.CastRedILNode <ExpressionNode>(assignmentExpression.Right.AcceptVisitor(this, data.NewState(assignmentExpression, assignNode))); if (assignmentExpression.Operator == AssignmentOperatorType.Assign) { assignNode.Left = left; assignNode.Right = right; } else { var op = OperatorUtilities.BinaryOperator(assignmentExpression.Operator); assignNode.Left = left; assignNode.Right = VisitBinaryOperatorExpression(left, right, op, data); } return(assignNode); }
public RedILNode VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression, State data) { //TODO: send parent node var op = OperatorUtilities.BinaryOperator(binaryOperatorExpression.Operator); var left = CastUtilities.CastRedILNode <ExpressionNode>(binaryOperatorExpression.Left.AcceptVisitor(this, data.NewState(binaryOperatorExpression, null))); var right = CastUtilities.CastRedILNode <ExpressionNode>(binaryOperatorExpression.Right.AcceptVisitor(this, data.NewState(binaryOperatorExpression, null))); return(VisitBinaryOperatorExpression(left, right, op, data)); }