diff options
author | somov <somov@yandex-team.ru> | 2022-02-10 16:45:49 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:49 +0300 |
commit | 7489e4682331202b9c7d863c0898eb83d7b12c2b (patch) | |
tree | 9142afc54d335ea52910662635b898e79e192e49 /contrib/tools/yasm/modules/nasm-token.c | |
parent | a5950576e397b1909261050b8c7da16db58f10b1 (diff) | |
download | ydb-7489e4682331202b9c7d863c0898eb83d7b12c2b.tar.gz |
Restoring authorship annotation for <somov@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/tools/yasm/modules/nasm-token.c')
-rw-r--r-- | contrib/tools/yasm/modules/nasm-token.c | 6434 |
1 files changed, 3217 insertions, 3217 deletions
diff --git a/contrib/tools/yasm/modules/nasm-token.c b/contrib/tools/yasm/modules/nasm-token.c index 6bda2e7e44..93d91b9f7b 100644 --- a/contrib/tools/yasm/modules/nasm-token.c +++ b/contrib/tools/yasm/modules/nasm-token.c @@ -1,3217 +1,3217 @@ -/* Generated by re2c - */ -/* - * NASM-compatible re2c lexer - * - * Copyright (C) 2001-2007 Peter Johnson - * - * Portions based on re2c's example code. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#include <util.h> - -#include <libyasm.h> - -#include "modules/parsers/nasm/nasm-parser.h" -#include "modules/preprocs/nasm/nasm.h" - - -#define YYCURSOR cursor -#define YYLIMIT (s->lim) -#define YYMARKER (s->ptr) -#define YYFILL(n) {} - -#define RETURN(i) {s->cur = cursor; parser_nasm->tokch = s->tok[0]; \ - return i;} - -#define SCANINIT() {s->tok = cursor;} - -#define TOK ((char *)s->tok) -#define TOKLEN (size_t)(cursor-s->tok) - - -/* starting size of string buffer */ -#define STRBUF_ALLOC_SIZE 128 - -/* string buffer used when parsing strings/character constants */ -static YYCTYPE *strbuf = NULL; - -/* length of strbuf (including terminating NULL character) */ -static size_t strbuf_size = 0; - -static int linechg_numcount; - - - -static int -handle_dot_label(YYSTYPE *lvalp, char *tok, size_t toklen, size_t zeropos, - yasm_parser_nasm *parser_nasm) -{ - /* check for special non-local labels like ..start */ - if (tok[zeropos+1] == '.') { - lvalp->str_val = yasm__xstrndup(tok+zeropos+(parser_nasm->tasm?2:0), - toklen-zeropos-(parser_nasm->tasm?2:0)); - /* check for special non-local ..@label */ - if (lvalp->str_val[zeropos+2] == '@') - return NONLOCAL_ID; - return SPECIAL_ID; - } - if (parser_nasm->masm && tok[zeropos] == '.') { - lvalp->str_val = yasm__xstrndup(tok + zeropos, toklen - zeropos); - return SPECIAL_ID; - } - if (parser_nasm->tasm && (!tasm_locals || - (tok[zeropos] == '.' && - tok[zeropos+1] != '@' && tok[zeropos+2] != '@'))) { - /* no locals on Tasm without the 'locals' directive */ - /* .foo is never local either, but .@@foo may be (local structure - * members) */ - lvalp->str_val = yasm__xstrndup(tok + zeropos, toklen - zeropos); - return SPECIAL_ID; - } - if (!parser_nasm->locallabel_base) { - lvalp->str_val = yasm__xstrndup(tok+zeropos, toklen-zeropos); - yasm_warn_set(YASM_WARN_GENERAL, - N_("no non-local label before `%s'"), - lvalp->str_val); - } else { - size_t len = toklen - zeropos + parser_nasm->locallabel_base_len; - lvalp->str_val = yasm_xmalloc(len + 1); - strcpy(lvalp->str_val, parser_nasm->locallabel_base); - strncat(lvalp->str_val, tok+zeropos, toklen-zeropos); - lvalp->str_val[len] = '\0'; - } - - return LOCAL_ID; -} - -int -nasm_parser_lex(YYSTYPE *lvalp, yasm_parser_nasm *parser_nasm) -{ - yasm_scanner *s = &parser_nasm->s; - YYCTYPE *cursor = s->cur; - YYCTYPE endch; - size_t count; - YYCTYPE savech; - - /* Handle one token of lookahead */ - if (parser_nasm->peek_token != NONE) { - int tok = parser_nasm->peek_token; - *lvalp = parser_nasm->peek_tokval; /* structure copy */ - parser_nasm->tokch = parser_nasm->peek_tokch; - parser_nasm->peek_token = NONE; - return tok; - } - - /* Catch EOL (EOF from the scanner perspective) */ - if (s->eof && cursor == s->eof) - return 0; - - /* Jump to proper "exclusive" states */ - switch (parser_nasm->state) { - case DIRECTIVE: - goto directive; - case SECTION_DIRECTIVE: - goto section_directive; - case DIRECTIVE2: - goto directive2; - case LINECHG: - goto linechg; - case LINECHG2: - goto linechg2; - default: - break; - } - -scan: - SCANINIT(); - if (*cursor == '\0') - goto endofinput; - - { - static unsigned char yybm[] = { - 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 1, - 255, 255, 63, 63, 63, 63, 63, 63, - 15, 15, 1, 1, 1, 1, 1, 3, - 3, 7, 7, 7, 7, 7, 7, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 1, 1, 1, 1, 167, - 1, 7, 7, 7, 7, 7, 7, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 1, 1, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 128, 0, 0, 0, 128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 128, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - }; - -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy0; - ++YYCURSOR; -yy0: - if((YYLIMIT - YYCURSOR) < 8) YYFILL(8); - yych = *YYCURSOR; - switch(yych){ - case '\000': goto yy43; - case '\t': case '\r': case ' ': goto yy41; - case '"': case '\'': goto yy9; - case '$': goto yy7; - case '%': goto yy11; - case '&': case '(': - case ')': - case '*': - case '+': - case ',': - case '-': case ':': case '=': case '[': case '^': case '|': case '~': goto yy32; - case '.': goto yy36; - case '/': goto yy31; - case '0': goto yy2; - case '1': goto yy4; - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy5; - case '8': - case '9': goto yy6; - case ';': goto yy39; - case '<': goto yy28; - case '>': goto yy30; - case '?': goto yy33; - case '@': goto yy37; - case 'A': case 'a': goto yy26; - case 'B': case 'b': goto yy12; - case 'C': case 'F': - case 'G': case 'J': - case 'K': case 'M': case 'P': case 'U': - case 'V': case 'X': case 'Z': case '_': case 'c': case 'f': - case 'g': case 'j': - case 'k': case 'm': case 'p': case 'u': - case 'v': case 'x': case 'z': goto yy38; - case 'D': case 'd': goto yy16; - case 'E': case 'e': goto yy24; - case 'H': case 'h': goto yy14; - case 'I': case 'i': goto yy23; - case 'L': case 'l': goto yy17; - case 'N': case 'n': goto yy27; - case 'O': case 'o': goto yy20; - case 'Q': case 'q': goto yy18; - case 'R': case 'r': goto yy22; - case 'S': case 's': goto yy25; - case 'T': case 't': goto yy19; - case 'W': case 'w': goto yy15; - case 'Y': case 'y': goto yy21; - case ']': goto yy34; - default: goto yy45; - } -yy2: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 64) { - goto yy222; - } - switch(yych){ - case '.': goto yy203; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy216; - case '8': - case '9': goto yy206; - case 'A': case 'C': - case 'D': - case 'E': - case 'F': case 'a': case 'c': - case 'd': - case 'e': - case 'f': goto yy208; - case 'B': case 'b': goto yy224; - case 'H': case 'h': goto yy210; - case 'O': case 'Q': case 'o': case 'q': goto yy220; - case 'X': case 'x': goto yy228; - case '_': goto yy226; - default: goto yy3; - } -yy3: -{ - savech = s->tok[TOKLEN]; - s->tok[TOKLEN] = '\0'; - lvalp->intn = yasm_intnum_create_dec(TOK); - s->tok[TOKLEN] = savech; - RETURN(INTNUM); - } -yy4: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 64) { - goto yy222; - } - switch(yych){ - case '.': goto yy203; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy216; - case '8': - case '9': goto yy206; - case 'A': case 'C': - case 'D': - case 'E': - case 'F': case 'a': case 'c': - case 'd': - case 'e': - case 'f': goto yy208; - case 'B': case 'b': goto yy224; - case 'H': case 'h': goto yy210; - case 'O': case 'Q': case 'o': case 'q': goto yy220; - case '_': goto yy226; - default: goto yy3; - } -yy5: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 16) { - goto yy216; - } - if(yych <= 'P'){ - if(yych <= '@'){ - if(yych <= '.'){ - if(yych <= '-') goto yy3; - goto yy203; - } else { - if(yych <= '/') goto yy3; - if(yych <= '9') goto yy206; - goto yy3; - } - } else { - if(yych <= 'H'){ - if(yych <= 'F') goto yy208; - if(yych <= 'G') goto yy3; - goto yy210; - } else { - if(yych == 'O') goto yy220; - goto yy3; - } - } - } else { - if(yych <= 'g'){ - if(yych <= '_'){ - if(yych <= 'Q') goto yy220; - if(yych <= '^') goto yy3; - goto yy218; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'f') goto yy208; - goto yy3; - } - } else { - if(yych <= 'o'){ - if(yych <= 'h') goto yy210; - if(yych <= 'n') goto yy3; - goto yy220; - } else { - if(yych == 'q') goto yy220; - goto yy3; - } - } - } -yy6: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'G'){ - if(yych <= '/'){ - if(yych == '.') goto yy203; - goto yy3; - } else { - if(yych <= '9') goto yy206; - if(yych <= '@') goto yy3; - if(yych <= 'F') goto yy208; - goto yy3; - } - } else { - if(yych <= '`'){ - if(yych <= 'H') goto yy210; - if(yych == '_') goto yy208; - goto yy3; - } else { - if(yych <= 'f') goto yy208; - if(yych == 'h') goto yy210; - goto yy3; - } - } -yy7: yych = *++YYCURSOR; - if(yych <= '>'){ - if(yych <= '-'){ - if(yych <= '"') goto yy8; - if(yych <= '#') goto yy194; - if(yych <= '$') goto yy197; - goto yy8; - } else { - if(yych <= '.') goto yy194; - if(yych <= '/') goto yy8; - if(yych <= '9') goto yy199; - goto yy8; - } - } else { - if(yych <= '`'){ - if(yych <= 'Z') goto yy194; - if(yych == '_') goto yy194; - goto yy8; - } else { - if(yych <= 'z') goto yy194; - if(yych == '~') goto yy194; - goto yy8; - } - } -yy8: -{ RETURN(s->tok[0]); } -yy9: yych = *++YYCURSOR; - goto yy10; -yy10: -{ - endch = s->tok[0]; - goto stringconst; - } -yy11: yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '%') goto yy186; - if(yych == 'l') goto yy188; - goto yy8; -yy12: yych = *++YYCURSOR; - if(yych == 'Y') goto yy182; - if(yych == 'y') goto yy182; - goto yy51; -yy13: -{ - savech = s->tok[TOKLEN]; - s->tok[TOKLEN] = '\0'; - if (parser_nasm->state != INSTRUCTION) { - uintptr_t prefix; - switch (yasm_arch_parse_check_insnprefix - (p_object->arch, TOK, TOKLEN, cur_line, &lvalp->bc, - &prefix)) { - case YASM_ARCH_INSN: - parser_nasm->state = INSTRUCTION; - s->tok[TOKLEN] = savech; - RETURN(INSN); - case YASM_ARCH_PREFIX: - lvalp->arch_data = prefix; - s->tok[TOKLEN] = savech; - RETURN(PREFIX); - default: - break; - } - } - switch (yasm_arch_parse_check_regtmod - (p_object->arch, TOK, TOKLEN, &lvalp->arch_data)) { - case YASM_ARCH_REG: - s->tok[TOKLEN] = savech; - RETURN(REG); - case YASM_ARCH_SEGREG: - s->tok[TOKLEN] = savech; - RETURN(SEGREG); - case YASM_ARCH_TARGETMOD: - s->tok[TOKLEN] = savech; - RETURN(TARGETMOD); - case YASM_ARCH_REGGROUP: - if (parser_nasm->masm) { - s->tok[TOKLEN] = savech; - RETURN(REGGROUP); - } - default: - break; - } - if (parser_nasm->masm) { - if (!yasm__strcasecmp(TOK, "offset")) { - s->tok[TOKLEN] = savech; - RETURN(OFFSET); - } - } else if (parser_nasm->tasm) { - if (!yasm__strcasecmp(TOK, "shl")) { - s->tok[TOKLEN] = savech; - RETURN(LEFT_OP); - } - if (!yasm__strcasecmp(TOK, "shr")) { - s->tok[TOKLEN] = savech; - RETURN(RIGHT_OP); - } - if (!yasm__strcasecmp(TOK, "and")) { - s->tok[TOKLEN] = savech; - RETURN('&'); - } - if (!yasm__strcasecmp(TOK, "or")) { - s->tok[TOKLEN] = savech; - RETURN('|'); - } - if (!yasm__strcasecmp(TOK, "not")) { - s->tok[TOKLEN] = savech; - RETURN('~'); - } - if (!yasm__strcasecmp(TOK, "low")) { - s->tok[TOKLEN] = savech; - RETURN(LOW); - } - if (!yasm__strcasecmp(TOK, "high")) { - s->tok[TOKLEN] = savech; - RETURN(HIGH); - } - if (!yasm__strcasecmp(TOK, "offset")) { - s->tok[TOKLEN] = savech; - RETURN(OFFSET); - } - if (!yasm__strcasecmp(TOK, "fword")) { - s->tok[TOKLEN] = savech; - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; - RETURN(SIZE_OVERRIDE); - } - if (!yasm__strcasecmp(TOK, "df")) { - s->tok[TOKLEN] = savech; - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*3; - parser_nasm->state = INSTRUCTION; - RETURN(DECLARE_DATA); - } - if (!yasm__strcasecmp(TOK, "label")) { - s->tok[TOKLEN] = savech; - RETURN(LABEL); - } - if (!yasm__strcasecmp(TOK, "dup")) { - s->tok[TOKLEN] = savech; - RETURN(DUP); - } - } - /* Propagate errors in case we got a warning from the arch */ - yasm_errwarn_propagate(parser_nasm->errwarns, cur_line); - /* Just an identifier, return as such. */ - s->tok[TOKLEN] = savech; - lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); - RETURN(ID); - } -yy14: yych = *++YYCURSOR; - if(yych == 'W') goto yy177; - if(yych == 'w') goto yy177; - goto yy51; -yy15: yych = *++YYCURSOR; - if(yych <= 'R'){ - if(yych == 'O') goto yy170; - if(yych <= 'Q') goto yy51; - goto yy171; - } else { - if(yych <= 'o'){ - if(yych <= 'n') goto yy51; - goto yy170; - } else { - if(yych == 'r') goto yy171; - goto yy51; - } - } -yy16: yych = *++YYCURSOR; - switch(yych){ - case 'B': case 'b': goto yy144; - case 'D': case 'd': goto yy146; - case 'H': case 'h': goto yy148; - case 'O': case 'o': goto yy149; - case 'Q': case 'q': goto yy151; - case 'T': case 't': goto yy153; - case 'W': case 'w': goto yy155; - case 'Y': case 'y': goto yy157; - default: goto yy51; - } -yy17: yych = *++YYCURSOR; - if(yych == 'O') goto yy140; - if(yych == 'o') goto yy140; - goto yy51; -yy18: yych = *++YYCURSOR; - if(yych == 'W') goto yy135; - if(yych == 'w') goto yy135; - goto yy51; -yy19: yych = *++YYCURSOR; - if(yych <= 'W'){ - if(yych == 'I') goto yy125; - if(yych <= 'V') goto yy51; - goto yy126; - } else { - if(yych <= 'i'){ - if(yych <= 'h') goto yy51; - goto yy125; - } else { - if(yych == 'w') goto yy126; - goto yy51; - } - } -yy20: yych = *++YYCURSOR; - if(yych == 'W') goto yy120; - if(yych == 'w') goto yy120; - goto yy51; -yy21: yych = *++YYCURSOR; - if(yych == 'W') goto yy115; - if(yych == 'w') goto yy115; - goto yy51; -yy22: yych = *++YYCURSOR; - if(yych == 'E') goto yy92; - if(yych == 'e') goto yy92; - goto yy51; -yy23: yych = *++YYCURSOR; - if(yych == 'N') goto yy86; - if(yych == 'n') goto yy86; - goto yy51; -yy24: yych = *++YYCURSOR; - if(yych == 'Q') goto yy83; - if(yych == 'q') goto yy83; - goto yy51; -yy25: yych = *++YYCURSOR; - if(yych <= 'T'){ - if(yych == 'E') goto yy74; - if(yych <= 'S') goto yy51; - goto yy75; - } else { - if(yych <= 'e'){ - if(yych <= 'd') goto yy51; - goto yy74; - } else { - if(yych == 't') goto yy75; - goto yy51; - } - } -yy26: yych = *++YYCURSOR; - if(yych == 'B') goto yy71; - if(yych == 'b') goto yy71; - goto yy51; -yy27: yych = *++YYCURSOR; - if(yych == 'O') goto yy64; - if(yych == 'o') goto yy64; - goto yy51; -yy28: yych = *++YYCURSOR; - if(yych == '<') goto yy62; - goto yy29; -yy29: -{ - yasm_warn_set(YASM_WARN_UNREC_CHAR, - N_("ignoring unrecognized character `%s'"), - yasm__conv_unprint(s->tok[0])); - goto scan; - } -yy30: yych = *++YYCURSOR; - if(yych == '>') goto yy60; - goto yy29; -yy31: yych = *++YYCURSOR; - if(yych == '/') goto yy58; - goto yy8; -yy32: yych = *++YYCURSOR; - goto yy8; -yy33: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy8; -yy34: yych = *++YYCURSOR; - goto yy35; -yy35: -{ RETURN(s->tok[0]); } -yy36: yych = *++YYCURSOR; - if(yych <= '>'){ - if(yych <= '-'){ - if(yych <= '"') goto yy29; - if(yych <= '$') goto yy56; - goto yy29; - } else { - if(yych == '/') goto yy29; - if(yych <= '9') goto yy56; - goto yy29; - } - } else { - if(yych <= '`'){ - if(yych <= 'Z') goto yy56; - if(yych == '_') goto yy56; - goto yy29; - } else { - if(yych <= 'z') goto yy56; - if(yych == '~') goto yy56; - goto yy29; - } - } -yy37: yych = *++YYCURSOR; - if(yych == '@') goto yy52; - goto yy51; -yy38: yych = *++YYCURSOR; - goto yy51; -yy39: yych = *++YYCURSOR; - goto yy49; -yy40: -{ goto scan; } -yy41: yych = *++YYCURSOR; - goto yy47; -yy42: -{ goto scan; } -yy43: yych = *++YYCURSOR; - goto yy44; -yy44: -{ goto endofinput; } -yy45: yych = *++YYCURSOR; - goto yy29; -yy46: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy47; -yy47: if(yybm[256+yych] & 128) { - goto yy46; - } - goto yy42; -yy48: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy49; -yy49: if(yybm[0+yych] & 1) { - goto yy48; - } - goto yy40; -yy50: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy51; -yy51: if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy13; -yy52: yych = *++YYCURSOR; - if(yych <= '>'){ - if(yych <= '-'){ - if(yych <= '"') goto yy13; - if(yych >= '%') goto yy13; - goto yy53; - } else { - if(yych == '/') goto yy13; - if(yych >= ':') goto yy13; - goto yy53; - } - } else { - if(yych <= '`'){ - if(yych <= 'Z') goto yy53; - if(yych != '_') goto yy13; - goto yy53; - } else { - if(yych <= 'z') goto yy53; - if(yych != '~') goto yy13; - goto yy53; - } - } -yy53: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy54; -yy54: if(yych <= '>'){ - if(yych <= '-'){ - if(yych <= '"') goto yy55; - if(yych <= '$') goto yy53; - goto yy55; - } else { - if(yych == '/') goto yy55; - if(yych <= '9') goto yy53; - goto yy55; - } - } else { - if(yych <= '`'){ - if(yych <= 'Z') goto yy53; - if(yych == '_') goto yy53; - goto yy55; - } else { - if(yych <= 'z') goto yy53; - if(yych == '~') goto yy53; - goto yy55; - } - } -yy55: -{ - RETURN(handle_dot_label(lvalp, TOK, TOKLEN, 0, parser_nasm)); - } -yy56: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy57; -yy57: if(yych <= '>'){ - if(yych <= '-'){ - if(yych <= '"') goto yy55; - if(yych <= '$') goto yy56; - goto yy55; - } else { - if(yych == '/') goto yy55; - if(yych <= '9') goto yy56; - goto yy55; - } - } else { - if(yych <= '`'){ - if(yych <= 'Z') goto yy56; - if(yych == '_') goto yy56; - goto yy55; - } else { - if(yych <= 'z') goto yy56; - if(yych == '~') goto yy56; - goto yy55; - } - } -yy58: yych = *++YYCURSOR; - goto yy59; -yy59: -{ RETURN(SIGNDIV); } -yy60: yych = *++YYCURSOR; - goto yy61; -yy61: -{ RETURN(RIGHT_OP); } -yy62: yych = *++YYCURSOR; - goto yy63; -yy63: -{ RETURN(LEFT_OP); } -yy64: yych = *++YYCURSOR; - if(yych == 'S') goto yy65; - if(yych != 's') goto yy51; - goto yy65; -yy65: yych = *++YYCURSOR; - if(yych == 'P') goto yy66; - if(yych != 'p') goto yy51; - goto yy66; -yy66: yych = *++YYCURSOR; - if(yych == 'L') goto yy67; - if(yych != 'l') goto yy51; - goto yy67; -yy67: yych = *++YYCURSOR; - if(yych == 'I') goto yy68; - if(yych != 'i') goto yy51; - goto yy68; -yy68: yych = *++YYCURSOR; - if(yych == 'T') goto yy69; - if(yych != 't') goto yy51; - goto yy69; -yy69: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy70; -yy70: -{ RETURN(NOSPLIT); } -yy71: yych = *++YYCURSOR; - if(yych == 'S') goto yy72; - if(yych != 's') goto yy51; - goto yy72; -yy72: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy73; -yy73: -{ RETURN(ABS); } -yy74: yych = *++YYCURSOR; - if(yych == 'G') goto yy81; - if(yych == 'g') goto yy81; - goto yy51; -yy75: yych = *++YYCURSOR; - if(yych == 'R') goto yy76; - if(yych != 'r') goto yy51; - goto yy76; -yy76: yych = *++YYCURSOR; - if(yych == 'I') goto yy77; - if(yych != 'i') goto yy51; - goto yy77; -yy77: yych = *++YYCURSOR; - if(yych == 'C') goto yy78; - if(yych != 'c') goto yy51; - goto yy78; -yy78: yych = *++YYCURSOR; - if(yych == 'T') goto yy79; - if(yych != 't') goto yy51; - goto yy79; -yy79: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy80; -yy80: -{ RETURN(STRICT); } -yy81: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy82; -yy82: -{ RETURN(SEG); } -yy83: yych = *++YYCURSOR; - if(yych == 'U') goto yy84; - if(yych != 'u') goto yy51; - goto yy84; -yy84: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy85; -yy85: -{ RETURN(EQU); } -yy86: yych = *++YYCURSOR; - if(yych == 'C') goto yy87; - if(yych != 'c') goto yy51; - goto yy87; -yy87: yych = *++YYCURSOR; - if(yych == 'B') goto yy88; - if(yych != 'b') goto yy51; - goto yy88; -yy88: yych = *++YYCURSOR; - if(yych == 'I') goto yy89; - if(yych != 'i') goto yy51; - goto yy89; -yy89: yych = *++YYCURSOR; - if(yych == 'N') goto yy90; - if(yych != 'n') goto yy51; - goto yy90; -yy90: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy91; -yy91: -{ RETURN(INCBIN); } -yy92: yych = *++YYCURSOR; - if(yych <= 'S'){ - if(yych == 'L') goto yy94; - if(yych <= 'R') goto yy51; - goto yy93; - } else { - if(yych <= 'l'){ - if(yych <= 'k') goto yy51; - goto yy94; - } else { - if(yych != 's') goto yy51; - goto yy93; - } - } -yy93: yych = *++YYCURSOR; - switch(yych){ - case 'B': case 'b': goto yy96; - case 'D': case 'd': goto yy98; - case 'H': case 'h': goto yy100; - case 'O': case 'o': goto yy101; - case 'Q': case 'q': goto yy103; - case 'T': case 't': goto yy105; - case 'W': case 'w': goto yy107; - case 'Y': case 'y': goto yy109; - default: goto yy51; - } -yy94: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy95; -yy95: -{ RETURN(REL); } -yy96: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy97; -yy97: -{ - lvalp->int_info = 8; - parser_nasm->state = INSTRUCTION; - RETURN(RESERVE_SPACE); - } -yy98: yych = *++YYCURSOR; - if(yych <= 'Q'){ - if(yych <= '.'){ - if(yych <= '"') goto yy99; - if(yych <= '$') goto yy50; - if(yych >= '.') goto yy50; - goto yy99; - } else { - if(yych <= '9'){ - if(yych >= '0') goto yy50; - goto yy99; - } else { - if(yych <= '>') goto yy99; - if(yych <= 'P') goto yy50; - goto yy113; - } - } - } else { - if(yych <= 'p'){ - if(yych <= '^'){ - if(yych <= 'Z') goto yy50; - goto yy99; - } else { - if(yych != '`') goto yy50; - goto yy99; - } - } else { - if(yych <= 'z'){ - if(yych <= 'q') goto yy113; - goto yy50; - } else { - if(yych == '~') goto yy50; - goto yy99; - } - } - } -yy99: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; - parser_nasm->state = INSTRUCTION; - RETURN(RESERVE_SPACE); - } -yy100: yych = *++YYCURSOR; - if(yych == 'W') goto yy111; - if(yych == 'w') goto yy111; - goto yy51; -yy101: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy102; -yy102: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; - parser_nasm->state = INSTRUCTION; - RETURN(RESERVE_SPACE); - } -yy103: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy104; -yy104: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*4; - parser_nasm->state = INSTRUCTION; - RETURN(RESERVE_SPACE); - } -yy105: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy106; -yy106: -{ - lvalp->int_info = 80; - parser_nasm->state = INSTRUCTION; - RETURN(RESERVE_SPACE); - } -yy107: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy108; -yy108: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch); - parser_nasm->state = INSTRUCTION; - RETURN(RESERVE_SPACE); - } -yy109: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy110; -yy110: -{ - lvalp->int_info = 256; - parser_nasm->state = INSTRUCTION; - RETURN(RESERVE_SPACE); - } -yy111: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy112; -yy112: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)/2; - parser_nasm->state = INSTRUCTION; - RETURN(RESERVE_SPACE); - } -yy113: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy114; -yy114: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; - parser_nasm->state = INSTRUCTION; - RETURN(RESERVE_SPACE); - } -yy115: yych = *++YYCURSOR; - if(yych == 'O') goto yy116; - if(yych != 'o') goto yy51; - goto yy116; -yy116: yych = *++YYCURSOR; - if(yych == 'R') goto yy117; - if(yych != 'r') goto yy51; - goto yy117; -yy117: yych = *++YYCURSOR; - if(yych == 'D') goto yy118; - if(yych != 'd') goto yy51; - goto yy118; -yy118: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy119; -yy119: -{ - lvalp->int_info = 256; - RETURN(SIZE_OVERRIDE); - } -yy120: yych = *++YYCURSOR; - if(yych == 'O') goto yy121; - if(yych != 'o') goto yy51; - goto yy121; -yy121: yych = *++YYCURSOR; - if(yych == 'R') goto yy122; - if(yych != 'r') goto yy51; - goto yy122; -yy122: yych = *++YYCURSOR; - if(yych == 'D') goto yy123; - if(yych != 'd') goto yy51; - goto yy123; -yy123: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy124; -yy124: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; - RETURN(SIZE_OVERRIDE); - } -yy125: yych = *++YYCURSOR; - if(yych == 'M') goto yy131; - if(yych == 'm') goto yy131; - goto yy51; -yy126: yych = *++YYCURSOR; - if(yych == 'O') goto yy127; - if(yych != 'o') goto yy51; - goto yy127; -yy127: yych = *++YYCURSOR; - if(yych == 'R') goto yy128; - if(yych != 'r') goto yy51; - goto yy128; -yy128: yych = *++YYCURSOR; - if(yych == 'D') goto yy129; - if(yych != 'd') goto yy51; - goto yy129; -yy129: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy130; -yy130: -{ lvalp->int_info = 80; RETURN(SIZE_OVERRIDE); } -yy131: yych = *++YYCURSOR; - if(yych == 'E') goto yy132; - if(yych != 'e') goto yy51; - goto yy132; -yy132: yych = *++YYCURSOR; - if(yych == 'S') goto yy133; - if(yych != 's') goto yy51; - goto yy133; -yy133: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy134; -yy134: -{ RETURN(TIMES); } -yy135: yych = *++YYCURSOR; - if(yych == 'O') goto yy136; - if(yych != 'o') goto yy51; - goto yy136; -yy136: yych = *++YYCURSOR; - if(yych == 'R') goto yy137; - if(yych != 'r') goto yy51; - goto yy137; -yy137: yych = *++YYCURSOR; - if(yych == 'D') goto yy138; - if(yych != 'd') goto yy51; - goto yy138; -yy138: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy139; -yy139: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*4; - RETURN(SIZE_OVERRIDE); - } -yy140: yych = *++YYCURSOR; - if(yych == 'N') goto yy141; - if(yych != 'n') goto yy51; - goto yy141; -yy141: yych = *++YYCURSOR; - if(yych == 'G') goto yy142; - if(yych != 'g') goto yy51; - goto yy142; -yy142: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy143; -yy143: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; - RETURN(SIZE_OVERRIDE); - } -yy144: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy145; -yy145: -{ - lvalp->int_info = 8; - parser_nasm->state = INSTRUCTION; - RETURN(DECLARE_DATA); - } -yy146: yych = *++YYCURSOR; - if(yych <= 'Q'){ - if(yych <= '.'){ - if(yych <= '"') goto yy147; - if(yych <= '$') goto yy50; - if(yych >= '.') goto yy50; - goto yy147; - } else { - if(yych <= '9'){ - if(yych >= '0') goto yy50; - goto yy147; - } else { - if(yych <= '>') goto yy147; - if(yych <= 'P') goto yy50; - goto yy168; - } - } - } else { - if(yych <= 'p'){ - if(yych <= '^'){ - if(yych <= 'Z') goto yy50; - goto yy147; - } else { - if(yych != '`') goto yy50; - goto yy147; - } - } else { - if(yych <= 'z'){ - if(yych <= 'q') goto yy168; - goto yy50; - } else { - if(yych == '~') goto yy50; - goto yy147; - } - } - } -yy147: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; - parser_nasm->state = INSTRUCTION; - RETURN(DECLARE_DATA); - } -yy148: yych = *++YYCURSOR; - if(yych == 'W') goto yy166; - if(yych == 'w') goto yy166; - goto yy51; -yy149: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy150; -yy150: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; - parser_nasm->state = INSTRUCTION; - RETURN(DECLARE_DATA); - } -yy151: yych = *++YYCURSOR; - if(yych <= 'W'){ - if(yych <= '.'){ - if(yych <= '"') goto yy152; - if(yych <= '$') goto yy50; - if(yych >= '.') goto yy50; - goto yy152; - } else { - if(yych <= '9'){ - if(yych >= '0') goto yy50; - goto yy152; - } else { - if(yych <= '>') goto yy152; - if(yych <= 'V') goto yy50; - goto yy161; - } - } - } else { - if(yych <= 'v'){ - if(yych <= '^'){ - if(yych <= 'Z') goto yy50; - goto yy152; - } else { - if(yych != '`') goto yy50; - goto yy152; - } - } else { - if(yych <= 'z'){ - if(yych <= 'w') goto yy161; - goto yy50; - } else { - if(yych == '~') goto yy50; - goto yy152; - } - } - } -yy152: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*4; - parser_nasm->state = INSTRUCTION; - RETURN(DECLARE_DATA); - } -yy153: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy154; -yy154: -{ - lvalp->int_info = 80; - parser_nasm->state = INSTRUCTION; - RETURN(DECLARE_DATA); - } -yy155: yych = *++YYCURSOR; - if(yych <= 'O'){ - if(yych <= '.'){ - if(yych <= '"') goto yy156; - if(yych <= '$') goto yy50; - if(yych >= '.') goto yy50; - goto yy156; - } else { - if(yych <= '9'){ - if(yych >= '0') goto yy50; - goto yy156; - } else { - if(yych <= '>') goto yy156; - if(yych <= 'N') goto yy50; - goto yy159; - } - } - } else { - if(yych <= 'n'){ - if(yych <= '^'){ - if(yych <= 'Z') goto yy50; - goto yy156; - } else { - if(yych != '`') goto yy50; - goto yy156; - } - } else { - if(yych <= 'z'){ - if(yych <= 'o') goto yy159; - goto yy50; - } else { - if(yych == '~') goto yy50; - goto yy156; - } - } - } -yy156: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch); - parser_nasm->state = INSTRUCTION; - RETURN(DECLARE_DATA); - } -yy157: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy158; -yy158: -{ - lvalp->int_info = 256; - parser_nasm->state = INSTRUCTION; - RETURN(DECLARE_DATA); - } -yy159: yych = *++YYCURSOR; - if(yych == 'R') goto yy160; - if(yych != 'r') goto yy51; - goto yy160; -yy160: yych = *++YYCURSOR; - if(yych == 'D') goto yy142; - if(yych == 'd') goto yy142; - goto yy51; -yy161: yych = *++YYCURSOR; - if(yych == 'O') goto yy162; - if(yych != 'o') goto yy51; - goto yy162; -yy162: yych = *++YYCURSOR; - if(yych == 'R') goto yy163; - if(yych != 'r') goto yy51; - goto yy163; -yy163: yych = *++YYCURSOR; - if(yych == 'D') goto yy164; - if(yych != 'd') goto yy51; - goto yy164; -yy164: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy165; -yy165: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; - RETURN(SIZE_OVERRIDE); - } -yy166: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy167; -yy167: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)/2; - parser_nasm->state = INSTRUCTION; - RETURN(DECLARE_DATA); - } -yy168: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy169; -yy169: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; - parser_nasm->state = INSTRUCTION; - RETURN(DECLARE_DATA); - } -yy170: yych = *++YYCURSOR; - if(yych == 'R') goto yy174; - if(yych == 'r') goto yy174; - goto yy51; -yy171: yych = *++YYCURSOR; - if(yych == 'T') goto yy172; - if(yych != 't') goto yy51; - goto yy172; -yy172: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy173; -yy173: -{ RETURN(WRT); } -yy174: yych = *++YYCURSOR; - if(yych == 'D') goto yy175; - if(yych != 'd') goto yy51; - goto yy175; -yy175: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy176; -yy176: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch); - RETURN(SIZE_OVERRIDE); - } -yy177: yych = *++YYCURSOR; - if(yych == 'O') goto yy178; - if(yych != 'o') goto yy51; - goto yy178; -yy178: yych = *++YYCURSOR; - if(yych == 'R') goto yy179; - if(yych != 'r') goto yy51; - goto yy179; -yy179: yych = *++YYCURSOR; - if(yych == 'D') goto yy180; - if(yych != 'd') goto yy51; - goto yy180; -yy180: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy181; -yy181: -{ - lvalp->int_info = yasm_arch_wordsize(p_object->arch)/2; - RETURN(SIZE_OVERRIDE); - } -yy182: yych = *++YYCURSOR; - if(yych == 'T') goto yy183; - if(yych != 't') goto yy51; - goto yy183; -yy183: yych = *++YYCURSOR; - if(yych == 'E') goto yy184; - if(yych != 'e') goto yy51; - goto yy184; -yy184: yych = *++YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy50; - } - goto yy185; -yy185: -{ lvalp->int_info = 8; RETURN(SIZE_OVERRIDE); } -yy186: yych = *++YYCURSOR; - goto yy187; -yy187: -{ RETURN(SIGNMOD); } -yy188: yych = *++YYCURSOR; - if(yych == 'i') goto yy190; - goto yy189; -yy189: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; - case 3: goto yy225; - case 2: goto yy205; - case 1: goto yy8; - } -yy190: yych = *++YYCURSOR; - if(yych != 'n') goto yy189; - goto yy191; -yy191: yych = *++YYCURSOR; - if(yych != 'e') goto yy189; - goto yy192; -yy192: yych = *++YYCURSOR; - goto yy193; -yy193: -{ - parser_nasm->state = LINECHG; - linechg_numcount = 0; - RETURN(LINE); - } -yy194: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy195; -yy195: if(yych <= '>'){ - if(yych <= '-'){ - if(yych <= '"') goto yy196; - if(yych <= '$') goto yy194; - goto yy196; - } else { - if(yych == '/') goto yy196; - if(yych <= '9') goto yy194; - goto yy196; - } - } else { - if(yych <= '`'){ - if(yych <= 'Z') goto yy194; - if(yych == '_') goto yy194; - goto yy196; - } else { - if(yych <= 'z') goto yy194; - if(yych == '~') goto yy194; - goto yy196; - } - } -yy196: -{ - if (TOK[1] == '.' || - (parser_nasm->tasm && TOK[1] == '@' && TOK[2] == '@')) { - /* handle like .label */ - RETURN(handle_dot_label(lvalp, TOK, TOKLEN, 1, parser_nasm)); - } - lvalp->str_val = yasm__xstrndup(TOK+1, TOKLEN-1); - RETURN(ID); - } -yy197: yych = *++YYCURSOR; - if(yych <= '>'){ - if(yych <= '-'){ - if(yych <= '"') goto yy198; - if(yych <= '$') goto yy194; - goto yy198; - } else { - if(yych == '/') goto yy198; - if(yych <= '9') goto yy194; - goto yy198; - } - } else { - if(yych <= '`'){ - if(yych <= 'Z') goto yy194; - if(yych == '_') goto yy194; - goto yy198; - } else { - if(yych <= 'z') goto yy194; - if(yych == '~') goto yy194; - goto yy198; - } - } -yy198: -{ RETURN(START_SECTION_ID); } -yy199: yych = *++YYCURSOR; - if(yybm[0+yych] & 4) { - goto yy200; - } - goto yy195; -yy200: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy201; -yy201: if(yybm[0+yych] & 4) { - goto yy200; - } - if(yych <= '>'){ - if(yych <= '$'){ - if(yych >= '#') goto yy194; - goto yy202; - } else { - if(yych == '.') goto yy194; - goto yy202; - } - } else { - if(yych <= 'z'){ - if(yych <= 'Z') goto yy194; - if(yych >= 'g') goto yy194; - goto yy202; - } else { - if(yych == '~') goto yy194; - goto yy202; - } - } -yy202: -{ - savech = s->tok[TOKLEN]; - s->tok[TOKLEN] = '\0'; - if (s->tok[1] == 'x' || s->tok[1] == 'X') - /* skip 0 and x */ - lvalp->intn = yasm_intnum_create_hex(TOK+2); - else - /* don't skip 0 */ - lvalp->intn = yasm_intnum_create_hex(TOK+1); - s->tok[TOKLEN] = savech; - RETURN(INTNUM); - } -yy203: yyaccept = 2; - YYMARKER = ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); - yych = *YYCURSOR; - goto yy204; -yy204: if(yybm[0+yych] & 8) { - goto yy203; - } - if(yych == 'E') goto yy212; - if(yych == 'e') goto yy212; - goto yy205; -yy205: -{ - savech = s->tok[TOKLEN]; - s->tok[TOKLEN] = '\0'; - lvalp->flt = yasm_floatnum_create(TOK); - s->tok[TOKLEN] = savech; - RETURN(FLTNUM); - } -yy206: yyaccept = 0; - YYMARKER = ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy207; -yy207: if(yych <= 'G'){ - if(yych <= '/'){ - if(yych == '.') goto yy203; - goto yy3; - } else { - if(yych <= '9') goto yy206; - if(yych <= '@') goto yy3; - if(yych >= 'G') goto yy3; - goto yy208; - } - } else { - if(yych <= '`'){ - if(yych <= 'H') goto yy210; - if(yych != '_') goto yy3; - goto yy208; - } else { - if(yych <= 'f') goto yy208; - if(yych == 'h') goto yy210; - goto yy3; - } - } -yy208: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy209; -yy209: if(yych <= 'H'){ - if(yych <= '@'){ - if(yych <= '/') goto yy189; - if(yych <= '9') goto yy208; - goto yy189; - } else { - if(yych <= 'F') goto yy208; - if(yych <= 'G') goto yy189; - goto yy210; - } - } else { - if(yych <= '`'){ - if(yych == '_') goto yy208; - goto yy189; - } else { - if(yych <= 'f') goto yy208; - if(yych != 'h') goto yy189; - goto yy210; - } - } -yy210: yych = *++YYCURSOR; - goto yy211; -yy211: -{ - s->tok[TOKLEN-1] = '\0'; /* strip off 'h' */ - lvalp->intn = yasm_intnum_create_hex(TOK); - RETURN(INTNUM); - } -yy212: yych = *++YYCURSOR; - if(yych <= ','){ - if(yych != '+') goto yy189; - goto yy213; - } else { - if(yych <= '-') goto yy213; - if(yych <= '/') goto yy189; - if(yych <= '9') goto yy214; - goto yy189; - } -yy213: yych = *++YYCURSOR; - if(yych <= '/') goto yy189; - if(yych >= ':') goto yy189; - goto yy214; -yy214: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy215; -yy215: if(yych <= '/') goto yy205; - if(yych <= '9') goto yy214; - goto yy205; -yy216: yyaccept = 0; - YYMARKER = ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy217; -yy217: if(yybm[0+yych] & 16) { - goto yy216; - } - if(yych <= 'P'){ - if(yych <= '@'){ - if(yych <= '.'){ - if(yych <= '-') goto yy3; - goto yy203; - } else { - if(yych <= '/') goto yy3; - if(yych <= '9') goto yy206; - goto yy3; - } - } else { - if(yych <= 'H'){ - if(yych <= 'F') goto yy208; - if(yych <= 'G') goto yy3; - goto yy210; - } else { - if(yych == 'O') goto yy220; - goto yy3; - } - } - } else { - if(yych <= 'g'){ - if(yych <= '_'){ - if(yych <= 'Q') goto yy220; - if(yych <= '^') goto yy3; - goto yy218; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'f') goto yy208; - goto yy3; - } - } else { - if(yych <= 'o'){ - if(yych <= 'h') goto yy210; - if(yych <= 'n') goto yy3; - goto yy220; - } else { - if(yych == 'q') goto yy220; - goto yy3; - } - } - } -yy218: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy219; -yy219: if(yybm[0+yych] & 32) { - goto yy218; - } - if(yych <= 'P'){ - if(yych <= 'F'){ - if(yych <= '7') goto yy189; - if(yych <= '9') goto yy208; - if(yych <= '@') goto yy189; - goto yy208; - } else { - if(yych <= 'H'){ - if(yych <= 'G') goto yy189; - goto yy210; - } else { - if(yych != 'O') goto yy189; - goto yy220; - } - } - } else { - if(yych <= 'h'){ - if(yych <= '`'){ - if(yych >= 'R') goto yy189; - goto yy220; - } else { - if(yych <= 'f') goto yy208; - if(yych <= 'g') goto yy189; - goto yy210; - } - } else { - if(yych <= 'o'){ - if(yych <= 'n') goto yy189; - goto yy220; - } else { - if(yych != 'q') goto yy189; - goto yy220; - } - } - } -yy220: yych = *++YYCURSOR; - goto yy221; -yy221: -{ - s->tok[TOKLEN-1] = '\0'; /* strip off 'q' or 'o' */ - lvalp->intn = yasm_intnum_create_oct(TOK); - RETURN(INTNUM); - } -yy222: yyaccept = 0; - YYMARKER = ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - goto yy223; -yy223: if(yybm[0+yych] & 64) { - goto yy222; - } - switch(yych){ - case '.': goto yy203; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy216; - case '8': - case '9': goto yy206; - case 'A': case 'C': - case 'D': - case 'E': - case 'F': case 'a': case 'c': - case 'd': - case 'e': - case 'f': goto yy208; - case 'B': case 'b': goto yy224; - case 'H': case 'h': goto yy210; - case 'O': case 'Q': case 'o': case 'q': goto yy220; - case '_': goto yy226; - default: goto yy3; - } -yy224: yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H'){ - if(yych <= '@'){ - if(yych <= '/') goto yy225; - if(yych <= '9') goto yy208; - goto yy225; - } else { - if(yych <= 'F') goto yy208; - if(yych >= 'H') goto yy210; - goto yy225; - } - } else { - if(yych <= '`'){ - if(yych == '_') goto yy208; - goto yy225; - } else { - if(yych <= 'f') goto yy208; - if(yych == 'h') goto yy210; - goto yy225; - } - } -yy225: -{ - s->tok[TOKLEN-1] = '\0'; /* strip off 'b' */ - lvalp->intn = yasm_intnum_create_bin(TOK); - RETURN(INTNUM); - } -yy226: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - goto yy227; -yy227: if(yybm[0+yych] & 128) { - goto yy226; - } - switch(yych){ - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy218; - case '8': - case '9': case 'A': case 'C': - case 'D': - case 'E': - case 'F': case 'a': case 'c': - case 'd': - case 'e': - case 'f': goto yy208; - case 'B': case 'b': goto yy224; - case 'H': case 'h': goto yy210; - case 'O': case 'Q': case 'o': case 'q': goto yy220; - default: goto yy189; - } -yy228: yych = *++YYCURSOR; - if(yych <= 'F'){ - if(yych <= '/') goto yy189; - if(yych <= '9') goto yy229; - if(yych <= '@') goto yy189; - goto yy229; - } else { - if(yych <= '_'){ - if(yych <= '^') goto yy189; - goto yy229; - } else { - if(yych <= '`') goto yy189; - if(yych >= 'g') goto yy189; - goto yy229; - } - } -yy229: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy230; -yy230: if(yych <= 'F'){ - if(yych <= '/') goto yy202; - if(yych <= '9') goto yy229; - if(yych <= '@') goto yy202; - goto yy229; - } else { - if(yych <= '_'){ - if(yych <= '^') goto yy202; - goto yy229; - } else { - if(yych <= '`') goto yy202; - if(yych <= 'f') goto yy229; - goto yy202; - } - } -} -} - - - /* %line linenum+lineinc filename */ -linechg: - SCANINIT(); - if (*cursor == '\0') - goto endofinput; - - { - static unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 0, 0, 0, 64, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 64, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - }; - -{ - YYCTYPE yych; - goto yy231; - ++YYCURSOR; -yy231: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= '\037'){ - if(yych <= '\t'){ - if(yych <= '\000') goto yy235; - if(yych <= '\b') goto yy241; - goto yy239; - } else { - if(yych == '\r') goto yy239; - goto yy241; - } - } else { - if(yych <= '+'){ - if(yych <= ' ') goto yy239; - if(yych <= '*') goto yy241; - goto yy237; - } else { - if(yych <= '/') goto yy241; - if(yych >= ':') goto yy241; - goto yy233; - } - } -yy233: yych = *++YYCURSOR; - goto yy246; -yy234: -{ - linechg_numcount++; - savech = s->tok[TOKLEN]; - s->tok[TOKLEN] = '\0'; - lvalp->intn = yasm_intnum_create_dec(TOK); - s->tok[TOKLEN] = savech; - RETURN(INTNUM); - } -yy235: yych = *++YYCURSOR; - goto yy236; -yy236: -{ goto endofinput; } -yy237: yych = *++YYCURSOR; - goto yy238; -yy238: -{ - RETURN(s->tok[0]); - } -yy239: yych = *++YYCURSOR; - goto yy244; -yy240: -{ - if (linechg_numcount == 2) { - parser_nasm->state = LINECHG2; - goto linechg2; - } - goto linechg; - } -yy241: yych = *++YYCURSOR; - goto yy242; -yy242: -{ - yasm_warn_set(YASM_WARN_UNREC_CHAR, - N_("ignoring unrecognized character `%s'"), - yasm__conv_unprint(s->tok[0])); - goto linechg; - } -yy243: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy244; -yy244: if(yybm[0+yych] & 64) { - goto yy243; - } - goto yy240; -yy245: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy246; -yy246: if(yybm[0+yych] & 128) { - goto yy245; - } - goto yy234; -} -} - - -linechg2: - SCANINIT(); - if (*cursor == '\0') - goto endofinput; - - { - static unsigned char yybm[] = { - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - }; - -{ - YYCTYPE yych; - goto yy247; - ++YYCURSOR; -yy247: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= '\000') goto yy249; - if(yych == '\r') goto yy251; - goto yy253; -yy249: yych = *++YYCURSOR; - goto yy250; -yy250: -{ goto endofinput; } -yy251: yych = *++YYCURSOR; - if(yybm[0+yych] & 128) { - goto yy253; - } - goto yy252; -yy252: -{ goto linechg2; } -yy253: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy254; -yy254: if(yybm[0+yych] & 128) { - goto yy253; - } - goto yy255; -yy255: -{ - parser_nasm->state = LINECHG; - lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); - RETURN(FILENAME); - } -} -} - - - /* directive: [name value] */ -directive: - SCANINIT(); - if (*cursor == '\0') - goto endofinput; - - { - static unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 0, 0, 0, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 128, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - }; - -{ - YYCTYPE yych; - goto yy256; - ++YYCURSOR; -yy256: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= ']'){ - if(yych <= '@'){ - if(yych >= '\001') goto yy263; - goto yy258; - } else { - if(yych <= 'Z') goto yy261; - if(yych <= '\\') goto yy263; - goto yy260; - } - } else { - if(yych <= '_'){ - if(yych <= '^') goto yy263; - goto yy261; - } else { - if(yych <= '`') goto yy263; - if(yych <= 'z') goto yy261; - goto yy263; - } - } -yy258: yych = *++YYCURSOR; - goto yy259; -yy259: -{ goto endofinput; } -yy260: yych = *++YYCURSOR; - goto yy259; -yy261: yych = *++YYCURSOR; - goto yy266; -yy262: -{ - lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); - if (yasm__strcasecmp(lvalp->str_val, "section") == 0 || - yasm__strcasecmp(lvalp->str_val, "segment") == 0) - parser_nasm->state = SECTION_DIRECTIVE; - else - parser_nasm->state = DIRECTIVE2; - RETURN(DIRECTIVE_NAME); - } -yy263: yych = *++YYCURSOR; - goto yy264; -yy264: -{ - yasm_warn_set(YASM_WARN_UNREC_CHAR, - N_("ignoring unrecognized character `%s'"), - yasm__conv_unprint(s->tok[0])); - goto directive; - } -yy265: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy266; -yy266: if(yybm[0+yych] & 128) { - goto yy265; - } - goto yy262; -} -} - - - /* section directive (the section name portion thereof) */ -section_directive: - SCANINIT(); - if (*cursor == '\0') - goto endofinput; - - { - static unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 0, 0, 0, 64, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 64, 0, 0, 128, 128, 0, 0, 0, - 0, 0, 0, 0, 0, 128, 128, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 0, 0, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 128, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 128, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - }; - -{ - YYCTYPE yych; - goto yy267; - ++YYCURSOR; -yy267: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= ','){ - if(yych <= '\037'){ - if(yych <= '\t'){ - if(yych <= '\000') goto yy275; - if(yych <= '\b') goto yy278; - goto yy273; - } else { - if(yych == '\r') goto yy273; - goto yy278; - } - } else { - if(yych <= '"'){ - if(yych <= ' ') goto yy273; - if(yych <= '!') goto yy278; - goto yy271; - } else { - if(yych <= '$') goto yy269; - if(yych == '\'') goto yy271; - goto yy278; - } - } - } else { - if(yych <= ']'){ - if(yych <= '9'){ - if(yych == '/') goto yy278; - goto yy269; - } else { - if(yych <= '>') goto yy278; - if(yych <= 'Z') goto yy269; - if(yych <= '\\') goto yy278; - goto yy277; - } - } else { - if(yych <= '`'){ - if(yych != '_') goto yy278; - goto yy269; - } else { - if(yych <= 'z') goto yy269; - if(yych != '~') goto yy278; - goto yy269; - } - } - } -yy269: yych = *++YYCURSOR; - goto yy283; -yy270: -{ - lvalp->str.contents = yasm__xstrndup(TOK, TOKLEN); - lvalp->str.len = TOKLEN; - parser_nasm->state = DIRECTIVE2; - RETURN(STRING); - } -yy271: yych = *++YYCURSOR; - goto yy272; -yy272: -{ - parser_nasm->state = DIRECTIVE2; - endch = s->tok[0]; - goto stringconst; - } -yy273: yych = *++YYCURSOR; - goto yy281; -yy274: -{ - parser_nasm->state = DIRECTIVE2; - goto section_directive; - } -yy275: yych = *++YYCURSOR; - goto yy276; -yy276: -{ goto endofinput; } -yy277: yych = *++YYCURSOR; - goto yy276; -yy278: yych = *++YYCURSOR; - goto yy279; -yy279: -{ - yasm_warn_set(YASM_WARN_UNREC_CHAR, - N_("ignoring unrecognized character `%s'"), - yasm__conv_unprint(s->tok[0])); - goto section_directive; - } -yy280: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy281; -yy281: if(yybm[0+yych] & 64) { - goto yy280; - } - goto yy274; -yy282: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy283; -yy283: if(yybm[0+yych] & 128) { - goto yy282; - } - goto yy270; -} -} - - - /* inner part of directive */ -directive2: - SCANINIT(); - if (*cursor == '\0') - goto endofinput; - - { - static unsigned char yybm[] = { - 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 1, - 255, 255, 63, 63, 63, 63, 63, 63, - 15, 15, 1, 1, 1, 1, 1, 3, - 3, 7, 7, 7, 7, 7, 7, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 1, 1, 1, 1, 167, - 1, 7, 7, 7, 7, 7, 7, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 1, 1, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 128, 0, 0, 0, 128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 128, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - }; - -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy284; - ++YYCURSOR; -yy284: - if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); - yych = *YYCURSOR; - if(yych <= '7'){ - if(yych <= '#'){ - if(yych <= '\r'){ - if(yych <= '\b'){ - if(yych <= '\000') goto yy309; - goto yy311; - } else { - if(yych <= '\t') goto yy307; - if(yych <= '\f') goto yy311; - goto yy307; - } - } else { - if(yych <= ' '){ - if(yych <= '\037') goto yy311; - goto yy307; - } else { - if(yych == '"') goto yy293; - goto yy311; - } - } - } else { - if(yych <= '-'){ - if(yych <= '%'){ - if(yych <= '$') goto yy291; - goto yy299; - } else { - if(yych == '\'') goto yy293; - goto yy300; - } - } else { - if(yych <= '/'){ - if(yych <= '.') goto yy303; - goto yy298; - } else { - if(yych <= '0') goto yy286; - if(yych <= '1') goto yy288; - goto yy289; - } - } - } - } else { - if(yych <= '['){ - if(yych <= '='){ - if(yych <= ':'){ - if(yych <= '9') goto yy290; - goto yy300; - } else { - if(yych <= ';') goto yy305; - if(yych <= '<') goto yy295; - goto yy300; - } - } else { - if(yych <= '?'){ - if(yych <= '>') goto yy297; - goto yy303; - } else { - if(yych <= '@') goto yy311; - if(yych <= 'Z') goto yy303; - goto yy300; - } - } - } else { - if(yych <= '`'){ - if(yych <= ']'){ - if(yych <= '\\') goto yy311; - goto yy301; - } else { - if(yych <= '^') goto yy300; - if(yych <= '_') goto yy303; - goto yy311; - } - } else { - if(yych <= '|'){ - if(yych <= 'z') goto yy303; - if(yych <= '{') goto yy311; - goto yy300; - } else { - if(yych == '~') goto yy300; - goto yy311; - } - } - } - } -yy286: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'X') goto yy352; - if(yych == 'x') goto yy352; - goto yy347; -yy287: -{ - savech = s->tok[TOKLEN]; - s->tok[TOKLEN] = '\0'; - lvalp->intn = yasm_intnum_create_dec(TOK); - s->tok[TOKLEN] = savech; - RETURN(INTNUM); - } -yy288: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - goto yy347; -yy289: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - goto yy341; -yy290: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - goto yy334; -yy291: yych = *++YYCURSOR; - if(yych <= '>'){ - if(yych <= '-'){ - if(yych <= '"') goto yy292; - if(yych <= '$') goto yy326; - goto yy292; - } else { - if(yych <= '.') goto yy326; - if(yych <= '/') goto yy292; - if(yych <= '9') goto yy329; - goto yy292; - } - } else { - if(yych <= '`'){ - if(yych <= 'Z') goto yy326; - if(yych == '_') goto yy326; - goto yy292; - } else { - if(yych <= 'z') goto yy326; - if(yych == '~') goto yy326; - goto yy292; - } - } -yy292: -{ RETURN(s->tok[0]); } -yy293: yych = *++YYCURSOR; - goto yy294; -yy294: -{ - endch = s->tok[0]; - goto stringconst; - } -yy295: yych = *++YYCURSOR; - if(yych == '<') goto yy324; - goto yy296; -yy296: -{ - yasm_warn_set(YASM_WARN_UNREC_CHAR, - N_("ignoring unrecognized character `%s'"), - yasm__conv_unprint(s->tok[0])); - goto scan; - } -yy297: yych = *++YYCURSOR; - if(yych == '>') goto yy322; - goto yy296; -yy298: yych = *++YYCURSOR; - if(yych == '/') goto yy320; - goto yy292; -yy299: yych = *++YYCURSOR; - if(yych == '%') goto yy318; - goto yy292; -yy300: yych = *++YYCURSOR; - goto yy292; -yy301: yych = *++YYCURSOR; - goto yy302; -yy302: -{ goto endofinput; } -yy303: yych = *++YYCURSOR; - goto yy317; -yy304: -{ - savech = s->tok[TOKLEN]; - s->tok[TOKLEN] = '\0'; - switch (yasm_arch_parse_check_regtmod - (p_object->arch, TOK, TOKLEN, &lvalp->arch_data)) { - case YASM_ARCH_REG: - s->tok[TOKLEN] = savech; - RETURN(REG); - default: - s->tok[TOKLEN] = savech; - } - /* Propagate errors in case we got a warning from the arch */ - yasm_errwarn_propagate(parser_nasm->errwarns, cur_line); - /* Just an identifier, return as such. */ - lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); - RETURN(ID); - } -yy305: yych = *++YYCURSOR; - goto yy315; -yy306: -{ goto directive2; } -yy307: yych = *++YYCURSOR; - goto yy313; -yy308: -{ goto directive2; } -yy309: yych = *++YYCURSOR; - goto yy310; -yy310: -{ goto endofinput; } -yy311: yych = *++YYCURSOR; - goto yy296; -yy312: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy313; -yy313: if(yybm[256+yych] & 128) { - goto yy312; - } - goto yy308; -yy314: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy315; -yy315: if(yybm[0+yych] & 1) { - goto yy314; - } - goto yy306; -yy316: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy317; -yy317: if(yybm[0+yych] & 2) { - goto yy316; - } - goto yy304; -yy318: yych = *++YYCURSOR; - goto yy319; -yy319: -{ RETURN(SIGNMOD); } -yy320: yych = *++YYCURSOR; - goto yy321; -yy321: -{ RETURN(SIGNDIV); } -yy322: yych = *++YYCURSOR; - goto yy323; -yy323: -{ RETURN(RIGHT_OP); } -yy324: yych = *++YYCURSOR; - goto yy325; -yy325: -{ RETURN(LEFT_OP); } -yy326: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy327; -yy327: if(yych <= '>'){ - if(yych <= '-'){ - if(yych <= '"') goto yy328; - if(yych <= '$') goto yy326; - goto yy328; - } else { - if(yych == '/') goto yy328; - if(yych <= '9') goto yy326; - goto yy328; - } - } else { - if(yych <= '`'){ - if(yych <= 'Z') goto yy326; - if(yych == '_') goto yy326; - goto yy328; - } else { - if(yych <= 'z') goto yy326; - if(yych == '~') goto yy326; - goto yy328; - } - } -yy328: -{ - lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); - RETURN(ID); - } -yy329: yych = *++YYCURSOR; - if(yybm[0+yych] & 4) { - goto yy330; - } - goto yy327; -yy330: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy331; -yy331: if(yybm[0+yych] & 4) { - goto yy330; - } - if(yych <= '>'){ - if(yych <= '$'){ - if(yych >= '#') goto yy326; - goto yy332; - } else { - if(yych == '.') goto yy326; - goto yy332; - } - } else { - if(yych <= 'z'){ - if(yych <= 'Z') goto yy326; - if(yych >= 'g') goto yy326; - goto yy332; - } else { - if(yych == '~') goto yy326; - goto yy332; - } - } -yy332: -{ - savech = s->tok[TOKLEN]; - s->tok[TOKLEN] = '\0'; - if (s->tok[1] == 'x' || s->tok[1] == 'X') - /* skip 0 and x */ - lvalp->intn = yasm_intnum_create_hex(TOK+2); - else - /* don't skip 0 */ - lvalp->intn = yasm_intnum_create_hex(TOK+1); - s->tok[TOKLEN] = savech; - RETURN(INTNUM); - } -yy333: yyaccept = 0; - YYMARKER = ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy334; -yy334: if(yybm[0+yych] & 8) { - goto yy333; - } - if(yych <= '^'){ - if(yych <= 'F'){ - if(yych <= '@') goto yy287; - goto yy335; - } else { - if(yych == 'H') goto yy338; - goto yy287; - } - } else { - if(yych <= 'f'){ - if(yych == '`') goto yy287; - goto yy335; - } else { - if(yych == 'h') goto yy338; - goto yy287; - } - } -yy335: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy336; -yy336: if(yych <= 'H'){ - if(yych <= '@'){ - if(yych <= '/') goto yy337; - if(yych <= '9') goto yy335; - goto yy337; - } else { - if(yych <= 'F') goto yy335; - if(yych >= 'H') goto yy338; - goto yy337; - } - } else { - if(yych <= '`'){ - if(yych == '_') goto yy335; - goto yy337; - } else { - if(yych <= 'f') goto yy335; - if(yych == 'h') goto yy338; - goto yy337; - } - } -yy337: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy287; - case 1: goto yy349; - } -yy338: yych = *++YYCURSOR; - goto yy339; -yy339: -{ - s->tok[TOKLEN-1] = '\0'; /* strip off 'h' */ - lvalp->intn = yasm_intnum_create_hex(TOK); - RETURN(INTNUM); - } -yy340: yyaccept = 0; - YYMARKER = ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy341; -yy341: if(yybm[0+yych] & 16) { - goto yy340; - } - if(yych <= 'Q'){ - if(yych <= 'G'){ - if(yych <= '9'){ - if(yych <= '7') goto yy287; - goto yy333; - } else { - if(yych <= '@') goto yy287; - if(yych <= 'F') goto yy335; - goto yy287; - } - } else { - if(yych <= 'N'){ - if(yych <= 'H') goto yy338; - goto yy287; - } else { - if(yych == 'P') goto yy287; - goto yy344; - } - } - } else { - if(yych <= 'g'){ - if(yych <= '_'){ - if(yych <= '^') goto yy287; - goto yy342; - } else { - if(yych <= '`') goto yy287; - if(yych <= 'f') goto yy335; - goto yy287; - } - } else { - if(yych <= 'o'){ - if(yych <= 'h') goto yy338; - if(yych <= 'n') goto yy287; - goto yy344; - } else { - if(yych == 'q') goto yy344; - goto yy287; - } - } - } -yy342: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy343; -yy343: if(yybm[0+yych] & 32) { - goto yy342; - } - if(yych <= 'P'){ - if(yych <= 'F'){ - if(yych <= '7') goto yy337; - if(yych <= '9') goto yy335; - if(yych <= '@') goto yy337; - goto yy335; - } else { - if(yych <= 'H'){ - if(yych <= 'G') goto yy337; - goto yy338; - } else { - if(yych != 'O') goto yy337; - goto yy344; - } - } - } else { - if(yych <= 'h'){ - if(yych <= '`'){ - if(yych >= 'R') goto yy337; - goto yy344; - } else { - if(yych <= 'f') goto yy335; - if(yych <= 'g') goto yy337; - goto yy338; - } - } else { - if(yych <= 'o'){ - if(yych <= 'n') goto yy337; - goto yy344; - } else { - if(yych != 'q') goto yy337; - goto yy344; - } - } - } -yy344: yych = *++YYCURSOR; - goto yy345; -yy345: -{ - s->tok[TOKLEN-1] = '\0'; /* strip off 'q' or 'o' */ - lvalp->intn = yasm_intnum_create_oct(TOK); - RETURN(INTNUM); - } -yy346: yyaccept = 0; - YYMARKER = ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - goto yy347; -yy347: if(yybm[0+yych] & 64) { - goto yy346; - } - switch(yych){ - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy340; - case '8': - case '9': goto yy333; - case 'A': case 'C': - case 'D': - case 'E': - case 'F': case 'a': case 'c': - case 'd': - case 'e': - case 'f': goto yy335; - case 'B': case 'b': goto yy348; - case 'H': case 'h': goto yy338; - case 'O': case 'Q': case 'o': case 'q': goto yy344; - case '_': goto yy350; - default: goto yy287; - } -yy348: yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H'){ - if(yych <= '@'){ - if(yych <= '/') goto yy349; - if(yych <= '9') goto yy335; - goto yy349; - } else { - if(yych <= 'F') goto yy335; - if(yych >= 'H') goto yy338; - goto yy349; - } - } else { - if(yych <= '`'){ - if(yych == '_') goto yy335; - goto yy349; - } else { - if(yych <= 'f') goto yy335; - if(yych == 'h') goto yy338; - goto yy349; - } - } -yy349: -{ - s->tok[TOKLEN-1] = '\0'; /* strip off 'b' */ - lvalp->intn = yasm_intnum_create_bin(TOK); - RETURN(INTNUM); - } -yy350: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - goto yy351; -yy351: if(yybm[0+yych] & 128) { - goto yy350; - } - switch(yych){ - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy342; - case '8': - case '9': case 'A': case 'C': - case 'D': - case 'E': - case 'F': case 'a': case 'c': - case 'd': - case 'e': - case 'f': goto yy335; - case 'B': case 'b': goto yy348; - case 'H': case 'h': goto yy338; - case 'O': case 'Q': case 'o': case 'q': goto yy344; - default: goto yy337; - } -yy352: yych = *++YYCURSOR; - if(yych <= 'F'){ - if(yych <= '/') goto yy337; - if(yych <= '9') goto yy353; - if(yych <= '@') goto yy337; - goto yy353; - } else { - if(yych <= '_'){ - if(yych <= '^') goto yy337; - goto yy353; - } else { - if(yych <= '`') goto yy337; - if(yych >= 'g') goto yy337; - goto yy353; - } - } -yy353: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy354; -yy354: if(yych <= 'F'){ - if(yych <= '/') goto yy332; - if(yych <= '9') goto yy353; - if(yych <= '@') goto yy332; - goto yy353; - } else { - if(yych <= '_'){ - if(yych <= '^') goto yy332; - goto yy353; - } else { - if(yych <= '`') goto yy332; - if(yych <= 'f') goto yy353; - goto yy332; - } - } -} -} - - - /* string/character constant values */ -stringconst: - strbuf = yasm_xmalloc(STRBUF_ALLOC_SIZE); - strbuf_size = STRBUF_ALLOC_SIZE; - count = 0; - -stringconst_scan: - SCANINIT(); - if (*cursor == '\0') - goto stringconst_error; - - { - -{ - YYCTYPE yych; - goto yy355; - ++YYCURSOR; -yy355: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= '"'){ - if(yych <= '\000') goto yy357; - if(yych <= '!') goto yy362; - goto yy361; - } else { - if(yych == '\'') goto yy359; - goto yy362; - } -yy357: yych = *++YYCURSOR; - goto yy358; -yy358: -{ goto stringconst_error; } -yy359: yych = *++YYCURSOR; - if(yych == '\'') goto yy363; - goto yy360; -yy360: -{ - if (s->tok[0] == endch) - goto stringconst_end; - - strbuf[count++] = s->tok[0]; - if (count >= strbuf_size) { - strbuf = yasm_xrealloc(strbuf, strbuf_size + STRBUF_ALLOC_SIZE); - strbuf_size += STRBUF_ALLOC_SIZE; - } - - goto stringconst_scan; - } -yy361: yych = *++YYCURSOR; - if(yych == '"') goto yy363; - goto yy360; -yy362: yych = *++YYCURSOR; - goto yy360; -yy363: yych = *++YYCURSOR; - goto yy364; -yy364: -{ - if (endch != s->tok[0]) { - strbuf[count++] = s->tok[0]; - if (count >= strbuf_size) { - strbuf = yasm_xrealloc(strbuf, - strbuf_size + STRBUF_ALLOC_SIZE); - strbuf_size += STRBUF_ALLOC_SIZE; - } - } else if (!parser_nasm->tasm) { - YYCURSOR--; - goto stringconst_end; - } - strbuf[count++] = s->tok[0]; - if (count >= strbuf_size) { - strbuf = yasm_xrealloc(strbuf, strbuf_size + STRBUF_ALLOC_SIZE); - strbuf_size += STRBUF_ALLOC_SIZE; - } - goto stringconst_scan; - } -} -} - - -stringconst_error: - yasm_error_set(YASM_ERROR_SYNTAX, N_("unterminated string")); - -stringconst_end: - strbuf[count] = '\0'; - lvalp->str.contents = (char *)strbuf; - lvalp->str.len = count; - RETURN(STRING); - -endofinput: - parser_nasm->state = INITIAL; - RETURN(s->tok[0]); -} - +/* Generated by re2c + */ +/* + * NASM-compatible re2c lexer + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Portions based on re2c's example code. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#include <util.h> + +#include <libyasm.h> + +#include "modules/parsers/nasm/nasm-parser.h" +#include "modules/preprocs/nasm/nasm.h" + + +#define YYCURSOR cursor +#define YYLIMIT (s->lim) +#define YYMARKER (s->ptr) +#define YYFILL(n) {} + +#define RETURN(i) {s->cur = cursor; parser_nasm->tokch = s->tok[0]; \ + return i;} + +#define SCANINIT() {s->tok = cursor;} + +#define TOK ((char *)s->tok) +#define TOKLEN (size_t)(cursor-s->tok) + + +/* starting size of string buffer */ +#define STRBUF_ALLOC_SIZE 128 + +/* string buffer used when parsing strings/character constants */ +static YYCTYPE *strbuf = NULL; + +/* length of strbuf (including terminating NULL character) */ +static size_t strbuf_size = 0; + +static int linechg_numcount; + + + +static int +handle_dot_label(YYSTYPE *lvalp, char *tok, size_t toklen, size_t zeropos, + yasm_parser_nasm *parser_nasm) +{ + /* check for special non-local labels like ..start */ + if (tok[zeropos+1] == '.') { + lvalp->str_val = yasm__xstrndup(tok+zeropos+(parser_nasm->tasm?2:0), + toklen-zeropos-(parser_nasm->tasm?2:0)); + /* check for special non-local ..@label */ + if (lvalp->str_val[zeropos+2] == '@') + return NONLOCAL_ID; + return SPECIAL_ID; + } + if (parser_nasm->masm && tok[zeropos] == '.') { + lvalp->str_val = yasm__xstrndup(tok + zeropos, toklen - zeropos); + return SPECIAL_ID; + } + if (parser_nasm->tasm && (!tasm_locals || + (tok[zeropos] == '.' && + tok[zeropos+1] != '@' && tok[zeropos+2] != '@'))) { + /* no locals on Tasm without the 'locals' directive */ + /* .foo is never local either, but .@@foo may be (local structure + * members) */ + lvalp->str_val = yasm__xstrndup(tok + zeropos, toklen - zeropos); + return SPECIAL_ID; + } + if (!parser_nasm->locallabel_base) { + lvalp->str_val = yasm__xstrndup(tok+zeropos, toklen-zeropos); + yasm_warn_set(YASM_WARN_GENERAL, + N_("no non-local label before `%s'"), + lvalp->str_val); + } else { + size_t len = toklen - zeropos + parser_nasm->locallabel_base_len; + lvalp->str_val = yasm_xmalloc(len + 1); + strcpy(lvalp->str_val, parser_nasm->locallabel_base); + strncat(lvalp->str_val, tok+zeropos, toklen-zeropos); + lvalp->str_val[len] = '\0'; + } + + return LOCAL_ID; +} + +int +nasm_parser_lex(YYSTYPE *lvalp, yasm_parser_nasm *parser_nasm) +{ + yasm_scanner *s = &parser_nasm->s; + YYCTYPE *cursor = s->cur; + YYCTYPE endch; + size_t count; + YYCTYPE savech; + + /* Handle one token of lookahead */ + if (parser_nasm->peek_token != NONE) { + int tok = parser_nasm->peek_token; + *lvalp = parser_nasm->peek_tokval; /* structure copy */ + parser_nasm->tokch = parser_nasm->peek_tokch; + parser_nasm->peek_token = NONE; + return tok; + } + + /* Catch EOL (EOF from the scanner perspective) */ + if (s->eof && cursor == s->eof) + return 0; + + /* Jump to proper "exclusive" states */ + switch (parser_nasm->state) { + case DIRECTIVE: + goto directive; + case SECTION_DIRECTIVE: + goto section_directive; + case DIRECTIVE2: + goto directive2; + case LINECHG: + goto linechg; + case LINECHG2: + goto linechg2; + default: + break; + } + +scan: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + { + static unsigned char yybm[] = { + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, + 255, 255, 63, 63, 63, 63, 63, 63, + 15, 15, 1, 1, 1, 1, 1, 3, + 3, 7, 7, 7, 7, 7, 7, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 1, 1, 1, 1, 167, + 1, 7, 7, 7, 7, 7, 7, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 1, 1, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 128, 0, 0, 0, 128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }; + +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; + ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 8) YYFILL(8); + yych = *YYCURSOR; + switch(yych){ + case '\000': goto yy43; + case '\t': case '\r': case ' ': goto yy41; + case '"': case '\'': goto yy9; + case '$': goto yy7; + case '%': goto yy11; + case '&': case '(': + case ')': + case '*': + case '+': + case ',': + case '-': case ':': case '=': case '[': case '^': case '|': case '~': goto yy32; + case '.': goto yy36; + case '/': goto yy31; + case '0': goto yy2; + case '1': goto yy4; + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy5; + case '8': + case '9': goto yy6; + case ';': goto yy39; + case '<': goto yy28; + case '>': goto yy30; + case '?': goto yy33; + case '@': goto yy37; + case 'A': case 'a': goto yy26; + case 'B': case 'b': goto yy12; + case 'C': case 'F': + case 'G': case 'J': + case 'K': case 'M': case 'P': case 'U': + case 'V': case 'X': case 'Z': case '_': case 'c': case 'f': + case 'g': case 'j': + case 'k': case 'm': case 'p': case 'u': + case 'v': case 'x': case 'z': goto yy38; + case 'D': case 'd': goto yy16; + case 'E': case 'e': goto yy24; + case 'H': case 'h': goto yy14; + case 'I': case 'i': goto yy23; + case 'L': case 'l': goto yy17; + case 'N': case 'n': goto yy27; + case 'O': case 'o': goto yy20; + case 'Q': case 'q': goto yy18; + case 'R': case 'r': goto yy22; + case 'S': case 's': goto yy25; + case 'T': case 't': goto yy19; + case 'W': case 'w': goto yy15; + case 'Y': case 'y': goto yy21; + case ']': goto yy34; + default: goto yy45; + } +yy2: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yybm[0+yych] & 64) { + goto yy222; + } + switch(yych){ + case '.': goto yy203; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy216; + case '8': + case '9': goto yy206; + case 'A': case 'C': + case 'D': + case 'E': + case 'F': case 'a': case 'c': + case 'd': + case 'e': + case 'f': goto yy208; + case 'B': case 'b': goto yy224; + case 'H': case 'h': goto yy210; + case 'O': case 'Q': case 'o': case 'q': goto yy220; + case 'X': case 'x': goto yy228; + case '_': goto yy226; + default: goto yy3; + } +yy3: +{ + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->intn = yasm_intnum_create_dec(TOK); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } +yy4: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yybm[0+yych] & 64) { + goto yy222; + } + switch(yych){ + case '.': goto yy203; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy216; + case '8': + case '9': goto yy206; + case 'A': case 'C': + case 'D': + case 'E': + case 'F': case 'a': case 'c': + case 'd': + case 'e': + case 'f': goto yy208; + case 'B': case 'b': goto yy224; + case 'H': case 'h': goto yy210; + case 'O': case 'Q': case 'o': case 'q': goto yy220; + case '_': goto yy226; + default: goto yy3; + } +yy5: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yybm[0+yych] & 16) { + goto yy216; + } + if(yych <= 'P'){ + if(yych <= '@'){ + if(yych <= '.'){ + if(yych <= '-') goto yy3; + goto yy203; + } else { + if(yych <= '/') goto yy3; + if(yych <= '9') goto yy206; + goto yy3; + } + } else { + if(yych <= 'H'){ + if(yych <= 'F') goto yy208; + if(yych <= 'G') goto yy3; + goto yy210; + } else { + if(yych == 'O') goto yy220; + goto yy3; + } + } + } else { + if(yych <= 'g'){ + if(yych <= '_'){ + if(yych <= 'Q') goto yy220; + if(yych <= '^') goto yy3; + goto yy218; + } else { + if(yych <= '`') goto yy3; + if(yych <= 'f') goto yy208; + goto yy3; + } + } else { + if(yych <= 'o'){ + if(yych <= 'h') goto yy210; + if(yych <= 'n') goto yy3; + goto yy220; + } else { + if(yych == 'q') goto yy220; + goto yy3; + } + } + } +yy6: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych <= 'G'){ + if(yych <= '/'){ + if(yych == '.') goto yy203; + goto yy3; + } else { + if(yych <= '9') goto yy206; + if(yych <= '@') goto yy3; + if(yych <= 'F') goto yy208; + goto yy3; + } + } else { + if(yych <= '`'){ + if(yych <= 'H') goto yy210; + if(yych == '_') goto yy208; + goto yy3; + } else { + if(yych <= 'f') goto yy208; + if(yych == 'h') goto yy210; + goto yy3; + } + } +yy7: yych = *++YYCURSOR; + if(yych <= '>'){ + if(yych <= '-'){ + if(yych <= '"') goto yy8; + if(yych <= '#') goto yy194; + if(yych <= '$') goto yy197; + goto yy8; + } else { + if(yych <= '.') goto yy194; + if(yych <= '/') goto yy8; + if(yych <= '9') goto yy199; + goto yy8; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy194; + if(yych == '_') goto yy194; + goto yy8; + } else { + if(yych <= 'z') goto yy194; + if(yych == '~') goto yy194; + goto yy8; + } + } +yy8: +{ RETURN(s->tok[0]); } +yy9: yych = *++YYCURSOR; + goto yy10; +yy10: +{ + endch = s->tok[0]; + goto stringconst; + } +yy11: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == '%') goto yy186; + if(yych == 'l') goto yy188; + goto yy8; +yy12: yych = *++YYCURSOR; + if(yych == 'Y') goto yy182; + if(yych == 'y') goto yy182; + goto yy51; +yy13: +{ + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + if (parser_nasm->state != INSTRUCTION) { + uintptr_t prefix; + switch (yasm_arch_parse_check_insnprefix + (p_object->arch, TOK, TOKLEN, cur_line, &lvalp->bc, + &prefix)) { + case YASM_ARCH_INSN: + parser_nasm->state = INSTRUCTION; + s->tok[TOKLEN] = savech; + RETURN(INSN); + case YASM_ARCH_PREFIX: + lvalp->arch_data = prefix; + s->tok[TOKLEN] = savech; + RETURN(PREFIX); + default: + break; + } + } + switch (yasm_arch_parse_check_regtmod + (p_object->arch, TOK, TOKLEN, &lvalp->arch_data)) { + case YASM_ARCH_REG: + s->tok[TOKLEN] = savech; + RETURN(REG); + case YASM_ARCH_SEGREG: + s->tok[TOKLEN] = savech; + RETURN(SEGREG); + case YASM_ARCH_TARGETMOD: + s->tok[TOKLEN] = savech; + RETURN(TARGETMOD); + case YASM_ARCH_REGGROUP: + if (parser_nasm->masm) { + s->tok[TOKLEN] = savech; + RETURN(REGGROUP); + } + default: + break; + } + if (parser_nasm->masm) { + if (!yasm__strcasecmp(TOK, "offset")) { + s->tok[TOKLEN] = savech; + RETURN(OFFSET); + } + } else if (parser_nasm->tasm) { + if (!yasm__strcasecmp(TOK, "shl")) { + s->tok[TOKLEN] = savech; + RETURN(LEFT_OP); + } + if (!yasm__strcasecmp(TOK, "shr")) { + s->tok[TOKLEN] = savech; + RETURN(RIGHT_OP); + } + if (!yasm__strcasecmp(TOK, "and")) { + s->tok[TOKLEN] = savech; + RETURN('&'); + } + if (!yasm__strcasecmp(TOK, "or")) { + s->tok[TOKLEN] = savech; + RETURN('|'); + } + if (!yasm__strcasecmp(TOK, "not")) { + s->tok[TOKLEN] = savech; + RETURN('~'); + } + if (!yasm__strcasecmp(TOK, "low")) { + s->tok[TOKLEN] = savech; + RETURN(LOW); + } + if (!yasm__strcasecmp(TOK, "high")) { + s->tok[TOKLEN] = savech; + RETURN(HIGH); + } + if (!yasm__strcasecmp(TOK, "offset")) { + s->tok[TOKLEN] = savech; + RETURN(OFFSET); + } + if (!yasm__strcasecmp(TOK, "fword")) { + s->tok[TOKLEN] = savech; + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; + RETURN(SIZE_OVERRIDE); + } + if (!yasm__strcasecmp(TOK, "df")) { + s->tok[TOKLEN] = savech; + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*3; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + if (!yasm__strcasecmp(TOK, "label")) { + s->tok[TOKLEN] = savech; + RETURN(LABEL); + } + if (!yasm__strcasecmp(TOK, "dup")) { + s->tok[TOKLEN] = savech; + RETURN(DUP); + } + } + /* Propagate errors in case we got a warning from the arch */ + yasm_errwarn_propagate(parser_nasm->errwarns, cur_line); + /* Just an identifier, return as such. */ + s->tok[TOKLEN] = savech; + lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); + RETURN(ID); + } +yy14: yych = *++YYCURSOR; + if(yych == 'W') goto yy177; + if(yych == 'w') goto yy177; + goto yy51; +yy15: yych = *++YYCURSOR; + if(yych <= 'R'){ + if(yych == 'O') goto yy170; + if(yych <= 'Q') goto yy51; + goto yy171; + } else { + if(yych <= 'o'){ + if(yych <= 'n') goto yy51; + goto yy170; + } else { + if(yych == 'r') goto yy171; + goto yy51; + } + } +yy16: yych = *++YYCURSOR; + switch(yych){ + case 'B': case 'b': goto yy144; + case 'D': case 'd': goto yy146; + case 'H': case 'h': goto yy148; + case 'O': case 'o': goto yy149; + case 'Q': case 'q': goto yy151; + case 'T': case 't': goto yy153; + case 'W': case 'w': goto yy155; + case 'Y': case 'y': goto yy157; + default: goto yy51; + } +yy17: yych = *++YYCURSOR; + if(yych == 'O') goto yy140; + if(yych == 'o') goto yy140; + goto yy51; +yy18: yych = *++YYCURSOR; + if(yych == 'W') goto yy135; + if(yych == 'w') goto yy135; + goto yy51; +yy19: yych = *++YYCURSOR; + if(yych <= 'W'){ + if(yych == 'I') goto yy125; + if(yych <= 'V') goto yy51; + goto yy126; + } else { + if(yych <= 'i'){ + if(yych <= 'h') goto yy51; + goto yy125; + } else { + if(yych == 'w') goto yy126; + goto yy51; + } + } +yy20: yych = *++YYCURSOR; + if(yych == 'W') goto yy120; + if(yych == 'w') goto yy120; + goto yy51; +yy21: yych = *++YYCURSOR; + if(yych == 'W') goto yy115; + if(yych == 'w') goto yy115; + goto yy51; +yy22: yych = *++YYCURSOR; + if(yych == 'E') goto yy92; + if(yych == 'e') goto yy92; + goto yy51; +yy23: yych = *++YYCURSOR; + if(yych == 'N') goto yy86; + if(yych == 'n') goto yy86; + goto yy51; +yy24: yych = *++YYCURSOR; + if(yych == 'Q') goto yy83; + if(yych == 'q') goto yy83; + goto yy51; +yy25: yych = *++YYCURSOR; + if(yych <= 'T'){ + if(yych == 'E') goto yy74; + if(yych <= 'S') goto yy51; + goto yy75; + } else { + if(yych <= 'e'){ + if(yych <= 'd') goto yy51; + goto yy74; + } else { + if(yych == 't') goto yy75; + goto yy51; + } + } +yy26: yych = *++YYCURSOR; + if(yych == 'B') goto yy71; + if(yych == 'b') goto yy71; + goto yy51; +yy27: yych = *++YYCURSOR; + if(yych == 'O') goto yy64; + if(yych == 'o') goto yy64; + goto yy51; +yy28: yych = *++YYCURSOR; + if(yych == '<') goto yy62; + goto yy29; +yy29: +{ + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto scan; + } +yy30: yych = *++YYCURSOR; + if(yych == '>') goto yy60; + goto yy29; +yy31: yych = *++YYCURSOR; + if(yych == '/') goto yy58; + goto yy8; +yy32: yych = *++YYCURSOR; + goto yy8; +yy33: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy8; +yy34: yych = *++YYCURSOR; + goto yy35; +yy35: +{ RETURN(s->tok[0]); } +yy36: yych = *++YYCURSOR; + if(yych <= '>'){ + if(yych <= '-'){ + if(yych <= '"') goto yy29; + if(yych <= '$') goto yy56; + goto yy29; + } else { + if(yych == '/') goto yy29; + if(yych <= '9') goto yy56; + goto yy29; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy56; + if(yych == '_') goto yy56; + goto yy29; + } else { + if(yych <= 'z') goto yy56; + if(yych == '~') goto yy56; + goto yy29; + } + } +yy37: yych = *++YYCURSOR; + if(yych == '@') goto yy52; + goto yy51; +yy38: yych = *++YYCURSOR; + goto yy51; +yy39: yych = *++YYCURSOR; + goto yy49; +yy40: +{ goto scan; } +yy41: yych = *++YYCURSOR; + goto yy47; +yy42: +{ goto scan; } +yy43: yych = *++YYCURSOR; + goto yy44; +yy44: +{ goto endofinput; } +yy45: yych = *++YYCURSOR; + goto yy29; +yy46: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy47; +yy47: if(yybm[256+yych] & 128) { + goto yy46; + } + goto yy42; +yy48: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy49; +yy49: if(yybm[0+yych] & 1) { + goto yy48; + } + goto yy40; +yy50: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy51; +yy51: if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy13; +yy52: yych = *++YYCURSOR; + if(yych <= '>'){ + if(yych <= '-'){ + if(yych <= '"') goto yy13; + if(yych >= '%') goto yy13; + goto yy53; + } else { + if(yych == '/') goto yy13; + if(yych >= ':') goto yy13; + goto yy53; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy53; + if(yych != '_') goto yy13; + goto yy53; + } else { + if(yych <= 'z') goto yy53; + if(yych != '~') goto yy13; + goto yy53; + } + } +yy53: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy54; +yy54: if(yych <= '>'){ + if(yych <= '-'){ + if(yych <= '"') goto yy55; + if(yych <= '$') goto yy53; + goto yy55; + } else { + if(yych == '/') goto yy55; + if(yych <= '9') goto yy53; + goto yy55; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy53; + if(yych == '_') goto yy53; + goto yy55; + } else { + if(yych <= 'z') goto yy53; + if(yych == '~') goto yy53; + goto yy55; + } + } +yy55: +{ + RETURN(handle_dot_label(lvalp, TOK, TOKLEN, 0, parser_nasm)); + } +yy56: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy57; +yy57: if(yych <= '>'){ + if(yych <= '-'){ + if(yych <= '"') goto yy55; + if(yych <= '$') goto yy56; + goto yy55; + } else { + if(yych == '/') goto yy55; + if(yych <= '9') goto yy56; + goto yy55; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy56; + if(yych == '_') goto yy56; + goto yy55; + } else { + if(yych <= 'z') goto yy56; + if(yych == '~') goto yy56; + goto yy55; + } + } +yy58: yych = *++YYCURSOR; + goto yy59; +yy59: +{ RETURN(SIGNDIV); } +yy60: yych = *++YYCURSOR; + goto yy61; +yy61: +{ RETURN(RIGHT_OP); } +yy62: yych = *++YYCURSOR; + goto yy63; +yy63: +{ RETURN(LEFT_OP); } +yy64: yych = *++YYCURSOR; + if(yych == 'S') goto yy65; + if(yych != 's') goto yy51; + goto yy65; +yy65: yych = *++YYCURSOR; + if(yych == 'P') goto yy66; + if(yych != 'p') goto yy51; + goto yy66; +yy66: yych = *++YYCURSOR; + if(yych == 'L') goto yy67; + if(yych != 'l') goto yy51; + goto yy67; +yy67: yych = *++YYCURSOR; + if(yych == 'I') goto yy68; + if(yych != 'i') goto yy51; + goto yy68; +yy68: yych = *++YYCURSOR; + if(yych == 'T') goto yy69; + if(yych != 't') goto yy51; + goto yy69; +yy69: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy70; +yy70: +{ RETURN(NOSPLIT); } +yy71: yych = *++YYCURSOR; + if(yych == 'S') goto yy72; + if(yych != 's') goto yy51; + goto yy72; +yy72: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy73; +yy73: +{ RETURN(ABS); } +yy74: yych = *++YYCURSOR; + if(yych == 'G') goto yy81; + if(yych == 'g') goto yy81; + goto yy51; +yy75: yych = *++YYCURSOR; + if(yych == 'R') goto yy76; + if(yych != 'r') goto yy51; + goto yy76; +yy76: yych = *++YYCURSOR; + if(yych == 'I') goto yy77; + if(yych != 'i') goto yy51; + goto yy77; +yy77: yych = *++YYCURSOR; + if(yych == 'C') goto yy78; + if(yych != 'c') goto yy51; + goto yy78; +yy78: yych = *++YYCURSOR; + if(yych == 'T') goto yy79; + if(yych != 't') goto yy51; + goto yy79; +yy79: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy80; +yy80: +{ RETURN(STRICT); } +yy81: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy82; +yy82: +{ RETURN(SEG); } +yy83: yych = *++YYCURSOR; + if(yych == 'U') goto yy84; + if(yych != 'u') goto yy51; + goto yy84; +yy84: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy85; +yy85: +{ RETURN(EQU); } +yy86: yych = *++YYCURSOR; + if(yych == 'C') goto yy87; + if(yych != 'c') goto yy51; + goto yy87; +yy87: yych = *++YYCURSOR; + if(yych == 'B') goto yy88; + if(yych != 'b') goto yy51; + goto yy88; +yy88: yych = *++YYCURSOR; + if(yych == 'I') goto yy89; + if(yych != 'i') goto yy51; + goto yy89; +yy89: yych = *++YYCURSOR; + if(yych == 'N') goto yy90; + if(yych != 'n') goto yy51; + goto yy90; +yy90: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy91; +yy91: +{ RETURN(INCBIN); } +yy92: yych = *++YYCURSOR; + if(yych <= 'S'){ + if(yych == 'L') goto yy94; + if(yych <= 'R') goto yy51; + goto yy93; + } else { + if(yych <= 'l'){ + if(yych <= 'k') goto yy51; + goto yy94; + } else { + if(yych != 's') goto yy51; + goto yy93; + } + } +yy93: yych = *++YYCURSOR; + switch(yych){ + case 'B': case 'b': goto yy96; + case 'D': case 'd': goto yy98; + case 'H': case 'h': goto yy100; + case 'O': case 'o': goto yy101; + case 'Q': case 'q': goto yy103; + case 'T': case 't': goto yy105; + case 'W': case 'w': goto yy107; + case 'Y': case 'y': goto yy109; + default: goto yy51; + } +yy94: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy95; +yy95: +{ RETURN(REL); } +yy96: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy97; +yy97: +{ + lvalp->int_info = 8; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } +yy98: yych = *++YYCURSOR; + if(yych <= 'Q'){ + if(yych <= '.'){ + if(yych <= '"') goto yy99; + if(yych <= '$') goto yy50; + if(yych >= '.') goto yy50; + goto yy99; + } else { + if(yych <= '9'){ + if(yych >= '0') goto yy50; + goto yy99; + } else { + if(yych <= '>') goto yy99; + if(yych <= 'P') goto yy50; + goto yy113; + } + } + } else { + if(yych <= 'p'){ + if(yych <= '^'){ + if(yych <= 'Z') goto yy50; + goto yy99; + } else { + if(yych != '`') goto yy50; + goto yy99; + } + } else { + if(yych <= 'z'){ + if(yych <= 'q') goto yy113; + goto yy50; + } else { + if(yych == '~') goto yy50; + goto yy99; + } + } + } +yy99: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } +yy100: yych = *++YYCURSOR; + if(yych == 'W') goto yy111; + if(yych == 'w') goto yy111; + goto yy51; +yy101: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy102; +yy102: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } +yy103: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy104; +yy104: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*4; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } +yy105: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy106; +yy106: +{ + lvalp->int_info = 80; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } +yy107: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy108; +yy108: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch); + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } +yy109: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy110; +yy110: +{ + lvalp->int_info = 256; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } +yy111: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy112; +yy112: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)/2; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } +yy113: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy114; +yy114: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } +yy115: yych = *++YYCURSOR; + if(yych == 'O') goto yy116; + if(yych != 'o') goto yy51; + goto yy116; +yy116: yych = *++YYCURSOR; + if(yych == 'R') goto yy117; + if(yych != 'r') goto yy51; + goto yy117; +yy117: yych = *++YYCURSOR; + if(yych == 'D') goto yy118; + if(yych != 'd') goto yy51; + goto yy118; +yy118: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy119; +yy119: +{ + lvalp->int_info = 256; + RETURN(SIZE_OVERRIDE); + } +yy120: yych = *++YYCURSOR; + if(yych == 'O') goto yy121; + if(yych != 'o') goto yy51; + goto yy121; +yy121: yych = *++YYCURSOR; + if(yych == 'R') goto yy122; + if(yych != 'r') goto yy51; + goto yy122; +yy122: yych = *++YYCURSOR; + if(yych == 'D') goto yy123; + if(yych != 'd') goto yy51; + goto yy123; +yy123: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy124; +yy124: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + RETURN(SIZE_OVERRIDE); + } +yy125: yych = *++YYCURSOR; + if(yych == 'M') goto yy131; + if(yych == 'm') goto yy131; + goto yy51; +yy126: yych = *++YYCURSOR; + if(yych == 'O') goto yy127; + if(yych != 'o') goto yy51; + goto yy127; +yy127: yych = *++YYCURSOR; + if(yych == 'R') goto yy128; + if(yych != 'r') goto yy51; + goto yy128; +yy128: yych = *++YYCURSOR; + if(yych == 'D') goto yy129; + if(yych != 'd') goto yy51; + goto yy129; +yy129: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy130; +yy130: +{ lvalp->int_info = 80; RETURN(SIZE_OVERRIDE); } +yy131: yych = *++YYCURSOR; + if(yych == 'E') goto yy132; + if(yych != 'e') goto yy51; + goto yy132; +yy132: yych = *++YYCURSOR; + if(yych == 'S') goto yy133; + if(yych != 's') goto yy51; + goto yy133; +yy133: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy134; +yy134: +{ RETURN(TIMES); } +yy135: yych = *++YYCURSOR; + if(yych == 'O') goto yy136; + if(yych != 'o') goto yy51; + goto yy136; +yy136: yych = *++YYCURSOR; + if(yych == 'R') goto yy137; + if(yych != 'r') goto yy51; + goto yy137; +yy137: yych = *++YYCURSOR; + if(yych == 'D') goto yy138; + if(yych != 'd') goto yy51; + goto yy138; +yy138: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy139; +yy139: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*4; + RETURN(SIZE_OVERRIDE); + } +yy140: yych = *++YYCURSOR; + if(yych == 'N') goto yy141; + if(yych != 'n') goto yy51; + goto yy141; +yy141: yych = *++YYCURSOR; + if(yych == 'G') goto yy142; + if(yych != 'g') goto yy51; + goto yy142; +yy142: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy143; +yy143: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; + RETURN(SIZE_OVERRIDE); + } +yy144: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy145; +yy145: +{ + lvalp->int_info = 8; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } +yy146: yych = *++YYCURSOR; + if(yych <= 'Q'){ + if(yych <= '.'){ + if(yych <= '"') goto yy147; + if(yych <= '$') goto yy50; + if(yych >= '.') goto yy50; + goto yy147; + } else { + if(yych <= '9'){ + if(yych >= '0') goto yy50; + goto yy147; + } else { + if(yych <= '>') goto yy147; + if(yych <= 'P') goto yy50; + goto yy168; + } + } + } else { + if(yych <= 'p'){ + if(yych <= '^'){ + if(yych <= 'Z') goto yy50; + goto yy147; + } else { + if(yych != '`') goto yy50; + goto yy147; + } + } else { + if(yych <= 'z'){ + if(yych <= 'q') goto yy168; + goto yy50; + } else { + if(yych == '~') goto yy50; + goto yy147; + } + } + } +yy147: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } +yy148: yych = *++YYCURSOR; + if(yych == 'W') goto yy166; + if(yych == 'w') goto yy166; + goto yy51; +yy149: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy150; +yy150: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } +yy151: yych = *++YYCURSOR; + if(yych <= 'W'){ + if(yych <= '.'){ + if(yych <= '"') goto yy152; + if(yych <= '$') goto yy50; + if(yych >= '.') goto yy50; + goto yy152; + } else { + if(yych <= '9'){ + if(yych >= '0') goto yy50; + goto yy152; + } else { + if(yych <= '>') goto yy152; + if(yych <= 'V') goto yy50; + goto yy161; + } + } + } else { + if(yych <= 'v'){ + if(yych <= '^'){ + if(yych <= 'Z') goto yy50; + goto yy152; + } else { + if(yych != '`') goto yy50; + goto yy152; + } + } else { + if(yych <= 'z'){ + if(yych <= 'w') goto yy161; + goto yy50; + } else { + if(yych == '~') goto yy50; + goto yy152; + } + } + } +yy152: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*4; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } +yy153: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy154; +yy154: +{ + lvalp->int_info = 80; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } +yy155: yych = *++YYCURSOR; + if(yych <= 'O'){ + if(yych <= '.'){ + if(yych <= '"') goto yy156; + if(yych <= '$') goto yy50; + if(yych >= '.') goto yy50; + goto yy156; + } else { + if(yych <= '9'){ + if(yych >= '0') goto yy50; + goto yy156; + } else { + if(yych <= '>') goto yy156; + if(yych <= 'N') goto yy50; + goto yy159; + } + } + } else { + if(yych <= 'n'){ + if(yych <= '^'){ + if(yych <= 'Z') goto yy50; + goto yy156; + } else { + if(yych != '`') goto yy50; + goto yy156; + } + } else { + if(yych <= 'z'){ + if(yych <= 'o') goto yy159; + goto yy50; + } else { + if(yych == '~') goto yy50; + goto yy156; + } + } + } +yy156: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch); + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } +yy157: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy158; +yy158: +{ + lvalp->int_info = 256; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } +yy159: yych = *++YYCURSOR; + if(yych == 'R') goto yy160; + if(yych != 'r') goto yy51; + goto yy160; +yy160: yych = *++YYCURSOR; + if(yych == 'D') goto yy142; + if(yych == 'd') goto yy142; + goto yy51; +yy161: yych = *++YYCURSOR; + if(yych == 'O') goto yy162; + if(yych != 'o') goto yy51; + goto yy162; +yy162: yych = *++YYCURSOR; + if(yych == 'R') goto yy163; + if(yych != 'r') goto yy51; + goto yy163; +yy163: yych = *++YYCURSOR; + if(yych == 'D') goto yy164; + if(yych != 'd') goto yy51; + goto yy164; +yy164: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy165; +yy165: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + RETURN(SIZE_OVERRIDE); + } +yy166: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy167; +yy167: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)/2; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } +yy168: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy169; +yy169: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } +yy170: yych = *++YYCURSOR; + if(yych == 'R') goto yy174; + if(yych == 'r') goto yy174; + goto yy51; +yy171: yych = *++YYCURSOR; + if(yych == 'T') goto yy172; + if(yych != 't') goto yy51; + goto yy172; +yy172: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy173; +yy173: +{ RETURN(WRT); } +yy174: yych = *++YYCURSOR; + if(yych == 'D') goto yy175; + if(yych != 'd') goto yy51; + goto yy175; +yy175: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy176; +yy176: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch); + RETURN(SIZE_OVERRIDE); + } +yy177: yych = *++YYCURSOR; + if(yych == 'O') goto yy178; + if(yych != 'o') goto yy51; + goto yy178; +yy178: yych = *++YYCURSOR; + if(yych == 'R') goto yy179; + if(yych != 'r') goto yy51; + goto yy179; +yy179: yych = *++YYCURSOR; + if(yych == 'D') goto yy180; + if(yych != 'd') goto yy51; + goto yy180; +yy180: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy181; +yy181: +{ + lvalp->int_info = yasm_arch_wordsize(p_object->arch)/2; + RETURN(SIZE_OVERRIDE); + } +yy182: yych = *++YYCURSOR; + if(yych == 'T') goto yy183; + if(yych != 't') goto yy51; + goto yy183; +yy183: yych = *++YYCURSOR; + if(yych == 'E') goto yy184; + if(yych != 'e') goto yy51; + goto yy184; +yy184: yych = *++YYCURSOR; + if(yybm[0+yych] & 2) { + goto yy50; + } + goto yy185; +yy185: +{ lvalp->int_info = 8; RETURN(SIZE_OVERRIDE); } +yy186: yych = *++YYCURSOR; + goto yy187; +yy187: +{ RETURN(SIGNMOD); } +yy188: yych = *++YYCURSOR; + if(yych == 'i') goto yy190; + goto yy189; +yy189: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy3; + case 3: goto yy225; + case 2: goto yy205; + case 1: goto yy8; + } +yy190: yych = *++YYCURSOR; + if(yych != 'n') goto yy189; + goto yy191; +yy191: yych = *++YYCURSOR; + if(yych != 'e') goto yy189; + goto yy192; +yy192: yych = *++YYCURSOR; + goto yy193; +yy193: +{ + parser_nasm->state = LINECHG; + linechg_numcount = 0; + RETURN(LINE); + } +yy194: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy195; +yy195: if(yych <= '>'){ + if(yych <= '-'){ + if(yych <= '"') goto yy196; + if(yych <= '$') goto yy194; + goto yy196; + } else { + if(yych == '/') goto yy196; + if(yych <= '9') goto yy194; + goto yy196; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy194; + if(yych == '_') goto yy194; + goto yy196; + } else { + if(yych <= 'z') goto yy194; + if(yych == '~') goto yy194; + goto yy196; + } + } +yy196: +{ + if (TOK[1] == '.' || + (parser_nasm->tasm && TOK[1] == '@' && TOK[2] == '@')) { + /* handle like .label */ + RETURN(handle_dot_label(lvalp, TOK, TOKLEN, 1, parser_nasm)); + } + lvalp->str_val = yasm__xstrndup(TOK+1, TOKLEN-1); + RETURN(ID); + } +yy197: yych = *++YYCURSOR; + if(yych <= '>'){ + if(yych <= '-'){ + if(yych <= '"') goto yy198; + if(yych <= '$') goto yy194; + goto yy198; + } else { + if(yych == '/') goto yy198; + if(yych <= '9') goto yy194; + goto yy198; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy194; + if(yych == '_') goto yy194; + goto yy198; + } else { + if(yych <= 'z') goto yy194; + if(yych == '~') goto yy194; + goto yy198; + } + } +yy198: +{ RETURN(START_SECTION_ID); } +yy199: yych = *++YYCURSOR; + if(yybm[0+yych] & 4) { + goto yy200; + } + goto yy195; +yy200: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy201; +yy201: if(yybm[0+yych] & 4) { + goto yy200; + } + if(yych <= '>'){ + if(yych <= '$'){ + if(yych >= '#') goto yy194; + goto yy202; + } else { + if(yych == '.') goto yy194; + goto yy202; + } + } else { + if(yych <= 'z'){ + if(yych <= 'Z') goto yy194; + if(yych >= 'g') goto yy194; + goto yy202; + } else { + if(yych == '~') goto yy194; + goto yy202; + } + } +yy202: +{ + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + if (s->tok[1] == 'x' || s->tok[1] == 'X') + /* skip 0 and x */ + lvalp->intn = yasm_intnum_create_hex(TOK+2); + else + /* don't skip 0 */ + lvalp->intn = yasm_intnum_create_hex(TOK+1); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } +yy203: yyaccept = 2; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); + yych = *YYCURSOR; + goto yy204; +yy204: if(yybm[0+yych] & 8) { + goto yy203; + } + if(yych == 'E') goto yy212; + if(yych == 'e') goto yy212; + goto yy205; +yy205: +{ + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->flt = yasm_floatnum_create(TOK); + s->tok[TOKLEN] = savech; + RETURN(FLTNUM); + } +yy206: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy207; +yy207: if(yych <= 'G'){ + if(yych <= '/'){ + if(yych == '.') goto yy203; + goto yy3; + } else { + if(yych <= '9') goto yy206; + if(yych <= '@') goto yy3; + if(yych >= 'G') goto yy3; + goto yy208; + } + } else { + if(yych <= '`'){ + if(yych <= 'H') goto yy210; + if(yych != '_') goto yy3; + goto yy208; + } else { + if(yych <= 'f') goto yy208; + if(yych == 'h') goto yy210; + goto yy3; + } + } +yy208: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy209; +yy209: if(yych <= 'H'){ + if(yych <= '@'){ + if(yych <= '/') goto yy189; + if(yych <= '9') goto yy208; + goto yy189; + } else { + if(yych <= 'F') goto yy208; + if(yych <= 'G') goto yy189; + goto yy210; + } + } else { + if(yych <= '`'){ + if(yych == '_') goto yy208; + goto yy189; + } else { + if(yych <= 'f') goto yy208; + if(yych != 'h') goto yy189; + goto yy210; + } + } +yy210: yych = *++YYCURSOR; + goto yy211; +yy211: +{ + s->tok[TOKLEN-1] = '\0'; /* strip off 'h' */ + lvalp->intn = yasm_intnum_create_hex(TOK); + RETURN(INTNUM); + } +yy212: yych = *++YYCURSOR; + if(yych <= ','){ + if(yych != '+') goto yy189; + goto yy213; + } else { + if(yych <= '-') goto yy213; + if(yych <= '/') goto yy189; + if(yych <= '9') goto yy214; + goto yy189; + } +yy213: yych = *++YYCURSOR; + if(yych <= '/') goto yy189; + if(yych >= ':') goto yy189; + goto yy214; +yy214: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy215; +yy215: if(yych <= '/') goto yy205; + if(yych <= '9') goto yy214; + goto yy205; +yy216: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy217; +yy217: if(yybm[0+yych] & 16) { + goto yy216; + } + if(yych <= 'P'){ + if(yych <= '@'){ + if(yych <= '.'){ + if(yych <= '-') goto yy3; + goto yy203; + } else { + if(yych <= '/') goto yy3; + if(yych <= '9') goto yy206; + goto yy3; + } + } else { + if(yych <= 'H'){ + if(yych <= 'F') goto yy208; + if(yych <= 'G') goto yy3; + goto yy210; + } else { + if(yych == 'O') goto yy220; + goto yy3; + } + } + } else { + if(yych <= 'g'){ + if(yych <= '_'){ + if(yych <= 'Q') goto yy220; + if(yych <= '^') goto yy3; + goto yy218; + } else { + if(yych <= '`') goto yy3; + if(yych <= 'f') goto yy208; + goto yy3; + } + } else { + if(yych <= 'o'){ + if(yych <= 'h') goto yy210; + if(yych <= 'n') goto yy3; + goto yy220; + } else { + if(yych == 'q') goto yy220; + goto yy3; + } + } + } +yy218: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy219; +yy219: if(yybm[0+yych] & 32) { + goto yy218; + } + if(yych <= 'P'){ + if(yych <= 'F'){ + if(yych <= '7') goto yy189; + if(yych <= '9') goto yy208; + if(yych <= '@') goto yy189; + goto yy208; + } else { + if(yych <= 'H'){ + if(yych <= 'G') goto yy189; + goto yy210; + } else { + if(yych != 'O') goto yy189; + goto yy220; + } + } + } else { + if(yych <= 'h'){ + if(yych <= '`'){ + if(yych >= 'R') goto yy189; + goto yy220; + } else { + if(yych <= 'f') goto yy208; + if(yych <= 'g') goto yy189; + goto yy210; + } + } else { + if(yych <= 'o'){ + if(yych <= 'n') goto yy189; + goto yy220; + } else { + if(yych != 'q') goto yy189; + goto yy220; + } + } + } +yy220: yych = *++YYCURSOR; + goto yy221; +yy221: +{ + s->tok[TOKLEN-1] = '\0'; /* strip off 'q' or 'o' */ + lvalp->intn = yasm_intnum_create_oct(TOK); + RETURN(INTNUM); + } +yy222: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy223; +yy223: if(yybm[0+yych] & 64) { + goto yy222; + } + switch(yych){ + case '.': goto yy203; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy216; + case '8': + case '9': goto yy206; + case 'A': case 'C': + case 'D': + case 'E': + case 'F': case 'a': case 'c': + case 'd': + case 'e': + case 'f': goto yy208; + case 'B': case 'b': goto yy224; + case 'H': case 'h': goto yy210; + case 'O': case 'Q': case 'o': case 'q': goto yy220; + case '_': goto yy226; + default: goto yy3; + } +yy224: yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if(yych <= 'H'){ + if(yych <= '@'){ + if(yych <= '/') goto yy225; + if(yych <= '9') goto yy208; + goto yy225; + } else { + if(yych <= 'F') goto yy208; + if(yych >= 'H') goto yy210; + goto yy225; + } + } else { + if(yych <= '`'){ + if(yych == '_') goto yy208; + goto yy225; + } else { + if(yych <= 'f') goto yy208; + if(yych == 'h') goto yy210; + goto yy225; + } + } +yy225: +{ + s->tok[TOKLEN-1] = '\0'; /* strip off 'b' */ + lvalp->intn = yasm_intnum_create_bin(TOK); + RETURN(INTNUM); + } +yy226: ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy227; +yy227: if(yybm[0+yych] & 128) { + goto yy226; + } + switch(yych){ + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy218; + case '8': + case '9': case 'A': case 'C': + case 'D': + case 'E': + case 'F': case 'a': case 'c': + case 'd': + case 'e': + case 'f': goto yy208; + case 'B': case 'b': goto yy224; + case 'H': case 'h': goto yy210; + case 'O': case 'Q': case 'o': case 'q': goto yy220; + default: goto yy189; + } +yy228: yych = *++YYCURSOR; + if(yych <= 'F'){ + if(yych <= '/') goto yy189; + if(yych <= '9') goto yy229; + if(yych <= '@') goto yy189; + goto yy229; + } else { + if(yych <= '_'){ + if(yych <= '^') goto yy189; + goto yy229; + } else { + if(yych <= '`') goto yy189; + if(yych >= 'g') goto yy189; + goto yy229; + } + } +yy229: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy230; +yy230: if(yych <= 'F'){ + if(yych <= '/') goto yy202; + if(yych <= '9') goto yy229; + if(yych <= '@') goto yy202; + goto yy229; + } else { + if(yych <= '_'){ + if(yych <= '^') goto yy202; + goto yy229; + } else { + if(yych <= '`') goto yy202; + if(yych <= 'f') goto yy229; + goto yy202; + } + } +} +} + + + /* %line linenum+lineinc filename */ +linechg: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + { + static unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64, 0, 0, 0, 64, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 64, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }; + +{ + YYCTYPE yych; + goto yy231; + ++YYCURSOR; +yy231: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= '\037'){ + if(yych <= '\t'){ + if(yych <= '\000') goto yy235; + if(yych <= '\b') goto yy241; + goto yy239; + } else { + if(yych == '\r') goto yy239; + goto yy241; + } + } else { + if(yych <= '+'){ + if(yych <= ' ') goto yy239; + if(yych <= '*') goto yy241; + goto yy237; + } else { + if(yych <= '/') goto yy241; + if(yych >= ':') goto yy241; + goto yy233; + } + } +yy233: yych = *++YYCURSOR; + goto yy246; +yy234: +{ + linechg_numcount++; + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->intn = yasm_intnum_create_dec(TOK); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } +yy235: yych = *++YYCURSOR; + goto yy236; +yy236: +{ goto endofinput; } +yy237: yych = *++YYCURSOR; + goto yy238; +yy238: +{ + RETURN(s->tok[0]); + } +yy239: yych = *++YYCURSOR; + goto yy244; +yy240: +{ + if (linechg_numcount == 2) { + parser_nasm->state = LINECHG2; + goto linechg2; + } + goto linechg; + } +yy241: yych = *++YYCURSOR; + goto yy242; +yy242: +{ + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto linechg; + } +yy243: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy244; +yy244: if(yybm[0+yych] & 64) { + goto yy243; + } + goto yy240; +yy245: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy246; +yy246: if(yybm[0+yych] & 128) { + goto yy245; + } + goto yy234; +} +} + + +linechg2: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + { + static unsigned char yybm[] = { + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + }; + +{ + YYCTYPE yych; + goto yy247; + ++YYCURSOR; +yy247: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= '\000') goto yy249; + if(yych == '\r') goto yy251; + goto yy253; +yy249: yych = *++YYCURSOR; + goto yy250; +yy250: +{ goto endofinput; } +yy251: yych = *++YYCURSOR; + if(yybm[0+yych] & 128) { + goto yy253; + } + goto yy252; +yy252: +{ goto linechg2; } +yy253: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy254; +yy254: if(yybm[0+yych] & 128) { + goto yy253; + } + goto yy255; +yy255: +{ + parser_nasm->state = LINECHG; + lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); + RETURN(FILENAME); + } +} +} + + + /* directive: [name value] */ +directive: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + { + static unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }; + +{ + YYCTYPE yych; + goto yy256; + ++YYCURSOR; +yy256: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= ']'){ + if(yych <= '@'){ + if(yych >= '\001') goto yy263; + goto yy258; + } else { + if(yych <= 'Z') goto yy261; + if(yych <= '\\') goto yy263; + goto yy260; + } + } else { + if(yych <= '_'){ + if(yych <= '^') goto yy263; + goto yy261; + } else { + if(yych <= '`') goto yy263; + if(yych <= 'z') goto yy261; + goto yy263; + } + } +yy258: yych = *++YYCURSOR; + goto yy259; +yy259: +{ goto endofinput; } +yy260: yych = *++YYCURSOR; + goto yy259; +yy261: yych = *++YYCURSOR; + goto yy266; +yy262: +{ + lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); + if (yasm__strcasecmp(lvalp->str_val, "section") == 0 || + yasm__strcasecmp(lvalp->str_val, "segment") == 0) + parser_nasm->state = SECTION_DIRECTIVE; + else + parser_nasm->state = DIRECTIVE2; + RETURN(DIRECTIVE_NAME); + } +yy263: yych = *++YYCURSOR; + goto yy264; +yy264: +{ + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto directive; + } +yy265: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy266; +yy266: if(yybm[0+yych] & 128) { + goto yy265; + } + goto yy262; +} +} + + + /* section directive (the section name portion thereof) */ +section_directive: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + { + static unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64, 0, 0, 0, 64, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 64, 0, 0, 128, 128, 0, 0, 0, + 0, 0, 0, 0, 0, 128, 128, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 128, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }; + +{ + YYCTYPE yych; + goto yy267; + ++YYCURSOR; +yy267: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= ','){ + if(yych <= '\037'){ + if(yych <= '\t'){ + if(yych <= '\000') goto yy275; + if(yych <= '\b') goto yy278; + goto yy273; + } else { + if(yych == '\r') goto yy273; + goto yy278; + } + } else { + if(yych <= '"'){ + if(yych <= ' ') goto yy273; + if(yych <= '!') goto yy278; + goto yy271; + } else { + if(yych <= '$') goto yy269; + if(yych == '\'') goto yy271; + goto yy278; + } + } + } else { + if(yych <= ']'){ + if(yych <= '9'){ + if(yych == '/') goto yy278; + goto yy269; + } else { + if(yych <= '>') goto yy278; + if(yych <= 'Z') goto yy269; + if(yych <= '\\') goto yy278; + goto yy277; + } + } else { + if(yych <= '`'){ + if(yych != '_') goto yy278; + goto yy269; + } else { + if(yych <= 'z') goto yy269; + if(yych != '~') goto yy278; + goto yy269; + } + } + } +yy269: yych = *++YYCURSOR; + goto yy283; +yy270: +{ + lvalp->str.contents = yasm__xstrndup(TOK, TOKLEN); + lvalp->str.len = TOKLEN; + parser_nasm->state = DIRECTIVE2; + RETURN(STRING); + } +yy271: yych = *++YYCURSOR; + goto yy272; +yy272: +{ + parser_nasm->state = DIRECTIVE2; + endch = s->tok[0]; + goto stringconst; + } +yy273: yych = *++YYCURSOR; + goto yy281; +yy274: +{ + parser_nasm->state = DIRECTIVE2; + goto section_directive; + } +yy275: yych = *++YYCURSOR; + goto yy276; +yy276: +{ goto endofinput; } +yy277: yych = *++YYCURSOR; + goto yy276; +yy278: yych = *++YYCURSOR; + goto yy279; +yy279: +{ + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto section_directive; + } +yy280: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy281; +yy281: if(yybm[0+yych] & 64) { + goto yy280; + } + goto yy274; +yy282: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy283; +yy283: if(yybm[0+yych] & 128) { + goto yy282; + } + goto yy270; +} +} + + + /* inner part of directive */ +directive2: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + { + static unsigned char yybm[] = { + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, + 255, 255, 63, 63, 63, 63, 63, 63, + 15, 15, 1, 1, 1, 1, 1, 3, + 3, 7, 7, 7, 7, 7, 7, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 1, 1, 1, 1, 167, + 1, 7, 7, 7, 7, 7, 7, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 1, 1, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 128, 0, 0, 0, 128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }; + +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy284; + ++YYCURSOR; +yy284: + if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); + yych = *YYCURSOR; + if(yych <= '7'){ + if(yych <= '#'){ + if(yych <= '\r'){ + if(yych <= '\b'){ + if(yych <= '\000') goto yy309; + goto yy311; + } else { + if(yych <= '\t') goto yy307; + if(yych <= '\f') goto yy311; + goto yy307; + } + } else { + if(yych <= ' '){ + if(yych <= '\037') goto yy311; + goto yy307; + } else { + if(yych == '"') goto yy293; + goto yy311; + } + } + } else { + if(yych <= '-'){ + if(yych <= '%'){ + if(yych <= '$') goto yy291; + goto yy299; + } else { + if(yych == '\'') goto yy293; + goto yy300; + } + } else { + if(yych <= '/'){ + if(yych <= '.') goto yy303; + goto yy298; + } else { + if(yych <= '0') goto yy286; + if(yych <= '1') goto yy288; + goto yy289; + } + } + } + } else { + if(yych <= '['){ + if(yych <= '='){ + if(yych <= ':'){ + if(yych <= '9') goto yy290; + goto yy300; + } else { + if(yych <= ';') goto yy305; + if(yych <= '<') goto yy295; + goto yy300; + } + } else { + if(yych <= '?'){ + if(yych <= '>') goto yy297; + goto yy303; + } else { + if(yych <= '@') goto yy311; + if(yych <= 'Z') goto yy303; + goto yy300; + } + } + } else { + if(yych <= '`'){ + if(yych <= ']'){ + if(yych <= '\\') goto yy311; + goto yy301; + } else { + if(yych <= '^') goto yy300; + if(yych <= '_') goto yy303; + goto yy311; + } + } else { + if(yych <= '|'){ + if(yych <= 'z') goto yy303; + if(yych <= '{') goto yy311; + goto yy300; + } else { + if(yych == '~') goto yy300; + goto yy311; + } + } + } + } +yy286: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == 'X') goto yy352; + if(yych == 'x') goto yy352; + goto yy347; +yy287: +{ + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->intn = yasm_intnum_create_dec(TOK); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } +yy288: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy347; +yy289: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy341; +yy290: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy334; +yy291: yych = *++YYCURSOR; + if(yych <= '>'){ + if(yych <= '-'){ + if(yych <= '"') goto yy292; + if(yych <= '$') goto yy326; + goto yy292; + } else { + if(yych <= '.') goto yy326; + if(yych <= '/') goto yy292; + if(yych <= '9') goto yy329; + goto yy292; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy326; + if(yych == '_') goto yy326; + goto yy292; + } else { + if(yych <= 'z') goto yy326; + if(yych == '~') goto yy326; + goto yy292; + } + } +yy292: +{ RETURN(s->tok[0]); } +yy293: yych = *++YYCURSOR; + goto yy294; +yy294: +{ + endch = s->tok[0]; + goto stringconst; + } +yy295: yych = *++YYCURSOR; + if(yych == '<') goto yy324; + goto yy296; +yy296: +{ + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto scan; + } +yy297: yych = *++YYCURSOR; + if(yych == '>') goto yy322; + goto yy296; +yy298: yych = *++YYCURSOR; + if(yych == '/') goto yy320; + goto yy292; +yy299: yych = *++YYCURSOR; + if(yych == '%') goto yy318; + goto yy292; +yy300: yych = *++YYCURSOR; + goto yy292; +yy301: yych = *++YYCURSOR; + goto yy302; +yy302: +{ goto endofinput; } +yy303: yych = *++YYCURSOR; + goto yy317; +yy304: +{ + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + switch (yasm_arch_parse_check_regtmod + (p_object->arch, TOK, TOKLEN, &lvalp->arch_data)) { + case YASM_ARCH_REG: + s->tok[TOKLEN] = savech; + RETURN(REG); + default: + s->tok[TOKLEN] = savech; + } + /* Propagate errors in case we got a warning from the arch */ + yasm_errwarn_propagate(parser_nasm->errwarns, cur_line); + /* Just an identifier, return as such. */ + lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); + RETURN(ID); + } +yy305: yych = *++YYCURSOR; + goto yy315; +yy306: +{ goto directive2; } +yy307: yych = *++YYCURSOR; + goto yy313; +yy308: +{ goto directive2; } +yy309: yych = *++YYCURSOR; + goto yy310; +yy310: +{ goto endofinput; } +yy311: yych = *++YYCURSOR; + goto yy296; +yy312: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy313; +yy313: if(yybm[256+yych] & 128) { + goto yy312; + } + goto yy308; +yy314: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy315; +yy315: if(yybm[0+yych] & 1) { + goto yy314; + } + goto yy306; +yy316: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy317; +yy317: if(yybm[0+yych] & 2) { + goto yy316; + } + goto yy304; +yy318: yych = *++YYCURSOR; + goto yy319; +yy319: +{ RETURN(SIGNMOD); } +yy320: yych = *++YYCURSOR; + goto yy321; +yy321: +{ RETURN(SIGNDIV); } +yy322: yych = *++YYCURSOR; + goto yy323; +yy323: +{ RETURN(RIGHT_OP); } +yy324: yych = *++YYCURSOR; + goto yy325; +yy325: +{ RETURN(LEFT_OP); } +yy326: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy327; +yy327: if(yych <= '>'){ + if(yych <= '-'){ + if(yych <= '"') goto yy328; + if(yych <= '$') goto yy326; + goto yy328; + } else { + if(yych == '/') goto yy328; + if(yych <= '9') goto yy326; + goto yy328; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy326; + if(yych == '_') goto yy326; + goto yy328; + } else { + if(yych <= 'z') goto yy326; + if(yych == '~') goto yy326; + goto yy328; + } + } +yy328: +{ + lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); + RETURN(ID); + } +yy329: yych = *++YYCURSOR; + if(yybm[0+yych] & 4) { + goto yy330; + } + goto yy327; +yy330: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy331; +yy331: if(yybm[0+yych] & 4) { + goto yy330; + } + if(yych <= '>'){ + if(yych <= '$'){ + if(yych >= '#') goto yy326; + goto yy332; + } else { + if(yych == '.') goto yy326; + goto yy332; + } + } else { + if(yych <= 'z'){ + if(yych <= 'Z') goto yy326; + if(yych >= 'g') goto yy326; + goto yy332; + } else { + if(yych == '~') goto yy326; + goto yy332; + } + } +yy332: +{ + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + if (s->tok[1] == 'x' || s->tok[1] == 'X') + /* skip 0 and x */ + lvalp->intn = yasm_intnum_create_hex(TOK+2); + else + /* don't skip 0 */ + lvalp->intn = yasm_intnum_create_hex(TOK+1); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } +yy333: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy334; +yy334: if(yybm[0+yych] & 8) { + goto yy333; + } + if(yych <= '^'){ + if(yych <= 'F'){ + if(yych <= '@') goto yy287; + goto yy335; + } else { + if(yych == 'H') goto yy338; + goto yy287; + } + } else { + if(yych <= 'f'){ + if(yych == '`') goto yy287; + goto yy335; + } else { + if(yych == 'h') goto yy338; + goto yy287; + } + } +yy335: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy336; +yy336: if(yych <= 'H'){ + if(yych <= '@'){ + if(yych <= '/') goto yy337; + if(yych <= '9') goto yy335; + goto yy337; + } else { + if(yych <= 'F') goto yy335; + if(yych >= 'H') goto yy338; + goto yy337; + } + } else { + if(yych <= '`'){ + if(yych == '_') goto yy335; + goto yy337; + } else { + if(yych <= 'f') goto yy335; + if(yych == 'h') goto yy338; + goto yy337; + } + } +yy337: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy287; + case 1: goto yy349; + } +yy338: yych = *++YYCURSOR; + goto yy339; +yy339: +{ + s->tok[TOKLEN-1] = '\0'; /* strip off 'h' */ + lvalp->intn = yasm_intnum_create_hex(TOK); + RETURN(INTNUM); + } +yy340: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy341; +yy341: if(yybm[0+yych] & 16) { + goto yy340; + } + if(yych <= 'Q'){ + if(yych <= 'G'){ + if(yych <= '9'){ + if(yych <= '7') goto yy287; + goto yy333; + } else { + if(yych <= '@') goto yy287; + if(yych <= 'F') goto yy335; + goto yy287; + } + } else { + if(yych <= 'N'){ + if(yych <= 'H') goto yy338; + goto yy287; + } else { + if(yych == 'P') goto yy287; + goto yy344; + } + } + } else { + if(yych <= 'g'){ + if(yych <= '_'){ + if(yych <= '^') goto yy287; + goto yy342; + } else { + if(yych <= '`') goto yy287; + if(yych <= 'f') goto yy335; + goto yy287; + } + } else { + if(yych <= 'o'){ + if(yych <= 'h') goto yy338; + if(yych <= 'n') goto yy287; + goto yy344; + } else { + if(yych == 'q') goto yy344; + goto yy287; + } + } + } +yy342: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy343; +yy343: if(yybm[0+yych] & 32) { + goto yy342; + } + if(yych <= 'P'){ + if(yych <= 'F'){ + if(yych <= '7') goto yy337; + if(yych <= '9') goto yy335; + if(yych <= '@') goto yy337; + goto yy335; + } else { + if(yych <= 'H'){ + if(yych <= 'G') goto yy337; + goto yy338; + } else { + if(yych != 'O') goto yy337; + goto yy344; + } + } + } else { + if(yych <= 'h'){ + if(yych <= '`'){ + if(yych >= 'R') goto yy337; + goto yy344; + } else { + if(yych <= 'f') goto yy335; + if(yych <= 'g') goto yy337; + goto yy338; + } + } else { + if(yych <= 'o'){ + if(yych <= 'n') goto yy337; + goto yy344; + } else { + if(yych != 'q') goto yy337; + goto yy344; + } + } + } +yy344: yych = *++YYCURSOR; + goto yy345; +yy345: +{ + s->tok[TOKLEN-1] = '\0'; /* strip off 'q' or 'o' */ + lvalp->intn = yasm_intnum_create_oct(TOK); + RETURN(INTNUM); + } +yy346: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy347; +yy347: if(yybm[0+yych] & 64) { + goto yy346; + } + switch(yych){ + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy340; + case '8': + case '9': goto yy333; + case 'A': case 'C': + case 'D': + case 'E': + case 'F': case 'a': case 'c': + case 'd': + case 'e': + case 'f': goto yy335; + case 'B': case 'b': goto yy348; + case 'H': case 'h': goto yy338; + case 'O': case 'Q': case 'o': case 'q': goto yy344; + case '_': goto yy350; + default: goto yy287; + } +yy348: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if(yych <= 'H'){ + if(yych <= '@'){ + if(yych <= '/') goto yy349; + if(yych <= '9') goto yy335; + goto yy349; + } else { + if(yych <= 'F') goto yy335; + if(yych >= 'H') goto yy338; + goto yy349; + } + } else { + if(yych <= '`'){ + if(yych == '_') goto yy335; + goto yy349; + } else { + if(yych <= 'f') goto yy335; + if(yych == 'h') goto yy338; + goto yy349; + } + } +yy349: +{ + s->tok[TOKLEN-1] = '\0'; /* strip off 'b' */ + lvalp->intn = yasm_intnum_create_bin(TOK); + RETURN(INTNUM); + } +yy350: ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy351; +yy351: if(yybm[0+yych] & 128) { + goto yy350; + } + switch(yych){ + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy342; + case '8': + case '9': case 'A': case 'C': + case 'D': + case 'E': + case 'F': case 'a': case 'c': + case 'd': + case 'e': + case 'f': goto yy335; + case 'B': case 'b': goto yy348; + case 'H': case 'h': goto yy338; + case 'O': case 'Q': case 'o': case 'q': goto yy344; + default: goto yy337; + } +yy352: yych = *++YYCURSOR; + if(yych <= 'F'){ + if(yych <= '/') goto yy337; + if(yych <= '9') goto yy353; + if(yych <= '@') goto yy337; + goto yy353; + } else { + if(yych <= '_'){ + if(yych <= '^') goto yy337; + goto yy353; + } else { + if(yych <= '`') goto yy337; + if(yych >= 'g') goto yy337; + goto yy353; + } + } +yy353: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy354; +yy354: if(yych <= 'F'){ + if(yych <= '/') goto yy332; + if(yych <= '9') goto yy353; + if(yych <= '@') goto yy332; + goto yy353; + } else { + if(yych <= '_'){ + if(yych <= '^') goto yy332; + goto yy353; + } else { + if(yych <= '`') goto yy332; + if(yych <= 'f') goto yy353; + goto yy332; + } + } +} +} + + + /* string/character constant values */ +stringconst: + strbuf = yasm_xmalloc(STRBUF_ALLOC_SIZE); + strbuf_size = STRBUF_ALLOC_SIZE; + count = 0; + +stringconst_scan: + SCANINIT(); + if (*cursor == '\0') + goto stringconst_error; + + { + +{ + YYCTYPE yych; + goto yy355; + ++YYCURSOR; +yy355: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= '"'){ + if(yych <= '\000') goto yy357; + if(yych <= '!') goto yy362; + goto yy361; + } else { + if(yych == '\'') goto yy359; + goto yy362; + } +yy357: yych = *++YYCURSOR; + goto yy358; +yy358: +{ goto stringconst_error; } +yy359: yych = *++YYCURSOR; + if(yych == '\'') goto yy363; + goto yy360; +yy360: +{ + if (s->tok[0] == endch) + goto stringconst_end; + + strbuf[count++] = s->tok[0]; + if (count >= strbuf_size) { + strbuf = yasm_xrealloc(strbuf, strbuf_size + STRBUF_ALLOC_SIZE); + strbuf_size += STRBUF_ALLOC_SIZE; + } + + goto stringconst_scan; + } +yy361: yych = *++YYCURSOR; + if(yych == '"') goto yy363; + goto yy360; +yy362: yych = *++YYCURSOR; + goto yy360; +yy363: yych = *++YYCURSOR; + goto yy364; +yy364: +{ + if (endch != s->tok[0]) { + strbuf[count++] = s->tok[0]; + if (count >= strbuf_size) { + strbuf = yasm_xrealloc(strbuf, + strbuf_size + STRBUF_ALLOC_SIZE); + strbuf_size += STRBUF_ALLOC_SIZE; + } + } else if (!parser_nasm->tasm) { + YYCURSOR--; + goto stringconst_end; + } + strbuf[count++] = s->tok[0]; + if (count >= strbuf_size) { + strbuf = yasm_xrealloc(strbuf, strbuf_size + STRBUF_ALLOC_SIZE); + strbuf_size += STRBUF_ALLOC_SIZE; + } + goto stringconst_scan; + } +} +} + + +stringconst_error: + yasm_error_set(YASM_ERROR_SYNTAX, N_("unterminated string")); + +stringconst_end: + strbuf[count] = '\0'; + lvalp->str.contents = (char *)strbuf; + lvalp->str.len = count; + RETURN(STRING); + +endofinput: + parser_nasm->state = INITIAL; + RETURN(s->tok[0]); +} + |