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