On Tuesday, 20 January 2015 at 20:19:19 UTC, ketmar via
Digitalmars-d wrote:
On Tue, 20 Jan 2015 20:14:42 +0000
Meta via Digitalmars-d <[email protected]> wrote:
I'm trying to build to build DMD and I've encountered a very
strange problem. When I run `make -fwin32.mak`, there are
errors when it tries to compile id.c:
id.c(298) : Error: 'idPool' is not a member of 'Lexer'
...etc.
Sure enough, when I look in id.c, there are a bunch of these:
stringof = Lexer::idPool("stringof");
But Lexer does not have an `idPool` member. I then looked in
idgen.c for the offending line that must be wrongly inserting
"Lexer" instead of "Identifier", but everything looks okay.
Specifically this block:
for (i = 0; i < sizeof(msgtable) / sizeof(msgtable[0]); i++)
{ const char *id = msgtable[i].ident;
const char *p = msgtable[i].name;
if (!p)
p = id;
fprintf(fp," %s = Identifier::idPool(\"%s\");\n", id,
p);
}
Looks like it should print the correct line to id.c. I can
confirm this by running idgen.exe manually; it produces the
correct file.
However, when I try deleting all the relevant files to make
sure there is nothing old hanging around, then run make again,
the same incorrect id.c is generated. This seems bizarre to
me; what exactly is going on here?
what is that "id.c" at all? i can't find such file in dmd git
repo...
It's generated by idgen.exe, which is compiled from idgen.c. I'm
not sure why, exactly.