fixed error with # && ##-operators in non function-like macro's
This commit is contained in:
parent
5ed44e3432
commit
707d811586
|
@ -536,6 +536,7 @@ macro2buffer(repl, idf, args)
|
|||
*/
|
||||
register char *ptr = idf->id_macro->mc_text;
|
||||
int err = 0;
|
||||
int func = idf->id_macro->mc_nps != -1;
|
||||
char *stringify();
|
||||
|
||||
assert(ptr[idf->id_macro->mc_length] == '\0');
|
||||
|
@ -554,7 +555,7 @@ macro2buffer(repl, idf, args)
|
|||
ptr++;
|
||||
} while (*ptr != delim || *ptr == '\0');
|
||||
add2repl(repl, *ptr++);
|
||||
} else if (*ptr == '#') {
|
||||
} else if (func && *ptr == '#') {
|
||||
if (*++ptr == '#') {
|
||||
register int tmpindex;
|
||||
/* ## - paste operator */
|
||||
|
@ -619,8 +620,9 @@ macro2buffer(repl, idf, args)
|
|||
repl->r_text[tmpindex] = TOKSEP;
|
||||
}
|
||||
}
|
||||
} else /* # operator */
|
||||
ptr = stringify(repl, ptr, args);
|
||||
} else { /* # operator */
|
||||
ptr = stringify(repl, ptr, args);
|
||||
}
|
||||
} else if (*ptr & FORMALP) {
|
||||
/* insert actual parameter */
|
||||
register int n = *ptr++ & 0177;
|
||||
|
@ -646,8 +648,9 @@ macro2buffer(repl, idf, args)
|
|||
|
||||
if (*(repl->r_ptr-1) != TOKSEP)
|
||||
add2repl(repl, TOKSEP);
|
||||
} else
|
||||
} else {
|
||||
add2repl(repl, *ptr++);
|
||||
}
|
||||
}
|
||||
if (err)
|
||||
error("illegal use of ## operator");
|
||||
|
|
Loading…
Reference in a new issue