diff options
author | Ankit Jain <radical@corewars.org> | 2009-04-07 22:34:18 +0400 |
---|---|---|
committer | Ankit Jain <radical@corewars.org> | 2009-04-07 22:34:18 +0400 |
commit | 3d1aae67ebaf81462341c74d6ad3db1274a0ae6f (patch) | |
tree | be10cd25d726fc4ad78cbf8764c72915581155ab /mcs/ilasm | |
parent | 0cf0bbc5e00ad0e3926b2c9b9550e8ea8d835c45 (diff) |
Fix bug #487155.
* StringHelper.cs: Handle octal values in strings.
Patch from Stephen Gennard (stephen@gennard.net)
svn path=/trunk/mcs/; revision=131249
Diffstat (limited to 'mcs/ilasm')
-rw-r--r-- | mcs/ilasm/scanner/ChangeLog | 6 | ||||
-rw-r--r-- | mcs/ilasm/scanner/StringHelper.cs | 15 |
2 files changed, 18 insertions, 3 deletions
diff --git a/mcs/ilasm/scanner/ChangeLog b/mcs/ilasm/scanner/ChangeLog index 103e7bc94a9..a4754c1e808 100644 --- a/mcs/ilasm/scanner/ChangeLog +++ b/mcs/ilasm/scanner/ChangeLog @@ -1,3 +1,9 @@ +2009-04-08 Ankit Jain <jankit@novell.com> + + Fix bug #487155. + * StringHelper.cs: Handle octal values in strings. + Patch from Stephen Gennard (stephen@gennard.net) + 2006-11-09 Ankit Jain <jankit@novell.com> * ILTables.cs (keywords): Add 'retargetable'. diff --git a/mcs/ilasm/scanner/StringHelper.cs b/mcs/ilasm/scanner/StringHelper.cs index e1e13e02b07..abd51327737 100644 --- a/mcs/ilasm/scanner/StringHelper.cs +++ b/mcs/ilasm/scanner/StringHelper.cs @@ -78,7 +78,7 @@ namespace Mono.ILASM { continue;
}
- int escaped = Escape (ch);
+ int escaped = Escape (reader, ch);
if (escaped == -1) {
reader.Unread (ch);
ch = '\\';
@@ -109,12 +109,21 @@ namespace Mono.ILASM { /// </summary>
/// <param name="ch"></param>
/// <returns></returns>
- public static int Escape (int ch)
+ public static int Escape (ILReader reader, int ch)
{
int res = -1;
if (ch >= '0' && ch <='7') {
- //TODO : octal code
+ StringBuilder octal = new StringBuilder ();
+ octal.Append ((char)ch);
+ int possibleOctalChar = reader.Peek ();
+ if (possibleOctalChar >= '0' && possibleOctalChar <='7') {
+ octal.Append ((char)reader.Read ());
+ possibleOctalChar = reader.Peek ();
+ if (possibleOctalChar >= '0' && possibleOctalChar <='7')
+ octal.Append ((char)reader.Read ());
+ }
+ res = Convert.ToInt32(octal.ToString (), 8);
} else {
int id = "abfnrtv\"'\\".IndexOf ((char)ch);
if (id != -1) {
|