private void CheckOperandsAreOfSameType(BinaryTreeElementBase node) { if (DetermineType((dynamic)node.Left) != DetermineType((dynamic)node.Right)) { Exceptions.Add(new TypeCheckerError(String.Format("Incompatible operands on operation: {0} and {1}", DetermineType((dynamic)node.Left), DetermineType((dynamic)node.Right)), node)); } }
private void CheckOperandsRestrictedToTypes(BinaryTreeElementBase node, params Type[] restrictedTypes) { if (!restrictedTypes.Contains((Type)DetermineType((dynamic)node.Left))) { Exceptions.Add(new TypeCheckerError("Type not permitted on the left side of the operator", node)); } if (!restrictedTypes.Contains((Type)DetermineType((dynamic)node.Right))) { Exceptions.Add(new TypeCheckerError("Type not permitted on the right side of the operator", node)); } }
private void VisitBinary(BinaryTreeElementBase node) { node.Left.Accept(this); node.Right.Accept(this); }