diff options
author | Gonzalo Paniagua Javier <gonzalo.mono@gmail.com> | 2005-04-26 08:15:53 +0400 |
---|---|---|
committer | Gonzalo Paniagua Javier <gonzalo.mono@gmail.com> | 2005-04-26 08:15:53 +0400 |
commit | e7715aa16d26eaf052e2865b557a1f82fb996605 (patch) | |
tree | 6e0338ef4d55d87ac53c19612690fdfbb91e55ad /mcs/class/System.Data/Mono.Data.SqlExpressions | |
parent | adb8117d31fd68ee1080a29cc8ac3ec64fe6408c (diff) |
2005-04-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* Tokenizer.cs: make it not rely in exceptions being thrown to know that
the array is entirely processed.
svn path=/trunk/mcs/; revision=43575
Diffstat (limited to 'mcs/class/System.Data/Mono.Data.SqlExpressions')
-rw-r--r-- | mcs/class/System.Data/Mono.Data.SqlExpressions/ChangeLog | 5 | ||||
-rw-r--r-- | mcs/class/System.Data/Mono.Data.SqlExpressions/Tokenizer.cs | 47 |
2 files changed, 32 insertions, 20 deletions
diff --git a/mcs/class/System.Data/Mono.Data.SqlExpressions/ChangeLog b/mcs/class/System.Data/Mono.Data.SqlExpressions/ChangeLog index 4cc6aba3137..c2effbe8714 100644 --- a/mcs/class/System.Data/Mono.Data.SqlExpressions/ChangeLog +++ b/mcs/class/System.Data/Mono.Data.SqlExpressions/ChangeLog @@ -1,3 +1,8 @@ +2005-04-26 Gonzalo Paniagua Javier <gonzalo@ximian.com> + + * Tokenizer.cs: make it not rely in exceptions being thrown to know that + the array is entirely processed. + 2005-02-10 Atsushi Enomoto <atsushi@ximian.com> * Comparison.cs : allow comparison between guid and string. diff --git a/mcs/class/System.Data/Mono.Data.SqlExpressions/Tokenizer.cs b/mcs/class/System.Data/Mono.Data.SqlExpressions/Tokenizer.cs index b31edf66907..7d0d0f25c5c 100644 --- a/mcs/class/System.Data/Mono.Data.SqlExpressions/Tokenizer.cs +++ b/mcs/class/System.Data/Mono.Data.SqlExpressions/Tokenizer.cs @@ -98,14 +98,22 @@ namespace Mono.Data.SqlExpressions { 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 @@ namespace Mono.Data.SqlExpressions { char next; while (Char.IsDigit (next = Next ()) || next == '.') { sb.Append (next); - MoveNext (); + if (!MoveNext ()) + break; } string str = sb.ToString (); @@ -130,8 +139,11 @@ namespace Mono.Data.SqlExpressions { 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 @@ namespace Mono.Data.SqlExpressions { char next; while ((next = Next ()) != terminator) { sb.Append (ProcessEscapes (next)); - MoveNext (); + if (!MoveNext ()) + break; } + MoveNext (); return sb.ToString (); @@ -175,7 +189,8 @@ namespace Mono.Data.SqlExpressions { char next; while ((next = Next ()) == '_' || Char.IsLetterOrDigit (next) || next == '\\') { sb.Append (ProcessEscapes (next)); - MoveNext (); + if (!MoveNext ()) + break; } return sb.ToString (); @@ -268,18 +283,10 @@ namespace Mono.Data.SqlExpressions { */ 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. |