Quellcode durchsuchen

buggies

svn path=/trunk/mcs/; revision=17950
Ben Maurer vor 22 Jahren
Ursprung
Commit
9a14273e54

+ 25 - 14
mcs/class/System.XML/System.Xml.XPath/DefaultContext.cs

@@ -277,16 +277,19 @@ namespace System.Xml.XPath
 		
 		public XPathFunctionString (FunctionArguments args) : base (args)
 		{
-			if (args == null || args.Tail != null)
-				throw new XPathException ("string takes 1 arg");
-			
-			arg0 = args.Arg;
+			if (args != null) {
+				arg0 = args.Arg;
+				if (args.Tail != null)
+					throw new XPathException ("boolean takes 1 or zero args");
+			}
 		}
 		
 		public override XPathResultType ReturnType { get { return XPathResultType.String; }}
 
 		public override object Evaluate (BaseIterator iter)
 		{
+			if (arg0 == null)
+				return iter.Current.Value;
 			return arg0.EvaluateString (iter);
 		}
 	}
@@ -335,7 +338,7 @@ namespace System.Xml.XPath
 		
 		public override object Evaluate (BaseIterator iter)
 		{
-			return arg0.EvaluateString (iter).StartsWith (arg0.EvaluateString (iter));
+			return arg0.EvaluateString (iter).StartsWith (arg1.EvaluateString (iter));
 		}
 	}
 
@@ -357,7 +360,7 @@ namespace System.Xml.XPath
 		
 		public override object Evaluate (BaseIterator iter)
 		{
-			return arg0.EvaluateString (iter).IndexOf (arg0.EvaluateString (iter)) != -1;
+			return arg0.EvaluateString (iter).IndexOf (arg1.EvaluateString (iter)) != -1;
 		}
 	}
 
@@ -487,7 +490,7 @@ namespace System.Xml.XPath
 		public override object Evaluate (BaseIterator iter)
 		{
 			string str;
-			if (arg0 == null)
+			if (arg0 != null)
 				str = arg0.EvaluateString (iter);
 			else
 				str = iter.Current.Value;
@@ -549,7 +552,7 @@ namespace System.Xml.XPath
 		
 		public XPathFunctionTranslate (FunctionArguments args) : base (args)
 		{
-			if (args == null || args.Tail == null || args.Tail.Tail != null || args.Tail.Tail.Tail != null)
+			if (args == null || args.Tail == null || args.Tail.Tail == null || args.Tail.Tail.Tail != null)
 				throw new XPathException ("translate takes 3 args");
 			
 			arg0 = args.Arg;
@@ -573,15 +576,19 @@ namespace System.Xml.XPath
 		
 		public XPathFunctionBoolean (FunctionArguments args) : base (args)
 		{
-			arg0 = args.Arg;
-			if (args.Tail != null)
-				throw new XPathException ("boolean takes zero args");
+			if (args != null) {
+				arg0 = args.Arg;
+				if (args.Tail != null)
+					throw new XPathException ("boolean takes 1 or zero args");
+			}
 		}
 		
 		public override XPathResultType ReturnType { get { return XPathResultType.Boolean; }}
 
 		public override object Evaluate (BaseIterator iter)
 		{
+			if (arg0 == null)
+				return XPathFunctions.ToBoolean (iter.Current.Value);
 			return arg0.EvaluateBoolean (iter);
 		}
 	}
@@ -669,15 +676,19 @@ namespace System.Xml.XPath
 		
 		public XPathFunctionNumber (FunctionArguments args) : base (args)
 		{
-			if (args == null || args.Tail != null)
-				throw new XPathException ("number takes one arg");
-			arg0 = args.Arg;
+			if (args != null) {
+				arg0 = args.Arg;
+				if (args.Tail != null)
+					throw new XPathException ("number takes 1 or zero args");
+			}
 		}
 		
 		public override XPathResultType ReturnType { get { return XPathResultType.Number; }}
 
 		public override object Evaluate (BaseIterator iter)
 		{
+			if (arg0 == null)
+				return XPathFunctions.ToNumber (iter.Current.Value);
 			return arg0.EvaluateNumber (iter);
 		}
 	}

+ 1 - 1
mcs/class/System.XML/System.Xml.XPath/Expression.cs

@@ -1287,7 +1287,7 @@ namespace System.Xml.XPath
 				case "number": return new XPathFunctionNumber (args);
 				case "sum": return new XPathFunctionSum (args);
 				case "floor": return new XPathFunctionFloor (args);
-				case "ceil": return new XPathFunctionCeil (args);
+				case "ceiling": return new XPathFunctionCeil (args);
 				case "round": return new XPathFunctionRound (args);
 			}
 			return new ExprFunctionCall (name, args);