# HG changeset patch # User Aziz K?ksal # Date 1189544967 -7200 # Node ID 392a0068fc617743f7df9b60e238ccefac0093a5 # Parent c45233dc63db62969085dae7e3cdc5e63366c156 Refactored code related to scanning escape sequences. The backslash character is not skipped anymore before calling scanEscapeSequence(). Added an assert() to check for this. Added code that will pass the string of an undefined escape sequence to error(). diff -r c45233dc63db -r 392a0068fc61 trunk/src/dil/Lexer.d --- a/trunk/src/dil/Lexer.d Tue Sep 11 21:56:53 2007 +0200 +++ b/trunk/src/dil/Lexer.d Tue Sep 11 23:09:27 2007 +0200 @@ -390,7 +390,6 @@ char[] buffer; do { - ++p; c = scanEscapeSequence(); if (c < 128) buffer ~= c; @@ -673,7 +672,6 @@ t.end = p; return; case '\\': - ++p; c = scanEscapeSequence(); --p; if (c & 128) @@ -722,8 +720,7 @@ switch (*p) { case '\\': - ++p; - switch (*p) + switch (p[1]) { case 'u': type = TOK.WCharLiteral; break; @@ -1160,6 +1157,8 @@ dchar scanEscapeSequence() { + assert(*p == '\\'); + ++p; uint c = char2ev(*p); if (c) { @@ -1234,7 +1233,7 @@ if (*p == ';') { c = entity2Unicode(begin[0..p - begin]); - ++p; + ++p; // Skip ; if (c == 0xFFFF) error(MID.UndefinedHTMLEntity, (begin-1)[0..p-(begin-1)]); } @@ -1245,7 +1244,20 @@ error(MID.InvalidBeginHTMLEntity); } else - error(MID.UndefinedEscapeSequence); + { + // TODO: add parameter to localized strings + dchar d = *p; + char[] str = `\`; + if (d & 128) + { + d = decodeUTF8(); + encodeUTF8(str, d); + ++p; + } + else + str ~= d; + error(MID.UndefinedEscapeSequence/+, str+/); + } } return c;