28-Feb-2013 20:33, Walter Bright пишет:
On 2/28/2013 7:38 AM, Dmitry Olshansky wrote:
28-Feb-2013 14:44, Walter Bright пишет:
On 2/28/2013 12:25 AM, Jacob Carlborg wrote:
On 2013-02-28 08:23, Walter Bright wrote:
There is always a terminating 0, even if the file ends in 0x1a.
(The 0x1A comes from some old editors that end a file with a
control Z.)
http://dlang.org/lex.html, "End of File" shows this:
EndOfFile:
physical end of the file
\u0000
\u001A
Doesn't that mean that the input is empty if the file is empty, \u0000
or \u001A
is encountered?
Please follow the source code from file to input to the lexer.
Source as spec is no good. Either change the spec or admit that
having a tuple
of sentinels as manifest constant is fine. In any case constant tuples
are
easily unrolled into case statements.
The spec is correct, so is the code, and tuple sentinels are entirely
unnecessary.
line 300:
case 0x1A: // ^Z means end of file
case 0:
break;
On the lines you noted it claimed that that 0x1a is outdate. Along with
the fact that you allocate filesize+2 and fill the last 2 bytes with zeros.
In any case I see 0 and 0x1a as 2 values that act like sentinels i.e. a
tuple. And this is what spec says - any one of them is a sentinel.
Correct me if I'm wrong.
--
Dmitry Olshansky