X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Faltlex.c;h=52532248fe88df3c0bf6aba7248a2e055c5a712a;hb=5a1d5e778e85664f4e6657019348b4756b16eacb;hp=6572164eebf6ccb8b4038f5af620c31da4f65816;hpb=c9e40278469aa9b26090f1c3f03422d19161b669;p=fw%2Fsdcc diff --git a/src/altlex.c b/src/altlex.c index 6572164e..52532248 100644 --- a/src/altlex.c +++ b/src/altlex.c @@ -10,36 +10,36 @@ #define DUMP_OUTPUT 0 /* Right. What are the parts of the C stream? From SDCC.lex: - D = [0..9] digits - L = [a..z A..Z _] alphanumerics and _ - H = [a..f A..F 0-9] Hex digits - E = [eE+-0-9] Digits in a float - FS = [fFlL] Specifiers for a float - IS = [uUlL] Specifiers for a int - - L[LD]* A 'token' - cant think of a good name - Check tokens against the reserved words. - If match - return the token id. - else - If in the typedef table, do stuff... - Blah. See check_type() - 0[xX]{H}+ Hex number - PENDING: specifiers - 0{D}+ Octal number - PENDING: specifiers - {D}+ Decimal - PENDING: specifiers - Floats PENDING - + D = [0..9] digits + L = [a..z A..Z _] alphanumerics and _ + H = [a..f A..F 0-9] Hex digits + E = [eE+-0-9] Digits in a float + FS = [fFlL] Specifiers for a float + IS = [uUlL] Specifiers for a int + + L[LD]* A 'token' - cant think of a good name + Check tokens against the reserved words. + If match + return the token id. + else + If in the typedef table, do stuff... + Blah. See check_type() + 0[xX]{H}+ Hex number - PENDING: specifiers + 0{D}+ Octal number - PENDING: specifiers + {D}+ Decimal - PENDING: specifiers + Floats PENDING + Exceptions: - Comment start Strip until end of comment. - ... Ellipses + Comment start Strip until end of comment. + ... Ellipses So the inputs are: - Skip whitespace - switch class - L Try to read a token - D Try to read a number - Punct Try to read punct -*/ + Skip whitespace + switch class + L Try to read a token + D Try to read a number + Punct Try to read punct + */ extern int fatalError; extern int lineno; @@ -47,7 +47,7 @@ extern char *filename; FILE *yyin; -int yylineno; +int mylineno; char *currFname; char *yytext; @@ -58,445 +58,548 @@ static int end_of_file; #ifdef __GNUC__ #define INLINE inline #else -#define INLINE +#define INLINE #endif #define ERRSINK stderr -static void error(const char *sz, ...) +static void +error (const char *sz,...) { - va_list ap; - fatalError++; - - if (filename && lineno) { - fprintf(ERRSINK, "%s(%d):",filename,lineno); + va_list ap; + fatalError++; + + if (filename && lineno) + { + fprintf (ERRSINK, "%s(%d):", filename, lineno); } - fprintf(ERRSINK, "error *** "); - va_start(ap, sz); - vfprintf(ERRSINK, sz, ap); - va_end(ap); - fprintf(ERRSINK, "\n"); - fflush(ERRSINK); + fprintf (ERRSINK, "error *** "); + va_start (ap, sz); + vfprintf (ERRSINK, sz, ap); + va_end (ap); + fprintf (ERRSINK, "\n"); + fflush (ERRSINK); } -static int underflow(void) +static int +underflow (void) { - linelen = fread(linebuf, 1, sizeof(linebuf), yyin); - if (linelen <= 0) - return EOF; - linepos = 0; - return linebuf[linepos++]; + linelen = fread (linebuf, 1, sizeof (linebuf), yyin); + if (linelen <= 0) + return EOF; + linepos = 0; + return linebuf[linepos++]; } -static int INLINE ygetc(void) +static int INLINE +ygetc (void) { - if (linepos < linelen) - return linebuf[linepos++]; - else - return underflow(); + if (linepos < linelen) + return linebuf[linepos++]; + else + return underflow (); }; -static int INLINE yungetc(int c) +static int INLINE +yungetc (int c) { - linebuf[--linepos] = c; - return 0; + linebuf[--linepos] = c; + return 0; } #define GETC() ygetc() #define UNGETC(_a) yungetc(_a) -//#define GETC() fgetc(yyin); -//#define UNGETC(_a) ungetc(_a, yyin) +//#define GETC() fgetc(yyin); +//#define UNGETC(_a) ungetc(_a, yyin) #define ISL(_a) (isalnum(_a) || _a == '_') #define ISALNUM(_a) isalnum(_a) #define ISHEX(_a) isxdigit(_a) -static char *stringLiteral (void) +static char * +stringLiteral (void) { - static char line[1000]; - int ch; - char *str = line; - - *str++ = '\"' ; - /* put into the buffer till we hit the */ - /* first \" */ - while (1) { - - ch = GETC(); - if (!ch) break ; /* end of input */ - /* if it is a \ then everything allowed */ - if (ch == '\\') { - *str++ = ch ; /* backslash in place */ - *str++ = GETC() ; /* following char in place */ - continue ; /* carry on */ + static char line[1000]; + int ch; + char *str = line; + + *str++ = '\"'; + /* put into the buffer till we hit the */ + /* first \" */ + while (1) + { + + ch = GETC (); + if (!ch) + break; /* end of input */ + /* if it is a \ then everything allowed */ + if (ch == '\\') + { + *str++ = ch; /* backslash in place */ + *str++ = GETC (); /* following char in place */ + continue; /* carry on */ } - - /* if new line we have a new line break */ - if (ch == '\n') break ; - - /* if this is a quote then we have work to do */ - /* find the next non whitespace character */ - /* if that is a double quote then carry on */ - if (ch == '\"') { - - while ((ch = GETC()) && isspace(ch)) ; - if (!ch) break ; - if (ch != '\"') { - UNGETC(ch) ; - break ; + + /* if new line we have a new line break */ + if (ch == '\n') + break; + + /* if this is a quote then we have work to do */ + /* find the next non whitespace character */ + /* if that is a double quote then carry on */ + if (ch == '\"') + { + + while ((ch = GETC ()) && isspace (ch)); + if (!ch) + break; + if (ch != '\"') + { + UNGETC (ch); + break; } - - continue ; - } - *str++ = ch; - } - *str++ = '\"' ; - *str = '\0'; - return line; + + continue; + } + *str++ = ch; + } + *str++ = '\"'; + *str = '\0'; + return line; } -static void discard_comments(int type) +static void +discard_comments (int type) { - int c; - if (type == '*') { - do { - c = GETC(); - if (c == '*') { - c = GETC(); - if (c == '/') - return; - } - else if (c == EOF) + int c; + if (type == '*') + { + do + { + c = GETC (); + if (c == '*') + { + c = GETC (); + if (c == '/') return; - } while (1); + } + else if (c == EOF) + return; + } + while (1); } - else if (type == '/') { - do { - c = GETC(); - } while (c != '\n' && c != EOF); + else if (type == '/') + { + do + { + c = GETC (); + } + while (c != '\n' && c != EOF); } - else { - assert(0); + else + { + assert (0); } } /* will return 1 if the string is a part of a target specific keyword */ -static INLINE int isTargetKeyword(const char *s) +static INLINE int +isTargetKeyword (const char *s) { - int i; - - if (port->keywords == NULL) - return 0; - for ( i = 0 ; port->keywords[i] ; i++ ) { - if (strcmp(port->keywords[i],s) == 0) - return 1; - } - + int i; + + if (port->keywords == NULL) return 0; + for (i = 0; port->keywords[i]; i++) + { + if (strcmp (port->keywords[i], s) == 0) + return 1; + } + + return 0; } -static INLINE int check_token(const char *sz) +static INLINE int +check_token (const char *sz) { - const struct reserved_words *p; - p = is_reserved_word(sz, strlen(sz)); - if (p) { - if (!p->is_special || isTargetKeyword(sz)) - return p->token; + const struct reserved_words *p; + p = is_reserved_word (sz, strlen (sz)); + if (p) + { + if (!p->is_special || isTargetKeyword (sz)) + return p->token; } - /* check if it is in the typedef table */ - if (findSym(TypedefTab,NULL,sz)) { - strcpy(yylval.yychar,sz); - return TYPE_NAME; + /* check if it is in the typedef table */ + if (findSym (TypedefTab, NULL, sz)) + { + strncpyz (yylval.yychar, sz, sizeof(yylval.yychar)); + return TYPE_NAME; } - else { - strcpy (yylval.yychar,sz); - return IDENTIFIER; + else + { + strncpyz (yylval.yychar, sz, sizeof(yylval.yychar)); + return IDENTIFIER; } } -static void handle_pragma(void) +static void +handle_pragma (void) { - char line[128], *p; - int c; - - c = GETC(); - while (c == '\t' || c == ' ') - c = GETC(); - p = line; - while (!isspace(c)) { - *p++ = c; - c = GETC(); + char line[128], *p; + int c; + + c = GETC (); + while (c == '\t' || c == ' ') + c = GETC (); + p = line; + while (!isspace (c)) + { + *p++ = c; + c = GETC (); } - *p = '\0'; - if (line[0] == '\0') - error("Missing argument to pragma"); - else { - /* First give the port a chance */ - if (port->process_pragma && !port->process_pragma(line)) - return; - /* PENDING: all the SDCC shared pragmas */ - /* Nothing handled it */ - error("Unrecognised #pragma %s", line); + *p = '\0'; + if (line[0] == '\0') + error ("Missing argument to pragma"); + else + { + /* First give the port a chance */ + if (port->process_pragma && !port->process_pragma (line)) + return; + /* PENDING: all the SDCC shared pragmas */ + /* Nothing handled it */ + error ("Unrecognised #pragma %s", line); } } -static void handle_line(void) +static void +handle_line (void) { - int c; - char line[128], *p; - - c = GETC(); - while (c == '\t' || c == ' ') - c = GETC(); - p = line; - while (isdigit(c)) { - *p++ = c; - c = GETC(); + int c; + char line[128], *p; + + c = GETC (); + while (c == '\t' || c == ' ') + c = GETC (); + p = line; + while (isdigit (c)) + { + *p++ = c; + c = GETC (); } - *p = '\0'; - if (line[0] == '\0') - error("Error in number in #line"); - /* This is weird but cpp seems to add an extra three to the line no */ - yylineno = atoi(line) - 3; - lineno = yylineno; - /* Fetch the filename if there is one */ - while (c == '\t' || c == ' ') - c = GETC(); - if (c == '\"') { - p = line; - c = GETC(); - while (c != '\"' && c != EOF && c != '\n') { - *p++ = c; - c = GETC(); + *p = '\0'; + if (line[0] == '\0') + error ("Error in number in #line"); + /* This is weird but cpp seems to add an extra three to the line no */ + mylineno = atoi (line) - 3; + lineno = mylineno; + /* Fetch the filename if there is one */ + while (c == '\t' || c == ' ') + c = GETC (); + if (c == '\"') + { + p = line; + c = GETC (); + while (c != '\"' && c != EOF && c != '\n') + { + *p++ = c; + c = GETC (); } - if (c == '\"') { - *p = '\0'; - currFname = gc_strdup(line); + if (c == '\"') + { + *p = '\0'; + currFname = Safe_strdup (line); } - filename = currFname; + filename = currFname; } } -static INLINE void invalid_directive(void) +static INLINE void +invalid_directive (void) { - error("Invalid directive"); + error ("Invalid directive"); } -static INLINE int check_newline(void) +static INLINE int +check_newline (void) { - int c; - yylineno++; - lineno = yylineno; - - /* Skip any leading white space */ - c = GETC(); - while (c == '\t' || c == ' ') - c = GETC(); - /* Were only interested in #something */ - if (c != '#') - return c; - c = GETC(); - while (c == '\t' || c == ' ') - c = GETC(); - /* The text in the stream is the type of directive */ - switch (c) { + int c; + mylineno++; + lineno = mylineno; + + /* Skip any leading white space */ + c = GETC (); + while (c == '\t' || c == ' ') + c = GETC (); + /* Were only interested in #something */ + if (c != '#') + return c; + c = GETC (); + while (c == '\t' || c == ' ') + c = GETC (); + /* The text in the stream is the type of directive */ + switch (c) + { case 'l': - /* Start of line? */ - if (GETC() == 'i' && GETC() == 'n' && GETC() == 'e') { - c = GETC(); - if (c == '\t' || c == ' ') - handle_line(); - else - invalid_directive(); + /* Start of line? */ + if (GETC () == 'i' && GETC () == 'n' && GETC () == 'e') + { + c = GETC (); + if (c == '\t' || c == ' ') + handle_line (); + else + invalid_directive (); } - else - invalid_directive(); - break; + else + invalid_directive (); + break; case 'p': - /* Start of pragma? */ - if (GETC() == 'r' && GETC() == 'a' && GETC() == 'g' && - GETC() == 'm' && GETC() == 'a') { - c = GETC(); - if (c == '\t' || c == ' ') - handle_pragma(); - else - invalid_directive(); + /* Start of pragma? */ + if (GETC () == 'r' && GETC () == 'a' && GETC () == 'g' && + GETC () == 'm' && GETC () == 'a') + { + c = GETC (); + if (c == '\t' || c == ' ') + handle_pragma (); + else + invalid_directive (); } - else - invalid_directive(); - break; + else + invalid_directive (); + break; default: - invalid_directive(); + invalid_directive (); } - /* Discard from here until the start of the next line */ - while (c != '\n' && c != EOF) - c = GETC(); - return c; + /* Discard from here until the start of the next line */ + while (c != '\n' && c != EOF) + c = GETC (); + return c; } -static int skip_whitespace(int c) +static int +skip_whitespace (int c) { - while (1) { - switch (c) { + while (1) + { + switch (c) + { case ' ': case '\t': case '\f': case '\v': case '\b': case '\r': - c = GETC(); - break; + c = GETC (); + break; case '\n': - c = check_newline(); + c = check_newline (); default: - return c; + return c; } } } -void yyerror(const char *s) +void +yyerror (const char *s) { - if (end_of_file) - error("%s at end of of input", s); - else if (yytext[0] == '\0') - error("%s at null character", s); - else if (yytext[0] == '"') - error("%s before string constant", s); - else if (yytext[0] == '\'') - error("%s before character constant", s); - else - error("%s before %s", s, yytext); + if (end_of_file) + error ("%s at end of of input", s); + else if (yytext[0] == '\0') + error ("%s at null character", s); + else if (yytext[0] == '"') + error ("%s before string constant", s); + else if (yytext[0] == '\'') + error ("%s before character constant", s); + else + error ("%s before %s", s, yytext); } -static int _yylex(void) +static int +_yylex (void) { - int c; - static char line[128]; - char *p; + int c; + static char line[128]; + char *p; - yytext = line; + yytext = line; - c = GETC(); - while (1) { - switch (c) { + c = GETC (); + while (1) + { + switch (c) + { case ' ': case '\t': case '\f': case '\v': case '\b': - /* Skip whitespace */ - c = GETC(); - break; + /* Skip whitespace */ + c = GETC (); + break; case '\r': case '\n': - c = skip_whitespace(c); - break; + c = skip_whitespace (c); + break; case '#': - UNGETC(c); - c = check_newline(); - break; + UNGETC (c); + c = check_newline (); + break; default: - goto past_ws; + goto past_ws; } } - past_ws: - /* Handle comments first */ - if (c == '/') { - int c2 = GETC(); - if (c2 == '*' || c2 == '/') { - discard_comments(c2); - c = GETC(); +past_ws: + /* Handle comments first */ + if (c == '/') + { + int c2 = GETC (); + if (c2 == '*' || c2 == '/') + { + discard_comments (c2); + c = GETC (); } - else - UNGETC(c2); + else + UNGETC (c2); } - switch (c) { + switch (c) + { case EOF: - end_of_file = TRUE; - line[0] = '\0'; - return 0; - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': + end_of_file = TRUE; + line[0] = '\0'; + return 0; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': - /* Start of a token. Parse. */ - p = line; - *p++ = c; - c = GETC(); - while (ISL(c)) { - *p++ = c; - c = GETC(); + /* Start of a token. Parse. */ + p = line; + *p++ = c; + c = GETC (); + while (ISL (c)) + { + *p++ = c; + c = GETC (); } - *p = '\0'; - UNGETC(c); - return check_token(line); - case '0': case '1': - case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - p = line; - *p++ = c; - c = GETC(); - if (c == 'x' || c == 'X') { - *p++ = c; - c = GETC(); + *p = '\0'; + UNGETC (c); + return check_token (line); + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + p = line; + *p++ = c; + c = GETC (); + if (c == 'x' || c == 'X') + { + *p++ = c; + c = GETC (); } - while (ISHEX(c)) { - *p++ = c; - c = GETC(); + while (ISHEX (c)) + { + *p++ = c; + c = GETC (); } - if (c == 'U' || c == 'u' || c == 'L' || c == 'l') { - *p++ = c; - c = GETC(); + if (c == 'U' || c == 'u' || c == 'L' || c == 'l') + { + *p++ = c; + c = GETC (); } - if (c == 'U' || c == 'u' || c == 'L' || c == 'l') { - *p++ = c; - c = GETC(); + if (c == 'U' || c == 'u' || c == 'L' || c == 'l') + { + *p++ = c; + c = GETC (); } - *p = '\0'; - UNGETC(c); - yylval.val = constVal(line); - return CONSTANT; + *p = '\0'; + UNGETC (c); + yylval.val = constVal (line); + return CONSTANT; case '\"': - /* A string */ - p = stringLiteral(); - yylval.val = strVal(p); - return(STRING_LITERAL); + /* A string */ + p = stringLiteral (); + yylval.val = strVal (p); + return (STRING_LITERAL); case '\'': - /* Possible formats: - ['\n', '\\', '\'', '\"'...] - ['a'...] - */ - p = line; - *p++ = c; - c = GETC(); - if (c == '\\') { - *p++ = c; - c = GETC(); - /* Fall through */ + /* Possible formats: + ['\n', '\\', '\'', '\"'...] + ['a'...] + */ + p = line; + *p++ = c; + c = GETC (); + if (c == '\\') + { + *p++ = c; + c = GETC (); + /* Fall through */ } - *p++ = c; - c = GETC(); - *p++ = c; - *p = '\0'; - if (c != '\'') { - error("Unrecognised character constant %s", line); + *p++ = c; + c = GETC (); + *p++ = c; + *p = '\0'; + if (c != '\'') + { + error ("Unrecognised character constant %s", line); } - yylval.val = charVal(line); - return CONSTANT; + yylval.val = charVal (line); + return CONSTANT; case '=': case '&': case '!': @@ -508,7 +611,8 @@ static int _yylex(void) case '<': case '>': case '^': - case '|': { + case '|': + { /* Cases which can be compounds */ /* The types and classes of composites are: >>= <<= @@ -523,440 +627,593 @@ static int _yylex(void) 3. Followed by an equals 4. Be a '->' 5. Be by itself - */ - int next = GETC(); + */ + int next = GETC (); /* Class 1 and 2 */ - if (next == c) { - next = GETC(); + if (next == c) + { + next = GETC (); /* Class 1 */ - if (next == '=') { - switch (c) { - case '>': // >>= + if (next == '=') + { + switch (c) + { + case '>': // >>= + yylval.yyint = RIGHT_ASSIGN; return RIGHT_ASSIGN; - case '<': // <<= + case '<': // <<= + yylval.yyint = LEFT_ASSIGN; return LEFT_ASSIGN; - default: - error("Unrecognised token %c%c=", c, c); - } - } - else { + default: + error ("Unrecognised token %c%c=", c, c); + } + } + else + { /* Push the next char back on and find the class */ - UNGETC(next); + UNGETC (next); /* Case 2 */ - switch (c) { - case '>': // >> + switch (c) + { + case '>': // >> + return RIGHT_OP; - case '<': // << + case '<': // << + return LEFT_OP; - case '+': + case '+': return INC_OP; - case '-': + case '-': return DEC_OP; - case '&': + case '&': return AND_OP; - case '|': + case '|': return OR_OP; - case '=': + case '=': return EQ_OP; - default: - error("Unrecognised token %c%c", c, c); - } - } - } + default: + error ("Unrecognised token %c%c", c, c); + } + } + } /* Case 3 */ - else if (next == '=') { + else if (next == '=') + { int result = 0; - switch (c) { - case '+': - result = ADD_ASSIGN; break; - case '-': - result = SUB_ASSIGN; break; - case '*': - result = MUL_ASSIGN; break; - case '/': - result = DIV_ASSIGN; break; - case '%': - result = MOD_ASSIGN; break; - case '&': - result = AND_ASSIGN; break; - case '^': - result = XOR_ASSIGN; break; - case '|': - result = OR_ASSIGN; break; - case '<': - result = LE_OP; break; - case '>': - result = GE_OP; break; - case '!': - result = NE_OP; break; - default: - error("Unrecognised token %c=", c); - } - if (result) { + switch (c) + { + case '+': + result = ADD_ASSIGN; + break; + case '-': + result = SUB_ASSIGN; + break; + case '*': + result = MUL_ASSIGN; + break; + case '/': + result = DIV_ASSIGN; + break; + case '%': + result = MOD_ASSIGN; + break; + case '&': + result = AND_ASSIGN; + break; + case '^': + result = XOR_ASSIGN; + break; + case '|': + result = OR_ASSIGN; + break; + case '<': + result = LE_OP; + break; + case '>': + result = GE_OP; + break; + case '!': + result = NE_OP; + break; + default: + error ("Unrecognised token %c=", c); + } + if (result) + { yylval.yyint = result; return result; - } - } + } + } /* Case 4 */ - else if (c == '-' && next == '>') { + else if (c == '-' && next == '>') + { return PTR_OP; - } + } /* Case 5 */ - else { - UNGETC(next); + else + { + UNGETC (next); return c; - } + } break; - } + } case '{': - NestLevel++; - return c; + NestLevel++; + return c; case '}': - NestLevel--; - return c; + NestLevel--; + return c; case '.': - c = GETC(); - if (c == '.') { - c = GETC(); - if (c == '.') { - return VAR_ARGS; + c = GETC (); + if (c == '.') + { + c = GETC (); + if (c == '.') + { + return VAR_ARGS; } } - UNGETC(c); - return '.'; - case '[': case ']': - return c; + UNGETC (c); + return '.'; + case '[': + case ']': + return c; case ',': case ':': - case '(': case ')': + case '(': + case ')': case '~': case '?': case ';': - /* Special characters that cant be part of a composite */ - return c; + /* Special characters that cant be part of a composite */ + return c; default: - error("Unhandled character %c", c); + error ("Unhandled character %c", c); } - return 0; + return 0; } #define ENTRY(_a) case (_a): printf(#_a); break; -int yylex(void) +int +yylex (void) { - int ret = _yylex(); + int ret = _yylex (); #if DUMP_OUTPUT - static int lastpos = 0; - char tmp; - - printf("Returning "); - switch (ret) { - /* Wrapper */ - ENTRY(IDENTIFIER); - ENTRY(TYPE_NAME); - ENTRY(CONSTANT); - ENTRY(STRING_LITERAL); - ENTRY(SIZEOF); - ENTRY(PTR_OP); - ENTRY(INC_OP); - ENTRY(DEC_OP); - ENTRY(LEFT_OP); - ENTRY(RIGHT_OP); - ENTRY(LE_OP); - ENTRY(GE_OP); - ENTRY(EQ_OP); - ENTRY(NE_OP); - ENTRY(AND_OP); - ENTRY(OR_OP); - ENTRY(MUL_ASSIGN); - ENTRY(DIV_ASSIGN); - ENTRY(MOD_ASSIGN); - ENTRY(ADD_ASSIGN); - ENTRY(SUB_ASSIGN); - ENTRY(LEFT_ASSIGN); - ENTRY(RIGHT_ASSIGN); - ENTRY(AND_ASSIGN); - ENTRY(XOR_ASSIGN); - ENTRY(OR_ASSIGN); - ENTRY(TYPEDEF); - ENTRY(EXTERN); - ENTRY(STATIC); - ENTRY(AUTO); - ENTRY(REGISTER); - ENTRY(CODE); - ENTRY(EEPROM); - ENTRY(INTERRUPT); - ENTRY(SFR); - ENTRY(AT); - ENTRY(SBIT); - ENTRY(REENTRANT); - ENTRY(USING); - ENTRY(XDATA); - ENTRY(DATA); - ENTRY(IDATA); - ENTRY(PDATA); - ENTRY(VAR_ARGS); - ENTRY(CRITICAL); - ENTRY(NONBANKED); - ENTRY(BANKED); - ENTRY(CHAR); - ENTRY(SHORT); - ENTRY(INT); - ENTRY(LONG); - ENTRY(SIGNED); - ENTRY(UNSIGNED); - ENTRY(FLOAT); - ENTRY(DOUBLE); - ENTRY(CONST); - ENTRY(VOLATILE); - ENTRY(VOID); - ENTRY(BIT); - ENTRY(STRUCT); - ENTRY(UNION); - ENTRY(ENUM); - ENTRY(ELIPSIS); - ENTRY(RANGE); - ENTRY(FAR); - ENTRY(_XDATA); - ENTRY(_CODE); - ENTRY(_GENERIC); - ENTRY(_NEAR); - ENTRY(_PDATA); - ENTRY(_IDATA); - ENTRY(_EEPROM); - ENTRY(CASE); - ENTRY(DEFAULT); - ENTRY(IF); - ENTRY(ELSE); - ENTRY(SWITCH); - ENTRY(WHILE); - ENTRY(DO); - ENTRY(FOR); - ENTRY(GOTO); - ENTRY(CONTINUE); - ENTRY(BREAK); - ENTRY(RETURN); - ENTRY(INLINEASM); - ENTRY(IFX); - ENTRY(ADDRESS_OF); - ENTRY(GET_VALUE_AT_ADDRESS); - ENTRY(SPIL); - ENTRY(UNSPIL); - ENTRY(GETHBIT); - ENTRY(BITWISEAND); - ENTRY(UNARYMINUS); - ENTRY(IPUSH); - ENTRY(IPOP); - ENTRY(PCALL); - ENTRY(ENDFUNCTION); - ENTRY(JUMPTABLE); - ENTRY(RRC); - ENTRY(RLC); - ENTRY(CAST); - ENTRY(CALL); - ENTRY(PARAM); - ENTRY(NULLOP); - ENTRY(BLOCK); - ENTRY(LABEL); - ENTRY(RECEIVE); - ENTRY(SEND); + static int lastpos = 0; + char tmp; + + printf ("Returning "); + switch (ret) + { + /* Wrapper */ + ENTRY (IDENTIFIER); + ENTRY (TYPE_NAME); + ENTRY (CONSTANT); + ENTRY (STRING_LITERAL); + ENTRY (SIZEOF); + ENTRY (PTR_OP); + ENTRY (INC_OP); + ENTRY (DEC_OP); + ENTRY (LEFT_OP); + ENTRY (RIGHT_OP); + ENTRY (LE_OP); + ENTRY (GE_OP); + ENTRY (EQ_OP); + ENTRY (NE_OP); + ENTRY (AND_OP); + ENTRY (OR_OP); + ENTRY (MUL_ASSIGN); + ENTRY (DIV_ASSIGN); + ENTRY (MOD_ASSIGN); + ENTRY (ADD_ASSIGN); + ENTRY (SUB_ASSIGN); + ENTRY (LEFT_ASSIGN); + ENTRY (RIGHT_ASSIGN); + ENTRY (AND_ASSIGN); + ENTRY (XOR_ASSIGN); + ENTRY (OR_ASSIGN); + ENTRY (TYPEDEF); + ENTRY (EXTERN); + ENTRY (STATIC); + ENTRY (AUTO); + ENTRY (REGISTER); + ENTRY (CODE); + ENTRY (EEPROM); + ENTRY (INTERRUPT); + ENTRY (SFR); + ENTRY (AT); + ENTRY (SBIT); + ENTRY (REENTRANT); + ENTRY (USING); + ENTRY (XDATA); + ENTRY (DATA); + ENTRY (IDATA); + ENTRY (PDATA); + ENTRY (VAR_ARGS); + ENTRY (CRITICAL); + ENTRY (NONBANKED); + ENTRY (BANKED); + ENTRY (CHAR); + ENTRY (SHORT); + ENTRY (INT); + ENTRY (LONG); + ENTRY (SIGNED); + ENTRY (UNSIGNED); + ENTRY (FLOAT); + ENTRY (FIXED16X16); + ENTRY (DOUBLE); + ENTRY (CONST); + ENTRY (VOLATILE); + ENTRY (VOID); + ENTRY (BIT); + ENTRY (STRUCT); + ENTRY (UNION); + ENTRY (ENUM); + ENTRY (ELIPSIS); + ENTRY (RANGE); + ENTRY (FAR); + ENTRY (_XDATA); + ENTRY (_CODE); + ENTRY (_GENERIC); + ENTRY (_NEAR); + ENTRY (_PDATA); + ENTRY (_IDATA); + ENTRY (_EEPROM); + ENTRY (CASE); + ENTRY (DEFAULT); + ENTRY (IF); + ENTRY (ELSE); + ENTRY (SWITCH); + ENTRY (WHILE); + ENTRY (DO); + ENTRY (FOR); + ENTRY (GOTO); + ENTRY (CONTINUE); + ENTRY (BREAK); + ENTRY (RETURN); + ENTRY (INLINEASM); + ENTRY (IFX); + ENTRY (ADDRESS_OF); + ENTRY (GET_VALUE_AT_ADDRESS); + ENTRY (SPIL); + ENTRY (UNSPIL); + ENTRY (GETHBIT); + ENTRY (BITWISEAND); + ENTRY (UNARYMINUS); + ENTRY (IPUSH); + ENTRY (IPOP); + ENTRY (PCALL); + ENTRY (ENDFUNCTION); + ENTRY (JUMPTABLE); + ENTRY (RRC); + ENTRY (RLC); + ENTRY (CAST); + ENTRY (CALL); + ENTRY (PARAM); + ENTRY (NULLOP); + ENTRY (BLOCK); + ENTRY (LABEL); + ENTRY (RECEIVE); + ENTRY (SEND); default: - printf("default: %c", ret); + printf ("default: %c", ret); } - tmp = linebuf[linepos]; - linebuf[linepos] = '\0'; - printf(" for %s (%u bytes)\n", linebuf + lastpos, linepos - lastpos); - linebuf[linepos] = tmp; - lastpos = linepos; - fflush(stdout); + tmp = linebuf[linepos]; + linebuf[linepos] = '\0'; + printf (" for %s (%u bytes)\n", linebuf + lastpos, linepos - lastpos); + linebuf[linepos] = tmp; + lastpos = linepos; + fflush (stdout); #endif - return ret; + return ret; } #define TEST(_a) (_a) ? (void)0 : printf("Test %s failed\n", #_a); -int altlex_testparse(const char *input) +int +altlex_testparse (const char *input) { - /* Fiddle with the read-ahead buffer to insert ourselves */ - strcpy(linebuf, input); - linelen = strlen(linebuf)+1; - linepos = 0; - - return yylex(); + /* Fiddle with the read-ahead buffer to insert ourselves */ + strncpyz (linebuf, input, sizeof(linebuf)); + linelen = strlen (linebuf) + 1; + linepos = 0; + + return yylex (); } -int altlex_testchar(const char *input) +int +altlex_testchar (const char *input) { - value *val; - if (altlex_testparse(input) != CONSTANT) - return -2; - val = yylval.val; - if (val->type->class != SPECIFIER) - return -3; - if (SPEC_NOUN(val->type) != V_CHAR) - return -4; - if (SPEC_SCLS(val->type) != S_LITERAL) - return -5; - return SPEC_CVAL(val->type).v_int; + value *val; + if (altlex_testparse (input) != CONSTANT) + return -2; + val = yylval.val; + if (val->type->class != SPECIFIER) + return -3; + if (SPEC_NOUN (val->type) != V_CHAR) + return -4; + if (SPEC_SCLS (val->type) != S_LITERAL) + return -5; + return SPEC_CVAL (val->type).v_int; } -int altlex_testnum(const char *input) +int +altlex_testnum (const char *input) { - value *val; - if (altlex_testparse(input) != CONSTANT) - return -2; - val = yylval.val; - if (val->type->class != SPECIFIER) - return -3; - if (SPEC_NOUN(val->type) != V_INT) - return -4; - if (SPEC_SCLS(val->type) != S_LITERAL) - return -5; - if (SPEC_USIGN(val->type)) - return SPEC_CVAL(val->type).v_uint; - else - return SPEC_CVAL(val->type).v_int; + value *val; + if (altlex_testparse (input) != CONSTANT) + return -2; + val = yylval.val; + if (val->type->class != SPECIFIER) + return -3; + if (SPEC_NOUN (val->type) != V_INT) + return -4; + if (SPEC_SCLS (val->type) != S_LITERAL) + return -5; + if (SPEC_USIGN (val->type)) + return SPEC_CVAL (val->type).v_uint; + else + return SPEC_CVAL (val->type).v_int; } -int altlex_runtests(void) +int +altlex_runtests (void) { - /* These conditions are ripped directly from SDCC.lex */ - /* First check the parsing of the basic tokens */ - TEST(altlex_testparse(">>=") == RIGHT_ASSIGN); - TEST(altlex_testparse("<<=") == LEFT_ASSIGN); - TEST(altlex_testparse("+=") == ADD_ASSIGN); - TEST(altlex_testparse("-=") == SUB_ASSIGN); - TEST(altlex_testparse("*=") == MUL_ASSIGN); - TEST(altlex_testparse("/=") == DIV_ASSIGN); - TEST(altlex_testparse("%=") == MOD_ASSIGN); - TEST(altlex_testparse("&=") == AND_ASSIGN); - TEST(altlex_testparse("^=") == XOR_ASSIGN); - TEST(altlex_testparse("|=") == OR_ASSIGN); - TEST(altlex_testparse(">>") == RIGHT_OP); - TEST(altlex_testparse("<<") == LEFT_OP); - TEST(altlex_testparse("++") == INC_OP); - TEST(altlex_testparse("--") == DEC_OP); - TEST(altlex_testparse("->") == PTR_OP); - TEST(altlex_testparse("&&") == AND_OP); - TEST(altlex_testparse("||") == OR_OP); - TEST(altlex_testparse("<=") == LE_OP); - TEST(altlex_testparse(">=") == GE_OP); - TEST(altlex_testparse("==") == EQ_OP); - TEST(altlex_testparse("!=") == NE_OP); - TEST(altlex_testparse(";") == ';'); - TEST(altlex_testparse("{") == '{'); - TEST(altlex_testparse("}") == '}'); - TEST(altlex_testparse(",") == ','); - TEST(altlex_testparse(":") == ':'); - TEST(altlex_testparse("=") == '='); - TEST(altlex_testparse("(") == '('); - TEST(altlex_testparse(")") == ')'); - TEST(altlex_testparse("[") == '['); - TEST(altlex_testparse("]") == ']'); - TEST(altlex_testparse(".") == '.'); - TEST(altlex_testparse("&") == '&'); - TEST(altlex_testparse("!") == '!'); - TEST(altlex_testparse("~") == '~'); - TEST(altlex_testparse("-") == '-'); - TEST(altlex_testparse("+") == '+'); - TEST(altlex_testparse("*") == '*'); - TEST(altlex_testparse("/") == '/'); - TEST(altlex_testparse("%") == '%'); - TEST(altlex_testparse("<") == '<'); - TEST(altlex_testparse(">") == '>'); - TEST(altlex_testparse("^") == '^'); - TEST(altlex_testparse("|") == '|'); - TEST(altlex_testparse("?") == '?'); - - /* Now some character constants */ - TEST(altlex_testchar("'1'") == '1'); - TEST(altlex_testchar("'a'") == 'a'); - TEST(altlex_testchar("'A'") == 'A'); - TEST(altlex_testchar("'z'") == 'z'); - TEST(altlex_testchar("'Z'") == 'Z'); - TEST(altlex_testchar("'\n'") == '\n'); - TEST(altlex_testchar("'\\\\'") == '\\'); - TEST(altlex_testchar("'\\''") == '\''); - - /* And some numbers */ - TEST(altlex_testnum("0") == 0); - TEST(altlex_testnum("1") == 1); - TEST(altlex_testnum("075") == 075); - TEST(altlex_testnum("0xfeed") == 0xfeed); - TEST(altlex_testnum("0xFEED") == 0xFEED); - TEST(altlex_testnum("0x00005678") == 0x5678); - - /* Keywords */ - TEST(altlex_testparse("auto") == AUTO); - TEST(altlex_testparse("break") == BREAK); - TEST(altlex_testparse("case") == CASE); - TEST(altlex_testparse("char") == CHAR); - TEST(altlex_testparse("const") == CONST); - TEST(altlex_testparse("continue") == CONTINUE); - TEST(altlex_testparse("default") == DEFAULT); - TEST(altlex_testparse("do") == DO); - /* Prints a warning */ - // TEST(altlex_testparse("double") == FLOAT); - TEST(altlex_testparse("else") == ELSE); - TEST(altlex_testparse("enum") == ENUM); - TEST(altlex_testparse("extern") == EXTERN); - TEST(altlex_testparse("float") == FLOAT); - TEST(altlex_testparse("for") == FOR); - TEST(altlex_testparse("goto") == GOTO); - TEST(altlex_testparse("if") == IF); - TEST(altlex_testparse("int") == INT); - TEST(altlex_testparse("interrupt") == INTERRUPT); - TEST(altlex_testparse("long") == LONG); - TEST(altlex_testparse("register") == REGISTER); - TEST(altlex_testparse("return") == RETURN); - TEST(altlex_testparse("short") == SHORT); - TEST(altlex_testparse("signed") == SIGNED); - TEST(altlex_testparse("sizeof") == SIZEOF); - TEST(altlex_testparse("static") == STATIC); - TEST(altlex_testparse("struct") == STRUCT); - TEST(altlex_testparse("switch") == SWITCH); - TEST(altlex_testparse("typedef") == TYPEDEF); - TEST(altlex_testparse("union") == UNION); - TEST(altlex_testparse("unsigned") == UNSIGNED); - TEST(altlex_testparse("void") == VOID); - TEST(altlex_testparse("volatile") == VOLATILE); - TEST(altlex_testparse("while") == WHILE); - TEST(altlex_testparse("...") == VAR_ARGS); + /* These conditions are ripped directly from SDCC.lex */ + /* First check the parsing of the basic tokens */ + TEST (altlex_testparse (">>=") == RIGHT_ASSIGN); + TEST (altlex_testparse ("<<=") == LEFT_ASSIGN); + TEST (altlex_testparse ("+=") == ADD_ASSIGN); + TEST (altlex_testparse ("-=") == SUB_ASSIGN); + TEST (altlex_testparse ("*=") == MUL_ASSIGN); + TEST (altlex_testparse ("/=") == DIV_ASSIGN); + TEST (altlex_testparse ("%=") == MOD_ASSIGN); + TEST (altlex_testparse ("&=") == AND_ASSIGN); + TEST (altlex_testparse ("^=") == XOR_ASSIGN); + TEST (altlex_testparse ("|=") == OR_ASSIGN); + TEST (altlex_testparse (">>") == RIGHT_OP); + TEST (altlex_testparse ("<<") == LEFT_OP); + TEST (altlex_testparse ("++") == INC_OP); + TEST (altlex_testparse ("--") == DEC_OP); + TEST (altlex_testparse ("->") == PTR_OP); + TEST (altlex_testparse ("&&") == AND_OP); + TEST (altlex_testparse ("||") == OR_OP); + TEST (altlex_testparse ("<=") == LE_OP); + TEST (altlex_testparse (">=") == GE_OP); + TEST (altlex_testparse ("==") == EQ_OP); + TEST (altlex_testparse ("!=") == NE_OP); + TEST (altlex_testparse (";") == ';'); + TEST (altlex_testparse ("{") == '{'); + TEST (altlex_testparse ("}") == '}'); + TEST (altlex_testparse (",") == ','); + TEST (altlex_testparse (":") == ':'); + TEST (altlex_testparse ("=") == '='); + TEST (altlex_testparse ("(") == '('); + TEST (altlex_testparse (")") == ')'); + TEST (altlex_testparse ("[") == '['); + TEST (altlex_testparse ("]") == ']'); + TEST (altlex_testparse (".") == '.'); + TEST (altlex_testparse ("&") == '&'); + TEST (altlex_testparse ("!") == '!'); + TEST (altlex_testparse ("~") == '~'); + TEST (altlex_testparse ("-") == '-'); + TEST (altlex_testparse ("+") == '+'); + TEST (altlex_testparse ("*") == '*'); + TEST (altlex_testparse ("/") == '/'); + TEST (altlex_testparse ("%") == '%'); + TEST (altlex_testparse ("<") == '<'); + TEST (altlex_testparse (">") == '>'); + TEST (altlex_testparse ("^") == '^'); + TEST (altlex_testparse ("|") == '|'); + TEST (altlex_testparse ("?") == '?'); + + /* Now some character constants */ + TEST (altlex_testchar ("'1'") == '1'); + TEST (altlex_testchar ("'a'") == 'a'); + TEST (altlex_testchar ("'A'") == 'A'); + TEST (altlex_testchar ("'z'") == 'z'); + TEST (altlex_testchar ("'Z'") == 'Z'); + TEST (altlex_testchar ("'\n'") == '\n'); + TEST (altlex_testchar ("'\\\\'") == '\\'); + TEST (altlex_testchar ("'\\''") == '\''); + + /* And some numbers */ + TEST (altlex_testnum ("0") == 0); + TEST (altlex_testnum ("1") == 1); + TEST (altlex_testnum ("075") == 075); + TEST (altlex_testnum ("0xfeed") == 0xfeed); + TEST (altlex_testnum ("0xFEED") == 0xFEED); + TEST (altlex_testnum ("0x00005678") == 0x5678); + + /* Keywords */ + TEST (altlex_testparse ("auto") == AUTO); + TEST (altlex_testparse ("break") == BREAK); + TEST (altlex_testparse ("case") == CASE); + TEST (altlex_testparse ("char") == CHAR); + TEST (altlex_testparse ("const") == CONST); + TEST (altlex_testparse ("continue") == CONTINUE); + TEST (altlex_testparse ("default") == DEFAULT); + TEST (altlex_testparse ("do") == DO); + /* Prints a warning */ + // TEST(altlex_testparse("double") == FLOAT); + TEST (altlex_testparse ("else") == ELSE); + TEST (altlex_testparse ("enum") == ENUM); + TEST (altlex_testparse ("extern") == EXTERN); + TEST (altlex_testparse ("float") == FLOAT); + TEST (altlex_testparse ("fixed16x16") == FIXED16X16); + TEST (altlex_testparse ("for") == FOR); + TEST (altlex_testparse ("goto") == GOTO); + TEST (altlex_testparse ("if") == IF); + TEST (altlex_testparse ("int") == INT); + TEST (altlex_testparse ("interrupt") == INTERRUPT); + TEST (altlex_testparse ("long") == LONG); + TEST (altlex_testparse ("register") == REGISTER); + TEST (altlex_testparse ("return") == RETURN); + TEST (altlex_testparse ("short") == SHORT); + TEST (altlex_testparse ("signed") == SIGNED); + TEST (altlex_testparse ("sizeof") == SIZEOF); + TEST (altlex_testparse ("static") == STATIC); + TEST (altlex_testparse ("struct") == STRUCT); + TEST (altlex_testparse ("switch") == SWITCH); + TEST (altlex_testparse ("typedef") == TYPEDEF); + TEST (altlex_testparse ("union") == UNION); + TEST (altlex_testparse ("unsigned") == UNSIGNED); + TEST (altlex_testparse ("void") == VOID); + TEST (altlex_testparse ("volatile") == VOLATILE); + TEST (altlex_testparse ("while") == WHILE); + TEST (altlex_testparse ("...") == VAR_ARGS); #if 0 - /* Platform specific keywords */ - TEST(altlex_testparse("sram") ==) { count(); TKEYWORD(XDATA);} - TEST(altlex_testparse("using") ==) { count(); TKEYWORD(USING); } - TEST(altlex_testparse("near") ==) { count(); TKEYWORD(DATA);} - TEST(altlex_testparse("at") ==) { count(); TKEYWORD(AT) ; } - TEST(altlex_testparse("bit") ==) { count(); TKEYWORD(BIT) ; } - TEST(altlex_testparse("code") ==) { count(); TKEYWORD(CODE); } - TEST(altlex_testparse("critical") ==) { count(); TKEYWORD(CRITICAL); } - TEST(altlex_testparse("data") ==) { count(); TKEYWORD(DATA); } - TEST(altlex_testparse("far") ==) { count(); TKEYWORD(XDATA); } - TEST(altlex_testparse("eeprom") ==) { count(); TKEYWORD(EEPROM); } - TEST(altlex_testparse("flash") ==) { count(); TKEYWORD(CODE);} - TEST(altlex_testparse("idata") ==) { count(); TKEYWORD(IDATA);} - TEST(altlex_testparse("nonbanked") ==) { count(); TKEYWORD(NONBANKED);} - TEST(altlex_testparse("banked") ==) { count(); TKEYWORD(BANKED);} - TEST(altlex_testparse("pdata") ==) { count(); TKEYWORD(PDATA); } - TEST(altlex_testparse("reentrant") ==) { count(); TKEYWORD(REENTRANT);} - TEST(altlex_testparse("sfr") ==) { count(); TKEYWORD(SFR) ; } - TEST(altlex_testparse("sbit") ==) { count(); TKEYWORD(SBIT) ; } - TEST(altlex_testparse("xdata") ==) { count(); TKEYWORD(XDATA); } - TEST(altlex_testparse("_data") ==) { count(); TKEYWORD(_NEAR); } - TEST(altlex_testparse("_code") ==) { count(); TKEYWORD(_CODE); } - TEST(altlex_testparse("_eeprom") ==) { count(); TKEYWORD(_EEPROM); } - TEST(altlex_testparse("_flash") ==) { count(); TKEYWORD(_CODE); } - TEST(altlex_testparse("_generic") ==) { count(); TKEYWORD(_GENERIC); } - TEST(altlex_testparse("_near") ==) { count(); TKEYWORD(_NEAR); } - TEST(altlex_testparse("_sram") ==) { count(); TKEYWORD(_XDATA);} - TEST(altlex_testparse("_xdata") ==) { count(); TKEYWORD(_XDATA);} - TEST(altlex_testparse("_pdata") ==) { count(); TKEYWORD(_PDATA); } - TEST(altlex_testparse("_idata") ==) { count(); TKEYWORD(_IDATA); } + /* Platform specific keywords */ + TEST (altlex_testparse ("sram") ==) + { + count (); + TKEYWORD (XDATA); + } + TEST (altlex_testparse ("using") ==) + { + count (); + TKEYWORD (USING); + } + TEST (altlex_testparse ("near") ==) + { + count (); + TKEYWORD (DATA); + } + TEST (altlex_testparse ("at") ==) + { + count (); + TKEYWORD (AT); + } + TEST (altlex_testparse ("bit") ==) + { + count (); + TKEYWORD (BIT); + } + TEST (altlex_testparse ("code") ==) + { + count (); + TKEYWORD (CODE); + } + TEST (altlex_testparse ("critical") ==) + { + count (); + TKEYWORD (CRITICAL); + } + TEST (altlex_testparse ("data") ==) + { + count (); + TKEYWORD (DATA); + } + TEST (altlex_testparse ("far") ==) + { + count (); + TKEYWORD (XDATA); + } + TEST (altlex_testparse ("eeprom") ==) + { + count (); + TKEYWORD (EEPROM); + } + TEST (altlex_testparse ("flash") ==) + { + count (); + TKEYWORD (CODE); + } + TEST (altlex_testparse ("idata") ==) + { + count (); + TKEYWORD (IDATA); + } + TEST (altlex_testparse ("nonbanked") ==) + { + count (); + TKEYWORD (NONBANKED); + } + TEST (altlex_testparse ("banked") ==) + { + count (); + TKEYWORD (BANKED); + } + TEST (altlex_testparse ("pdata") ==) + { + count (); + TKEYWORD (PDATA); + } + TEST (altlex_testparse ("reentrant") ==) + { + count (); + TKEYWORD (REENTRANT); + } + TEST (altlex_testparse ("sfr") ==) + { + count (); + TKEYWORD (SFR); + } + TEST (altlex_testparse ("sbit") ==) + { + count (); + TKEYWORD (SBIT); + } + TEST (altlex_testparse ("xdata") ==) + { + count (); + TKEYWORD (XDATA); + } + TEST (altlex_testparse ("_data") ==) + { + count (); + TKEYWORD (_NEAR); + } + TEST (altlex_testparse ("_code") ==) + { + count (); + TKEYWORD (_CODE); + } + TEST (altlex_testparse ("_eeprom") ==) + { + count (); + TKEYWORD (_EEPROM); + } + TEST (altlex_testparse ("_flash") ==) + { + count (); + TKEYWORD (_CODE); + } + TEST (altlex_testparse ("_generic") ==) + { + count (); + TKEYWORD (_GENERIC); + } + TEST (altlex_testparse ("_near") ==) + { + count (); + TKEYWORD (_NEAR); + } + TEST (altlex_testparse ("_sram") ==) + { + count (); + TKEYWORD (_XDATA); + } + TEST (altlex_testparse ("_xdata") ==) + { + count (); + TKEYWORD (_XDATA); + } + TEST (altlex_testparse ("_pdata") ==) + { + count (); + TKEYWORD (_PDATA); + } + TEST (altlex_testparse ("_idata") ==) + { + count (); + TKEYWORD (_IDATA); + } #endif - return 0; + return 0; }