2004-09-08 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Wed, 8 Sep 2004 12:26:07 +0000 (12:26 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Wed, 8 Sep 2004 12:26:07 +0000 (12:26 -0000)
* XPathSequence.cs : workarounded bug #65521. Erased foreach inside
  iterators.

svn path=/trunk/mcs/; revision=33570

mcs/class/System.XML/System.Xml.Query/ChangeLog
mcs/class/System.XML/System.Xml.Query/XPathSequence.cs

index a894ede7f1fca0dbdb10a53cab7b4b684798dbc7..47adc76b33a20d2e0ee45c5f0448b3c8f19651c4 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-08  Atsushi Enomoto <atsushi@ximian.com>
+
+       * XPathSequence.cs : workarounded bug #65521. Erased foreach inside
+         iterators.
+
 2004-09-08  Atsushi Enomoto <atsushi@ximian.com>
 
        * XPath2Expression.cs : fixed EnclosedExpr.Compile() that resulted
index 99e9cb9f735a7a65b0250e5c72908ca81e3755eb..b066dc86716146750b6bace57b61a39c6964f89c 100755 (executable)
@@ -1259,8 +1259,9 @@ namespace Mono.Xml.XPath2
                        if (!passedFilter)
                                passedFilter = expr.WhereClause.EvaluateAsBoolean (contextSequence);
                        if (passedFilter) {
-                               foreach (XPathItem item in expr.ReturnExpr.Evaluate (contextSequence))
-                                       yield return item;
+                               IEnumerator ie = expr.ReturnExpr.Evaluate (contextSequence).GetEnumerator ();
+                               while (ie.MoveNext ())
+                                       yield return (XPathItem) ie.Current;
                        }
                }
 
@@ -1273,7 +1274,8 @@ namespace Mono.Xml.XPath2
                                        XPathSequence backup = contextSequence;
                                        XPathSequence current = sb.Expression.Evaluate (Context.CurrentSequence);
                                        Context.ContextManager.PushCurrentSequence (current);
-                                       foreach (XPathItem forItem in current) {
+                                       while (current.MoveNext ()) {
+                                               XPathItem forItem = (XPathItem) current.Current;
                                                Context.PushVariable (fsb.PositionalVar, Context.CurrentSequence.Position);
                                                Context.PushVariable (sb.VarName, forItem);
                                                // recurse here (including following bindings)