Fix parsing of #ifdef in calendar files
There was code to process an #ifndef tokens, but none for #ifdef. The #ifdef token was mentioned as unsupported in the BUGS section, but no reason was given and I do not see why it should stay omitted. Misleading information in The BUGS section of the man-page regarding the maximum number of #define and #include statements supported has been removed. These limits might have applied to a prior version of this program, but do not seem to apply to the current implementation. I have not tried to test for the existence of the limits, but the include file processing just recursively calls the parser (without counting the recursion depth) and the stringlist functions do not impose a limit on the number of entries. Reported by: jhs@berklix.com MFC after: 3 days
This commit is contained in:
parent
6869aed2cf
commit
2939897921
@ -346,11 +346,9 @@ double-check the start and end time of solar and lunar events.
|
||||
.Sh BUGS
|
||||
The
|
||||
.Nm
|
||||
internal cpp does not correctly do #ifndef and will discard the rest
|
||||
of the file if a #ifndef is triggered.
|
||||
It also has a maximum of 50 include file and/or 100 #defines
|
||||
and only recognises #include, #define and
|
||||
#ifndef.
|
||||
internal cpp does not support nested conditions and will continue
|
||||
parsing of the input file on the next #endif even in nested contexts.
|
||||
It does only recognise #include, #define, #ifdef and #ifndef.
|
||||
.Pp
|
||||
There is no possibility to properly specify the local position
|
||||
needed for solar and lunar calculations.
|
||||
|
@ -212,6 +212,21 @@ token(char *line, FILE *out, bool *skip)
|
||||
return (T_OK);
|
||||
}
|
||||
|
||||
if (strncmp(line, "ifdef", 5) == 0) {
|
||||
walk = line + 6;
|
||||
trimlr(&walk);
|
||||
|
||||
if (*walk == '\0') {
|
||||
warnx("Expecting arguments after #ifdef");
|
||||
return (T_ERR);
|
||||
}
|
||||
|
||||
if (definitions == NULL || sl_find(definitions, walk) == NULL)
|
||||
*skip = true;
|
||||
|
||||
return (T_OK);
|
||||
}
|
||||
|
||||
if (strncmp(line, "ifndef", 6) == 0) {
|
||||
walk = line + 6;
|
||||
trimlr(&walk);
|
||||
|
Loading…
Reference in New Issue
Block a user