mirror of
https://github.com/mirror/tinycc.git
synced 2025-01-27 06:10:06 +08:00
tccpp: reorder some tokens
... and make future reordering possibly easier
related to 9a6ee577f6
This commit is contained in:
parent
1075087241
commit
0ac8aaab1b
33
tcc.h
33
tcc.h
@ -783,35 +783,38 @@ struct TCCState {
|
||||
|
||||
#define TOK_LAND 0xa0
|
||||
#define TOK_LOR 0xa1
|
||||
|
||||
#define TOK_DEC 0xa2
|
||||
#define TOK_MID 0xa3 /* inc/dec, to void constant */
|
||||
#define TOK_INC 0xa4
|
||||
#define TOK_UDIV 0xb0 /* unsigned division */
|
||||
#define TOK_UMOD 0xb1 /* unsigned modulo */
|
||||
#define TOK_PDIV 0xb2 /* fast division with undefined rounding for pointers */
|
||||
#define TOK_CINT 0xb3 /* number in tokc */
|
||||
#define TOK_CCHAR 0xb4 /* char constant in tokc */
|
||||
#define TOK_STR 0xb5 /* pointer to string in tokc */
|
||||
#define TOK_TWOSHARPS 0xb6 /* ## preprocessing token */
|
||||
#define TOK_LCHAR 0xb7
|
||||
#define TOK_LSTR 0xb8
|
||||
#define TOK_CFLOAT 0xb9 /* float constant */
|
||||
#define TOK_LINENUM 0xba /* line number info */
|
||||
#define TOK_CDOUBLE 0xc0 /* double constant */
|
||||
#define TOK_CLDOUBLE 0xc1 /* long double constant */
|
||||
|
||||
/* tokens that carry values (in additional token string space / tokc) --> */
|
||||
#define TOK_CCHAR 0xb3 /* char constant in tokc */
|
||||
#define TOK_LCHAR 0xb4
|
||||
#define TOK_CINT 0xb5 /* number in tokc */
|
||||
#define TOK_CUINT 0xb6 /* unsigned int constant */
|
||||
#define TOK_CLLONG 0xb7 /* long long constant */
|
||||
#define TOK_CULLONG 0xb8 /* unsigned long long constant */
|
||||
#define TOK_STR 0xb9 /* pointer to string in tokc */
|
||||
#define TOK_LSTR 0xba
|
||||
#define TOK_CFLOAT 0xbb /* float constant */
|
||||
#define TOK_CDOUBLE 0xbc /* double constant */
|
||||
#define TOK_CLDOUBLE 0xbd /* long double constant */
|
||||
#define TOK_PPNUM 0xbe /* preprocessor number */
|
||||
#define TOK_LINENUM 0xbf /* line number info */
|
||||
/* <-- */
|
||||
|
||||
#define TOK_TWOSHARPS 0xc0 /* ## preprocessing token */
|
||||
#define TOK_UMULL 0xc2 /* unsigned 32x32 -> 64 mul */
|
||||
#define TOK_ADDC1 0xc3 /* add with carry generation */
|
||||
#define TOK_ADDC2 0xc4 /* add with carry use */
|
||||
#define TOK_SUBC1 0xc5 /* add with carry generation */
|
||||
#define TOK_SUBC2 0xc6 /* add with carry use */
|
||||
#define TOK_CUINT 0xc8 /* unsigned int constant */
|
||||
#define TOK_CLLONG 0xc9 /* long long constant */
|
||||
#define TOK_CULLONG 0xca /* unsigned long long constant */
|
||||
#define TOK_ARROW 0xcb
|
||||
#define TOK_DOTS 0xcc /* three dots */
|
||||
#define TOK_SHR 0xcd /* unsigned shift right */
|
||||
#define TOK_PPNUM 0xce /* preprocessor number */
|
||||
#define TOK_NOSUBST 0xcf /* means following token has already been pp'd */
|
||||
|
||||
#define TOK_SHL 0x01 /* shift left */
|
||||
|
44
tccpp.c
44
tccpp.c
@ -70,8 +70,33 @@ static const char tcc_keywords[] =
|
||||
|
||||
/* WARNING: the content of this string encodes token numbers */
|
||||
static const unsigned char tok_two_chars[] =
|
||||
/* outdated -- gr
|
||||
"<=\236>=\235!=\225&&\240||\241++\244--\242==\224<<\1>>\2+=\253"
|
||||
"-=\255*=\252/=\257%=\245&=\246^=\336|=\374->\313..\250##\266";
|
||||
*/{
|
||||
'<','=', TOK_LE,
|
||||
'>','=', TOK_GE,
|
||||
'!','=', TOK_NE,
|
||||
'&','&', TOK_LAND,
|
||||
'|','|', TOK_LOR,
|
||||
'+','+', TOK_INC,
|
||||
'-','-', TOK_DEC,
|
||||
'=','=', TOK_EQ,
|
||||
'<','<', TOK_SHL,
|
||||
'>','>', TOK_SHR,
|
||||
'+','=', TOK_A_ADD,
|
||||
'-','=', TOK_A_SUB,
|
||||
'*','=', TOK_A_MUL,
|
||||
'/','=', TOK_A_DIV,
|
||||
'%','=', TOK_A_MOD,
|
||||
'&','=', TOK_A_AND,
|
||||
'^','=', TOK_A_XOR,
|
||||
'|','=', TOK_A_OR,
|
||||
'-','>', TOK_ARROW,
|
||||
'.','.', 0xa8, // C++ token ?
|
||||
'#','#', TOK_TWOSHARPS,
|
||||
0
|
||||
};
|
||||
|
||||
struct macro_level {
|
||||
struct macro_level *prev;
|
||||
@ -255,21 +280,19 @@ ST_FUNC char *get_tok_str(int v, CValue *cv)
|
||||
static char buf[STRING_MAX_SIZE + 1];
|
||||
static CString cstr_buf;
|
||||
CString *cstr;
|
||||
CValue cval;
|
||||
char *p;
|
||||
int i, len;
|
||||
|
||||
if (!cv) {
|
||||
cval.ull = 0;
|
||||
cv = &cval;
|
||||
}
|
||||
|
||||
/* NOTE: to go faster, we give a fixed buffer for small strings */
|
||||
cstr_reset(&cstr_buf);
|
||||
cstr_buf.data = buf;
|
||||
cstr_buf.size_allocated = sizeof(buf);
|
||||
p = buf;
|
||||
|
||||
/* just an explanation, should never happen:
|
||||
if (v <= TOK_LINENUM && v >= TOK_CINT && cv == NULL)
|
||||
tcc_error("internal error: get_tok_str"); */
|
||||
|
||||
switch(v) {
|
||||
case TOK_CINT:
|
||||
case TOK_CUINT:
|
||||
@ -317,6 +340,15 @@ ST_FUNC char *get_tok_str(int v, CValue *cv)
|
||||
cstr_ccat(&cstr_buf, '\"');
|
||||
cstr_ccat(&cstr_buf, '\0');
|
||||
break;
|
||||
|
||||
case TOK_CFLOAT:
|
||||
case TOK_CDOUBLE:
|
||||
case TOK_CLDOUBLE:
|
||||
case TOK_LINENUM:
|
||||
return NULL; /* should not happen */
|
||||
|
||||
/* above tokens have value, the ones below don't */
|
||||
|
||||
case TOK_LT:
|
||||
v = '<';
|
||||
goto addv;
|
||||
|
Loading…
Reference in New Issue
Block a user