* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
#ifndef lint
-static char Version[] = "ACK CEM compiler Version 3.1";
+static char Version[] = "ACK CEM compiler Version 3.2";
#endif lint
break;
case '&':
if ((*expp)->ex_type->tp_fund == ARRAY) {
- warning("& before array ignored");
+ expr_warning(*expp, "& before array ignored");
array2pointer(*expp);
}
else
if ((*expp)->ex_type->tp_fund == FUNCTION) {
- warning("& before function ignored");
+ expr_warning(*expp, "& before function ignored");
function2pointer(*expp);
}
else
break;
case SIZEOF:
if (ISNAME(*expp) && (*expp)->VL_IDF->id_def->df_formal_array)
- warning("sizeof formal array %s is sizeof pointer!",
+ expr_warning(*expp, "sizeof formal array %s is sizeof pointer!",
(*expp)->VL_IDF->id_text);
expr = intexpr((*expp)->ex_class == String ?
(arith)((*expp)->SG_LEN) :
}
PRIVATE
-skip_block()
+skip_block(to_endif)
{
/* skip_block() skips the input from
1) a false #if, #ifdef, #ifndef or #elif until the
push_if();
break;
case K_ELIF:
- if (nestlevel == skiplevel) {
+ if (! to_endif && nestlevel == skiplevel) {
nestlevel--;
push_if();
if (ifexpr()) {
}
break;
case K_ELSE:
- ++(ifstack[nestlevel]);
- if (nestlevel == skiplevel) {
- SkipRestOfLine();
- NoUnstack--;
- return;
+ if (! to_endif) {
+ ++(ifstack[nestlevel]);
+ if (nestlevel == skiplevel) {
+ SkipRestOfLine();
+ NoUnstack--;
+ return;
+ }
}
break;
case K_ENDIF:
else { /* restart at this level as if a #if is detected. */
nestlevel--;
push_if();
- skip_block();
+ skip_block(1);
}
}
lexerror("#else without corresponding #if");
else { /* mark this level as else-d */
++(ifstack[nestlevel]);
- skip_block();
+ skip_block(1);
}
}
{
push_if();
if (!ifexpr()) /* a false #if/#elif expression */
- skip_block();
+ skip_block(0);
}
PRIVATE
(how && !id->id_macro) || (!how && id->id_macro)
*/
if (how ^ (id && id->id_macro != 0))
- skip_block();
+ skip_block(0);
else
SkipRestOfLine();
}
I expand include table with directory name following
M set identifier length
n don't generate register messages
-p generate linenumbers and filename indications
- while generating EM code
+L don't generate linenumbers and filename indications
+p trace
P in running the preprocessor do not output '# line' lines
R restricted C
T take path following as directory for storing temporary file(s)