diff --git a/src/cpp.c b/src/cpp.c index e2589155e224457042283453c5776df0f364288b..d6f4b9fdec0b35f567f2118ce6ab32115a326a57 100644 --- a/src/cpp.c +++ b/src/cpp.c @@ -1239,6 +1239,39 @@ static ptrdiff_t find_end_of_comment( struct cpp *this, PCHARP data, ptrdiff_t l return pos + 2; } +static ptrdiff_t find_end_of_string2( struct cpp *this, PCHARP data, ptrdiff_t len, ptrdiff_t pos) +{ + while(1) + { + if(pos>=len) + { + cpp_error(this,"End of file in string."); + break; + } + switch(INDEX_PCHARP(data,pos++)) + { + case '\n': + this->current_line++; + PUTNL(); + continue; + case '"': return pos; + case '\\': + if(INDEX_PCHARP(data,pos)=='\n') { + this->current_line++; + PUTNL(); + } + else if ((INDEX_PCHARP(data,pos) == '\r') && (INDEX_PCHARP(data,pos+1) == '\n')) { + this->current_line++; + pos++; + PUTNL(); + } + pos++; + } + } + return pos; +} + + static ptrdiff_t find_end_of_string( struct cpp *this, PCHARP data, ptrdiff_t len, ptrdiff_t pos) { while(1) @@ -1393,6 +1426,15 @@ static ptrdiff_t find_end_brace(struct cpp *this, } } + +static inline int wide_isspace( int c ) { + return WIDE_ISSPACE(c); +} + +static inline int wide_isidchar( int c ) { + return WIDE_ISIDCHAR(c); +} + static struct pike_string *gobble_identifier (struct cpp *this, PCHARP data, ptrdiff_t *pos) { ptrdiff_t p = *pos; @@ -1401,7 +1443,7 @@ static struct pike_string *gobble_identifier (struct cpp *this, PCHARP data, ptr while (1) { ptrdiff_t start = p; - while (WIDE_ISIDCHAR (INDEX_PCHARP(data,p))) + while (wide_isidchar (INDEX_PCHARP(data,p))) p++; if (p != start) { @@ -1459,7 +1501,7 @@ static struct pike_string *gobble_identifier (struct cpp *this, PCHARP data, ptr goto past_identifier; } } - if (!WIDE_ISIDCHAR (c)) goto past_identifier; + if (!wide_isidchar (c)) goto past_identifier; string_builder_putchar (&sb, c); p = q; break; @@ -1923,6 +1965,10 @@ static void free_one_define(struct hash_entry *h) } #define PUSH_STRING0(X,Y,Z) add_quoted_string( X,Y,0,Z) +#define PUSH_STRING_SHIFT(X,Y,Z,A) add_quoted_string(X,Y,Z,A) +#define WC_ISSPACE wide_isspace +#define WC_ISIDCHAR wide_isidchar + static void add_quoted_string( void *str, ptrdiff_t len, int shift, struct string_builder *dst ) { @@ -1933,6 +1979,152 @@ static void add_quoted_string( void *str, ptrdiff_t len, int shift, free_string(x); } +static ptrdiff_t find_eos( struct cpp *this, PCHARP data, ptrdiff_t len, ptrdiff_t pos ) +{ + while(pos < len) + { + switch (INDEX_PCHARP(data,pos++)) { + case '\n': + break; + case '/': + if (INDEX_PCHARP(data,pos) == '/') { + pos = find_end_of_line(this,data,len,pos,0); + break; + } else if (INDEX_PCHARP(data,pos) == '*') { + pos = find_end_of_comment(this,data,len,pos,0); + } + continue; + case '\\': + if (INDEX_PCHARP(data,pos) == '\n') { + pos+=1; + } else if ((INDEX_PCHARP(data,pos) == '\r') && + (INDEX_PCHARP(data,pos+1) == '\n')) { + pos+=2; + } else { + continue; + } + this->current_line++; + default: + continue; + } + this->current_line++; + break; + } + return pos; +} + +static ptrdiff_t skipwhite(struct cpp *this,PCHARP data, ptrdiff_t pos) +{ + do + { + int c; + if(!wide_isspace(c=INDEX_PCHARP(data,pos))) + { + if (c == '\\') + { + if (INDEX_PCHARP(data,pos+1) == '\n') + { + pos += 2; + PUTNL(); + this->current_line++; + continue; + } else if ((INDEX_PCHARP(data,pos+1) == '\r') && + (INDEX_PCHARP(data,pos+2) == '\n')) { + pos += 3; + PUTNL(); + this->current_line++; + continue; + } + } + break; + } + else if(c=='\n') + { + PUTNL(); this->current_line++; + } + pos++; + } while(1); + return pos; +} + +static ptrdiff_t skipspace(struct cpp *this,PCHARP data, ptrdiff_t pos, int emit) +{ + do { + int c; + while (wide_isspace(c=INDEX_PCHARP(data,pos)) && c!='\n') { + pos++; + } + if (c == '\\') { + if (INDEX_PCHARP(data,pos+1) == '\n') { + pos+=2; + } else if ((INDEX_PCHARP(data,pos+1) == '\r') && + (INDEX_PCHARP(data,pos+2) == '\n')) { + pos+=3; + } else { + break; + } + } else { + break; + } + if( emit ) + { + PUTNL(); + this->current_line++; + } + } while (1); + return pos; +} + +void _STRCAT(char *str, int len, int flags,struct cpp *this) +{ + ptrdiff_t x; + if(OUTP()) + string_builder_binary_strcat(&this->buf, str, len); + else + for(x=0;x<len;x++) + if(str[x]=='\n') + string_builder_putchar(&this->buf, '\n'); +} + +static const char eq_[] = { '=', '=' }; +static const char ne_[] = { '!', '=' }; +static const char land_[] = { '&', '&' }; +static const char lor_[] = { '|', '|' }; +static const char string_recur_[] = + { 's', 't', 'r', 'i', 'n', 'g', '_', 'r', 'e', 'c', 'u', 'r' }; +static const char include_recur_[] = + { 'i', 'n', 'c', 'l', 'u', 'd', 'e', '_', 'r', 'e', 'c', 'u', 'r' }; +static const char line_[] = { 'l', 'i', 'n', 'e' }; +static const char string_[] = { 's', 't', 'r', 'i', 'n', 'g' }; +static const char include_[] = { 'i', 'n', 'c', 'l', 'u', 'd', 'e' }; +static const char if_[] = { 'i', 'f' }; +static const char ifdef_[] = { 'i', 'f', 'd', 'e', 'f' }; +static const char ifndef_[] = { 'i', 'f', 'n', 'd', 'e', 'f' }; +static const char endif_[] = { 'e', 'n', 'd', 'i', 'f' }; +static const char else_[] = { 'e', 'l', 's', 'e' }; +static const char elseif_[] = { 'e', 'l', 's', 'e', 'i', 'f' }; +static const char elif_[] = { 'e', 'l', 'i', 'f' }; +static const char error_[] = { 'e', 'r', 'r', 'o', 'r' }; +static const char define_[] = { 'd', 'e', 'f', 'i', 'n', 'e' }; +static const char undef_[] = { 'u', 'n', 'd', 'e', 'f' }; +static const char undefine_[] = { 'u', 'n', 'd', 'e', 'f', 'i', 'n', 'e' }; +static const char charset_[] = { 'c', 'h', 'a', 'r', 's', 'e', 't' }; +static const char pragma_[] = { 'p', 'r', 'a', 'g', 'm', 'a' }; +static const char pike_[] = { 'p', 'i', 'k', 'e' }; +static const char require_[] = { 'r', 'e', 'q', 'u', 'i', 'r', 'e' }; +static const char warning_[] = { 'w', 'a', 'r', 'n', 'i', 'n', 'g' }; +static const char lsh_[] = { '<', '<' }; +static const char rsh_[] = { '>', '>' }; + +static int begins_with( const char *prefix, PCHARP stack, int len ) +{ + int i; + for( i=0; i<len; i++ ) + if( INDEX_PCHARP(stack,i) != prefix[i] ) + return 0; + return 1; +} + static ptrdiff_t low_cpp(struct cpp *this, void *data, ptrdiff_t len, int shift, int flags, int auto_convert, struct pike_string *charset); diff --git a/src/preprocessor.h b/src/preprocessor.h index 059d07f3ec89a11c002892eeb555d756e1c5039b..a197c594affa3d18f4b7b40817f62d5c6a6fd94e 100644 --- a/src/preprocessor.h +++ b/src/preprocessor.h @@ -22,16 +22,11 @@ #if (SHIFT == 0) #define WCHAR p_wchar0 - -#define WC_ISSPACE isspace -#define WC_ISIDCHAR isidchar - /* * Function renaming */ #define lower_cpp lower_cpp0 -#define parse_esc_seq parse_esc_seq0 #define MAKE_BINARY_STRING make_shared_binary_string0 #define calc calc_0 @@ -51,8 +46,6 @@ #else /* SHIFT != 0 */ -#define WC_ISSPACE WIDE_ISSPACE -#define WC_ISIDCHAR WIDE_ISIDCHAR #if (SHIFT == 1) @@ -63,7 +56,6 @@ */ #define lower_cpp lower_cpp1 -#define parse_esc_seq parse_esc_seq1 #define MAKE_BINARY_STRING make_shared_binary_string1 #define calc calc_1 @@ -90,7 +82,6 @@ */ #define lower_cpp lower_cpp2 -#define parse_esc_seq parse_esc_seq2 #define MAKE_BINARY_STRING make_shared_binary_string2 #define calc calc_2 @@ -117,10 +108,10 @@ #define STRCAT(X,Y) _STRCAT(X,Y,flags,this) #define CHECKWORD2(X,LEN) \ - (pos + (ptrdiff_t)(LEN) <= len && !MEMCMP(X,data+pos,(LEN)<<(SHIFT)) && (pos + (ptrdiff_t)(LEN) == len || !WC_ISIDCHAR(data[pos+(LEN)]))) + (pos + (ptrdiff_t)(LEN) <= len && begins_with(X,MKPCHARP(data+(pos<<SHIFT),SHIFT),(LEN)) && (pos + (ptrdiff_t)(LEN) == len || !WC_ISIDCHAR(data[pos+(LEN)]))) #define WGOBBLE2(X) (CHECKWORD2(X,NELEM(X)) ? (pos+=NELEM(X)),1 : 0) #define GOBBLEOP2(X) \ - (pos + (ptrdiff_t)NELEM(X) < len && ((!MEMCMP(X,data+pos,sizeof(X))) ? (pos += NELEM(X)),1 : 0)) + (pos + (ptrdiff_t)NELEM(X) < len && ((begins_with(X,MKPCHARP(data+(pos<<SHIFT),SHIFT),sizeof(X))) ? (pos += NELEM(X)),1 : 0)) /* * Some prototypes @@ -130,55 +121,36 @@ static ptrdiff_t calc_1(struct cpp *,p_wchar1 *,ptrdiff_t,ptrdiff_t, int); static ptrdiff_t calc_2(struct cpp *,p_wchar2 *,ptrdiff_t,ptrdiff_t, int); static ptrdiff_t calc1(struct cpp *,WCHAR *,ptrdiff_t,ptrdiff_t, int); - /* * Functions */ #define FIND_END_OF_STRING() (pos=find_end_of_string(this,MKPCHARP(data,SHIFT),len,pos)) - -#define FIND_END_OF_STRING2() (pos=PIKE_XCONCAT(find_end_of_string2,SHIFT)(pos,len,data,this)) -static ptrdiff_t PIKE_XCONCAT(find_end_of_string2,SHIFT) - ( ptrdiff_t pos, ptrdiff_t len,WCHAR *data, - struct cpp *this) -{ - while(1) - { - if(pos>=len) - { - cpp_error(this,"End of file in string."); - break; - } - switch(data[pos++]) - { - case '\n': - this->current_line++; - PUTNL(); - continue; - case '"': return pos; - case '\\': - if(data[pos]=='\n') { - this->current_line++; - PUTNL(); - } - else if ((data[pos] == '\r') && (data[pos+1] == '\n')) { - this->current_line++; - pos++; - PUTNL(); - } - pos++; - } - } - return pos; -} - - +#define FIND_END_OF_STRING2() (pos=find_end_of_string2(this,MKPCHARP(data,SHIFT),len,pos)) #define FIND_END_OF_CHAR() (pos=find_end_of_char(this,MKPCHARP(data,SHIFT),len,pos)) - #define FIND_EOL_PRETEND() (pos=find_end_of_line(this,MKPCHARP(data,SHIFT),len,pos,0)) #define FIND_EOL() (pos=find_end_of_line(this,MKPCHARP(data,SHIFT),len,pos,1)) #define SKIPCOMMENT_INC_LINES() (pos=find_end_of_comment(this,MKPCHARP(data,SHIFT),len,pos,0)) #define SKIPCOMMENT() (pos=find_end_of_comment(this,MKPCHARP(data,SHIFT),len,pos,1)) #define KEEPCOMMENT(s) (pos=PIKE_XCONCAT(keepcomment,SHIFT)(pos,len,old_pos,data,(s),this)) +#define FIND_EOS() (pos=find_eos(this,MKPCHARP(data,SHIFT),len,pos)) + +/* Skips horizontal whitespace and newlines. */ +#define SKIPWHITE() (pos=skipwhite(this,MKPCHARP(data,SHIFT),pos)) + +/* Skips horizontal whitespace and escaped newlines. */ +#define SKIPSPACE() (pos=skipspace(this,MKPCHARP(data,SHIFT),pos,1)) +#define SKIPSPACE_PRETEND() (pos=skipspace(this,MKPCHARP(data,SHIFT),pos,0)) + +/* pos is assumed to be at the backslash. pos it at the last char in + * the escape afterwards. */ +#define READCHAR(C) (C=readchar(MKPCHARP(data,SHIFT),&pos,this)) + +/* At entry pos points past the start quote. + * At exit pos points past the end quote. + */ +#define READSTRING(nf) (pos=readstring(this,MKPCHARP(data,SHIFT),len,pos,&nf,0)) +#define READSTRING2(nf) (pos=readstring(this,MKPCHARP(data,SHIFT),len,pos,&nf,1)) +#define FIXSTRING(nf,outp) (pos=fixstring(this,MKPCHARP(data,SHIFT),len,pos,&nf,outp)) static ptrdiff_t PIKE_XCONCAT(keepcomment,SHIFT)( ptrdiff_t pos,ptrdiff_t len,ptrdiff_t old_pos, WCHAR *data,struct string_builder *s, @@ -201,159 +173,13 @@ static ptrdiff_t PIKE_XCONCAT(keepline,SHIFT)( ptrdiff_t pos,ptrdiff_t len,ptrdi return pos; } -#define FIND_EOS() (pos=PIKE_XCONCAT(find_eos,SHIFT)(pos,len,data,this)) -static ptrdiff_t PIKE_XCONCAT(find_eos,SHIFT)( ptrdiff_t pos,ptrdiff_t len,WCHAR *data, struct cpp *this) -{ - while(pos < len) - { - switch (data[pos++]) { - case '\n': - break; - case '/': - if (data[pos] == '/') { - FIND_EOL_PRETEND(); - break; - } else if (data[pos] == '*') { - SKIPCOMMENT_INC_LINES(); - } - continue; - case '\\': - if (data[pos] == '\n') { - pos+=1; - } else if ((data[pos] == '\r') && - (data[pos+1] == '\n')) { - pos+=2; - } else { - continue; - } - this->current_line++; - default: - continue; - } - this->current_line++; - break; - } - return pos; -} -/* Skips horizontal whitespace and newlines. */ -#define SKIPWHITE() (pos=PIKE_XCONCAT(skipwhite,SHIFT)(pos,data,this)) -static ptrdiff_t PIKE_XCONCAT(skipwhite,SHIFT)( ptrdiff_t pos,WCHAR *data, struct cpp *this) -{ - do - { - if(!WC_ISSPACE(data[pos])) - { - if (data[pos] == '\\') - { - if (data[pos+1] == '\n') - { - pos += 2; - PUTNL(); - this->current_line++; - continue; - } else if ((data[pos+1] == '\r') && - (data[pos+2] == '\n')) { - pos += 3; - PUTNL(); - this->current_line++; - continue; - } - } - break; - } - if(data[pos]=='\n') { PUTNL(); this->current_line++; } - pos++; - } while(1); - return pos; -} - - -/* Skips horizontal whitespace and escaped newlines. */ -#define SKIPSPACE() (pos=PIKE_XCONCAT(skipspace,SHIFT)(pos,data,this)) -static ptrdiff_t PIKE_XCONCAT(skipspace,SHIFT)( ptrdiff_t pos,WCHAR *data, struct cpp *this) -{ - do { - while (WC_ISSPACE(data[pos]) && data[pos]!='\n') { - pos++; - } - if (data[pos] == '\\') { - if (data[pos+1] == '\n') { - pos+=2; - } else if ((data[pos+1] == '\r') && - (data[pos+2] == '\n')) { - pos+=3; - } else { - break; - } - } else { - break; - } - PUTNL(); - this->current_line++; - } while (1); - return pos; -} - -/* Skips horizontal whitespace and escaped newlines, - * does not touch buffer. */ -#define SKIPSPACE_PRETEND() (pos=PIKE_XCONCAT(skipspace_p,SHIFT)(pos,data)) -static ptrdiff_t PIKE_XCONCAT(skipspace_p,SHIFT)( ptrdiff_t pos, WCHAR *data ) -{ - do - { - while (WC_ISSPACE(data[pos]) && data[pos]!='\n') { - pos++; - } - if (data[pos] == '\\') { - if (data[pos+1] == '\n') { - pos+=2; - } else if ((data[pos+1] == '\r') && - (data[pos+2] == '\n')) { - pos+=3; - } else { - break; - } - } else { - break; - } - } while (1); - return pos; -} -/* pos is assumed to be at the backslash. pos it at the last char in - * the escape afterwards. */ - - -#define READCHAR(C) (C=readchar(MKPCHARP(data,SHIFT),&pos,this)) - -/* At entry pos points past the start quote. - * At exit pos points past the end quote. - */ -#define READSTRING(nf) (pos=readstring(this,MKPCHARP(data,SHIFT),len,pos,&nf,0)) -#define READSTRING2(nf) (pos=readstring(this,MKPCHARP(data,SHIFT),len,pos,&nf,1)) -#define FIXSTRING(nf,outp) (pos=fixstring(this,MKPCHARP(data,SHIFT),len,pos,&nf,outp)) /* Gobble an identifier at the current position. */ #define GOBBLE_IDENTIFIER() \ ((WC_ISIDCHAR (data[pos]) || data[pos] == '\\') ? \ dmalloc_touch (struct pike_string *, gobble_identifier(this,MKPCHARP(data,SHIFT), &pos)) : NULL) -#if (SHIFT == 0) -void _STRCAT(char *str, int len, int flags,struct cpp *this) -{ - ptrdiff_t x; - if(OUTP()) - string_builder_binary_strcat(&this->buf, str, len); - else - for(x=0;x<len;x++) - if(str[x]=='\n') - string_builder_putchar(&this->buf, '\n'); -} - -#define PUSH_STRING_SHIFT(X,Y,Z,A) add_quoted_string(X,Y,Z,A) -#endif /* SHIFT == 0 */ - - static ptrdiff_t calcC(struct cpp *this, WCHAR *data, ptrdiff_t len, ptrdiff_t pos, int flags) { @@ -696,9 +522,6 @@ static ptrdiff_t calc8(struct cpp *this, WCHAR *data, ptrdiff_t len, while(1) { - static const WCHAR lsh_[] = { '<', '<' }; - static const WCHAR rsh_[] = { '>', '>' }; - CALC_DUMPPOS("inside calc8"); SKIPWHITE(); if(GOBBLEOP2(lsh_)) @@ -783,9 +606,6 @@ static ptrdiff_t calc7(struct cpp *this, WCHAR *data, ptrdiff_t len, while(1) { - static const WCHAR eq_[] = { '=', '=' }; - static const WCHAR ne_[] = { '!', '=' }; - CALC_DUMPPOS("inside calc7"); SKIPWHITE(); @@ -871,7 +691,6 @@ static ptrdiff_t calc4(struct cpp *this, WCHAR *data, ptrdiff_t len, static ptrdiff_t calc3(struct cpp *this, WCHAR *data, ptrdiff_t len, ptrdiff_t pos, int flags) { - static const WCHAR land_[] = { '&', '&' }; CALC_DUMPPOS("before calc3"); @@ -900,7 +719,6 @@ static ptrdiff_t calc3(struct cpp *this, WCHAR *data, ptrdiff_t len, static ptrdiff_t calc2(struct cpp *this, WCHAR *data, ptrdiff_t len, ptrdiff_t pos, int flags) { - static const WCHAR lor_[] = { '|', '|' }; CALC_DUMPPOS("before calc2"); @@ -984,10 +802,6 @@ static ptrdiff_t lower_cpp(struct cpp *this, int auto_convert, struct pike_string *charset) { - static const WCHAR string_recur_[] = - { 's', 't', 'r', 'i', 'n', 'g', '_', 'r', 'e', 'c', 'u', 'r' }; - static const WCHAR include_recur_[] = - { 'i', 'n', 'c', 'l', 'u', 'd', 'e', '_', 'r', 'e', 'c', 'u', 'r' }; ptrdiff_t pos, tmp, e; int include_mode; INT_TYPE first_line = this->current_line; @@ -1507,8 +1321,6 @@ static ptrdiff_t lower_cpp(struct cpp *this, { case 'l': { - static const WCHAR line_[] = { 'l', 'i', 'n', 'e' }; - if(WGOBBLE2(line_)) { /* FIXME: Why not use SKIPSPACE()? */ @@ -1577,8 +1389,6 @@ static ptrdiff_t lower_cpp(struct cpp *this, case 's': { - static const WCHAR string_[] = { 's', 't', 'r', 'i', 'n', 'g' }; - if(WGOBBLE2(string_)) { include_mode = 1; @@ -1594,10 +1404,6 @@ static ptrdiff_t lower_cpp(struct cpp *this, case 'i': /* include, if, ifdef */ { - static const WCHAR include_[] = { 'i', 'n', 'c', 'l', 'u', 'd', 'e' }; - static const WCHAR if_[] = { 'i', 'f' }; - static const WCHAR ifdef_[] = { 'i', 'f', 'd', 'e', 'f' }; - static const WCHAR ifndef_[] = { 'i', 'f', 'n', 'd', 'e', 'f' }; int recur = 0; if(WGOBBLE2(include_) || (recur = WGOBBLE2(include_recur_))) @@ -1944,12 +1750,6 @@ static ptrdiff_t lower_cpp(struct cpp *this, } case 'e': /* endif, else, elif, error */ { - static const WCHAR endif_[] = { 'e', 'n', 'd', 'i', 'f' }; - static const WCHAR else_[] = { 'e', 'l', 's', 'e' }; - static const WCHAR elseif_[] = { 'e', 'l', 's', 'e', 'i', 'f' }; - static const WCHAR elif_[] = { 'e', 'l', 'i', 'f' }; - static const WCHAR error_[] = { 'e', 'r', 'r', 'o', 'r' }; - if(WGOBBLE2(endif_)) { if(!(flags & CPP_EXPECT_ENDIF)) @@ -2040,7 +1840,6 @@ static ptrdiff_t lower_cpp(struct cpp *this, case 'd': /* define */ { - static const WCHAR define_[] = { 'd', 'e', 'f', 'i', 'n', 'e' }; if(WGOBBLE2(define_)) { @@ -2321,8 +2120,6 @@ concat_identifier: } case 'u': /* undefine */ { - static const WCHAR undef_[] = { 'u', 'n', 'd', 'e', 'f' }; - static const WCHAR undefine_[] = { 'u', 'n', 'd', 'e', 'f', 'i', 'n', 'e' }; /* NOTE: Reuses undefine_ for undef_ */ if(WGOBBLE2(undefine_) || WGOBBLE2(undef_)) @@ -2346,7 +2143,6 @@ concat_identifier: } case 'c': /* charset */ { - static const WCHAR charset_[] = { 'c', 'h', 'a', 'r', 's', 'e', 't' }; if (WGOBBLE2(charset_)) { ptrdiff_t p; @@ -2404,8 +2200,6 @@ concat_identifier: } case 'p': /* pragma */ { - static const WCHAR pragma_[] = { 'p', 'r', 'a', 'g', 'm', 'a' }; - static const WCHAR pike_[] = { 'p', 'i', 'k', 'e' }; if(WGOBBLE2(pragma_)) { @@ -2451,7 +2245,6 @@ concat_identifier: } case 'r': /* require */ { - static const WCHAR require_[] = { 'r', 'e', 'q', 'u', 'i', 'r', 'e' }; if(WGOBBLE2(require_)) { struct string_builder save, tmp; @@ -2491,8 +2284,6 @@ concat_identifier: } case 'w': /* warning */ { - static const WCHAR warning_[] = { 'w', 'a', 'r', 'n', 'i', 'n', 'g' }; - if(WGOBBLE2(warning_)) { ptrdiff_t foo; @@ -2548,13 +2339,10 @@ ADD_TO_BUFFER: */ #undef WCHAR -#undef WC_ISSPACE -#undef WC_ISIDCHAR #undef STRCAT #undef MAKE_BINARY_STRING #undef lower_cpp -#undef parse_esc_seq #undef calc #undef calc1