allow macros to contain utf characters. Reference: /n/sources/patch/maybe/preprocutf Date: Fri Aug 7 20:46:17 CES 2009 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/cc/macbody Fri Aug 7 20:44:31 2009 +++ /sys/src/cmd/cc/macbody Fri Aug 7 20:44:29 2009 @@ -18,22 +18,27 @@ return n; } -Sym* -getsym(void) +static void +nextsym(int c) { - int c; + int c1; char *cp; - c = getnsc(); - if(!isalpha(c) && c != '_') { - unget(c); - return S; - } for(cp = symb;;) { - if(cp <= symb+NSYMB-4) - *cp++ = c; + if(c >= Runeself) { + for(c1=0;;) { + if(cp <= symb+NSYMB-4) + cp[c1++] = c; + if(fullrune(cp, c1)) + break; + c = getc(); + } + cp += c1; + }else + if(cp <= symb+NSYMB-4) + *cp++ = c; c = getc(); - if(isalnum(c) || c == '_') + if(c >= Runeself || isalnum(c) || c == '_') continue; unget(c); break; @@ -41,6 +46,19 @@ *cp = 0; if(cp > symb+NSYMB-4) yyerror("symbol too large: %s", symb); +} + +Sym* +getsym(void) +{ + int c; + + c = getnsc(); + if(c < Runeself && !isalpha(c) && c != '_') { + unget(c); + return S; + } + nextsym(c); return lookup(); } @@ -193,7 +211,7 @@ macdef(void) { Sym *s, *a; - char *args[NARG], *np, *base; + char *args[NARG], *base; int n, i, c, len, dots; int ischr; @@ -235,15 +253,9 @@ len = 1; ischr = 0; for(;;) { - if(isalpha(c) || c == '_') { - np = symb; - *np++ = c; + if(c >= Runeself || isalpha(c) || c == '_') { + nextsym(c); c = getc(); - while(isalnum(c) || c == '_') { - *np++ = c; - c = getc(); - } - *np = 0; for(i=0; i