static ISymbolValue HandleSingleMathOp(OperatorBasedExpression x, ISemantic l, ISemantic r, MathOp2 m, bool UnorderedCheck = true)
		{
			if(l == null || r == null)
				return null;
			
			var pl = l as PrimitiveValue;
			var pr = r as PrimitiveValue;

			//TODO: imaginary/complex parts

			if (pl != null && pr != null)
			{
				if (UnorderedCheck && (pl.IsNaN || pr.IsNaN))
					return PrimitiveValue.CreateNaNValue(pl.IsNaN ? pl.BaseTypeToken : pr.BaseTypeToken, pl.IsNaN ? pl.Modifier : pr.Modifier);

				return m(pl, pr, x);
			}

			return null;
			//throw new NotImplementedException("Operator overloading not implemented yet.");
		}
        ISemantic HandleSingleMathOp(OperatorBasedExpression x, ISemantic l, ISemantic r, MathOp2 m, bool UnorderedCheck = true)
        {
            if (l == null || r == null)
            {
                return(null);
            }

            var pl = l as PrimitiveValue;
            var pr = r as PrimitiveValue;

            //TODO: imaginary/complex parts

            if (pl != null && pr != null)
            {
                if (UnorderedCheck && (pl.IsNaN || pr.IsNaN))
                {
                    return(PrimitiveValue.CreateNaNValue(x, pl.IsNaN ? pl.BaseTypeToken : pr.BaseTypeToken));
                }

                return(m(pl, pr, x));
            }

            throw new NotImplementedException("Operator overloading not implemented yet.");
        }