# HG changeset patch # User David A. Holland # Date 1434088531 14400 # Node ID fa9752f194c6538336d48e4ab5fc98dce7fe5d92 # Parent 4ea0ce804d229e7127c8b267a5418fadc9484664 Don't shortcut macro expansion of non-parameter macros. It won't work once we have more kinds of expansion items than strings and arguments, viz., magic tokens for __FILE__ and __LINE__ and so on. (separate version of this applied against Joerg's changes, because we need to revert some of them) diff -r 4ea0ce804d22 -r fa9752f194c6 macro.c --- a/macro.c Fri Jun 12 01:31:49 2015 -0400 +++ b/macro.c Fri Jun 12 01:55:31 2015 -0400 @@ -948,8 +948,6 @@ expand_got_word(struct expstate *es, struct place *p, char *buf, size_t len) { struct macro *m; - struct expansionitem *ei; - char *newbuf; switch (es->state) { case ES_NORMAL: @@ -962,23 +960,10 @@ m = macrotable_findlen(buf, len, false); if (m == NULL || m->inuse) { expand_send(es, p, buf, len); - } else if (m->isspecial) { + } else if (!m->hasparams) { es->curmacro = m; - newbuf = expand_substitute(p, es); - expand_send(es, p, newbuf, strlen(newbuf)); - dostrfree(newbuf); + expand_domacro(es, p); es->curmacro = NULL; - m->inuse = false; - } else if (!m->hasparams) { - m->inuse = true; - assert(expansionitemarray_num(&m->expansion) == 1); - ei = expansionitemarray_get(&m->expansion, 0); - assert(ei->itemtype == EI_STRING); - newbuf = macroexpand(p, ei->string, - strlen(ei->string), false); - doexpand(es, p, newbuf, strlen(newbuf)); - dostrfree(newbuf); - m->inuse = false; } else { es->curmacro = m; es->state = ES_WANTLPAREN;