public void Visit(ExpressionNode expressionNode) { foreach (var x in expressionNode.Operands) { x.Accept(this); } if (expressionNode.IsUnary) { switch (expressionNode.OperatorName) { case Operator.PointerAddress: InnerCode.Add(new AddressOf(expressionNode.Reference, expressionNode.Operands.First().Reference)); break; case Operator.PointerValue: InnerCode.Add(new ContentOf(expressionNode.Reference, expressionNode.Operands.First().Reference)); break; } } else { var destination = expressionNode.Reference; var left = expressionNode.Operands[0].Reference; var right = expressionNode.Operands[1].Reference; IntermediateCode emitted; if (IsBoolean(expressionNode)) { emitted = new BoolExpressionAssignment(expressionNode.OperatorName.ToBooleanOperator(), destination, left, right); } else { emitted = new ArithmeticAssignment(expressionNode.OperatorName.ToArithmeticOperator(), destination, left, right); } InnerCode.Add(emitted); } }
public void Visit(BoolExpressionAssignment boolExpressionAssignment) { AddReference(boolExpressionAssignment.Target); AddReference(boolExpressionAssignment.Left); AddReference(boolExpressionAssignment.Right); }