Author: gonzalo
Date: 2005-04-26 00:15:53 -0400 (Tue, 26 Apr 2005)
New Revision: 43575

Modified:
   trunk/mcs/class/System.Data/Mono.Data.SqlExpressions/ChangeLog
   trunk/mcs/class/System.Data/Mono.Data.SqlExpressions/Tokenizer.cs
Log:
2005-04-26 Gonzalo Paniagua Javier <[EMAIL PROTECTED]>

        * Tokenizer.cs: make it not rely in exceptions being thrown to know that
        the array is entirely processed.



Modified: trunk/mcs/class/System.Data/Mono.Data.SqlExpressions/ChangeLog
===================================================================
--- trunk/mcs/class/System.Data/Mono.Data.SqlExpressions/ChangeLog      
2005-04-26 03:53:45 UTC (rev 43574)
+++ trunk/mcs/class/System.Data/Mono.Data.SqlExpressions/ChangeLog      
2005-04-26 04:15:53 UTC (rev 43575)
@@ -1,3 +1,8 @@
+2005-04-26 Gonzalo Paniagua Javier <[EMAIL PROTECTED]>
+
+       * Tokenizer.cs: make it not rely in exceptions being thrown to know that
+       the array is entirely processed.
+
 2005-02-10  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * Comparison.cs : allow comparison between guid and string.

Modified: trunk/mcs/class/System.Data/Mono.Data.SqlExpressions/Tokenizer.cs
===================================================================
--- trunk/mcs/class/System.Data/Mono.Data.SqlExpressions/Tokenizer.cs   
2005-04-26 03:53:45 UTC (rev 43574)
+++ trunk/mcs/class/System.Data/Mono.Data.SqlExpressions/Tokenizer.cs   
2005-04-26 04:15:53 UTC (rev 43575)
@@ -98,14 +98,22 @@
                        return input [pos + 1];
                }
 
-               private void MoveNext() {
+               private bool MoveNext() {
                        pos++;
+                       if (pos >= input.Length)
+                               return false;
+
+                       return true;
                }
                
-               private void SkipWhiteSpace ()
+               private bool SkipWhiteSpace ()
                {
-                       while (Char.IsWhiteSpace (Current ()))
-                               MoveNext ();                            
+                       while (Char.IsWhiteSpace (Current ())) {
+                               if (!MoveNext ())
+                                       return false;
+                       }
+
+                       return true;
                }
 
                private object ReadNumber ()
@@ -116,7 +124,8 @@
                        char next;
                        while (Char.IsDigit (next = Next ()) || next == '.') {
                                sb.Append (next);
-                               MoveNext ();
+                               if (!MoveNext ())
+                                       break;
                        }
 
                        string str = sb.ToString ();
@@ -130,8 +139,11 @@
                private char ProcessEscapes(char c)
                {
                        if (c == '\\') {
-                               MoveNext();
-                               c = Next();
+                               if (MoveNext())
+                                       c = Next();
+                               else
+                                       c = '\0';
+
                                switch (c) {
                                case 'n':
                                        c = '\n';
@@ -160,8 +172,10 @@
                        char next;
                        while ((next = Next ()) != terminator) {
                                sb.Append (ProcessEscapes (next));
-                               MoveNext ();
+                               if (!MoveNext ())
+                                       break;
                        }
+
                        MoveNext ();
                                
                        return sb.ToString ();
@@ -175,7 +189,8 @@
                        char next;
                        while ((next = Next ()) == '_' || Char.IsLetterOrDigit 
(next) || next == '\\') {
                                sb.Append (ProcessEscapes (next));              
                
-                               MoveNext ();
+                               if (!MoveNext ())
+                                       break;
                        }
 
                        return sb.ToString ();
@@ -268,18 +283,10 @@
                  */
                public bool advance ()
                {
-                       val = null;
-                       tok = -1;
-                       
-                       try {
-                               SkipWhiteSpace();
-                               tok = ParseToken();
-                               MoveNext();
-                               return true;
-
-                       } catch(IndexOutOfRangeException) {
+                       if (!SkipWhiteSpace())
                                return false;
-                       }
+                       tok = ParseToken();
+                       return MoveNext ();
                }
 
                /** classifies current token.

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to