# HG changeset patch # User aziz # Date 1182891961 0 # Node ID e0dbd4722f74513c6d4c1897103548e01a586bf5 # Parent cc84b9ca9d0a2aaadb4090fd955aef4d6bb3330b - Scanning character literals correctly now. - Fix: increment p in scanEscapeSequence(). diff -r cc84b9ca9d0a -r e0dbd4722f74 trunk/src/Lexer.d --- a/trunk/src/Lexer.d Tue Jun 26 19:43:04 2007 +0000 +++ b/trunk/src/Lexer.d Tue Jun 26 21:06:01 2007 +0000 @@ -691,32 +691,35 @@ { assert(*p == '\''); MID id = MID.UnterminatedCharacterLiteral; - uint c = *++p; - switch(c) + ++p; + switch (*p) { case '\\': ++p; + t.dchar_ = scanEscapeSequence(); break; - case 0, _Z_, '\n', '\r': - goto Lerr; case '\'': + ++p; id = MID.EmptyCharacterLiteral; + case '\n', '\r', 0, _Z_: goto Lerr; default: + uint c = *p; if (c & 128) { c = decodeUTF(); if (c == LSd || c == PSd) goto Lerr; - t.chr = c; } + t.dchar_ = c; + ++p; } - ++p; - if (*p != '\'') - Lerr: + if (*p == '\'') + ++p; + else + Lerr: error(id); - ++p; t.type = TOK.Character; t.end = p; } @@ -868,8 +871,10 @@ dchar scanEscapeSequence() { uint c = char2ev(*p); - if (c) + if (c) { + ++p; return c; + } uint digits = 2; switch (*p) @@ -930,8 +935,10 @@ { if (isalnum(*++p)) continue; - if (*p == ';') + if (*p == ';') { + ++p; break; + } else { error(MID.UnterminatedHTMLEntity); break; diff -r cc84b9ca9d0a -r e0dbd4722f74 trunk/src/Token.d --- a/trunk/src/Token.d Tue Jun 26 19:43:04 2007 +0000 +++ b/trunk/src/Token.d Tue Jun 26 21:06:01 2007 +0000 @@ -101,7 +101,7 @@ string str; char pf; } - dchar chr; + dchar dchar_; uint _uint; float f; double d;