# HG changeset patch # User Shinji KONO # Date 1396260729 -32400 # Node ID e253ffedf947ffc2aaf8ef940d91c01dbc5799a1 # Parent 68cbc637f486d4e6bfdb8865a3c4ca4fbb5e69e3 recursive macro fix ( at last ) diff -r 68cbc637f486 -r e253ffedf947 mc-macro.c --- a/mc-macro.c Mon Mar 31 18:40:27 2014 +0900 +++ b/mc-macro.c Mon Mar 31 19:12:09 2014 +0900 @@ -1130,6 +1130,19 @@ extern int check_recurse(char *macro,int history) { + int len; + char *name = macro; + while(1) { + NMTBL *nptrm = get_name(name,&len,NONDEF); + if (!nptrm) break; + nptrm = name_space_search(nptrm,MACRO); + if (!nptrm) break; + if (nptrm->dsp) + name = scaddr(nptrm->dsp); + else break; + if ( nameeq(macro,name) ) return 1; + } + for(;history;history = cadr(history)) { if (macro==scaddr(history)) { // fprintf(stderr,"check_recurse: %s %s = ",macro,scaddr(history)); diff -r 68cbc637f486 -r e253ffedf947 test/macro.c --- a/test/macro.c Mon Mar 31 18:40:27 2014 +0900 +++ b/test/macro.c Mon Mar 31 19:12:09 2014 +0900 @@ -50,7 +50,7 @@ #else printf("#0050:bad\n"); #endif -} + return 1 ; } // name concateneation