/* Generated by re2c 0.13.5 */ /** * MojoShader; generate shader programs from bytecode of compiled * Direct3D shaders. * * Please see the file LICENSE.txt in the source's root directory. * * This file written by Ryan C. Gordon. */ // This was originally based on examples/pp-c.re from re2c: http://re2c.org/ // re2c is public domain code. // // You build mojoshader_lexer.c from the .re file with re2c... // re2c -is -o mojoshader_lexer.c mojoshader_lexer.re // // Changes to the lexer are done to the .re file, not the C code! // // Please note that this isn't a perfect C lexer, since it is used for both // HLSL and shader assembly language, and follows the quirks of Microsoft's // tools. #define __MOJOSHADER_INTERNAL__ 1 #include "mojoshader_internal.h" typedef unsigned char uchar; #define YYMAXFILL 8 #define RET(t) return update_state(s, eoi, cursor, token, (Token) t) #define YYCTYPE uchar #define YYCURSOR cursor #define YYLIMIT limit #define YYMARKER s->lexer_marker #define YYFILL(n) { if ((n) == 1) { cursor = sentinel; limit = cursor + YYMAXFILL; eoi = 1; } } static uchar sentinel[YYMAXFILL]; static Token update_state(IncludeState *s, int eoi, const uchar *cur, const uchar *tok, const Token val) { if (eoi) { s->bytes_left = 0; s->source = (const char *) s->source_base + s->orig_length; if ( (tok >= sentinel) && (tok < (sentinel+YYMAXFILL)) ) s->token = s->source; else s->token = (const char *) tok; } // if else { s->bytes_left -= (unsigned int) (cur - ((const uchar *) s->source)); s->source = (const char *) cur; s->token = (const char *) tok; } // else s->tokenlen = (unsigned int) (s->source - s->token); s->tokenval = val; return val; } // update_state Token preprocessor_lexer(IncludeState *s) { const uchar *cursor = (const uchar *) s->source; const uchar *token = cursor; const uchar *matchptr; const uchar *limit = cursor + s->bytes_left; int eoi = 0; // preprocessor directives are only valid at start of line. if (s->tokenval == ((Token) '\n')) goto ppdirective; // may jump back to scanner_loop. scanner_loop: if (YYLIMIT == YYCURSOR) YYFILL(1); token = cursor; { YYCTYPE yych; unsigned int yyaccept = 0; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; switch (yych) { case 0x00: goto yy61; case '\t': case '\v': case '\f': case ' ': goto yy63; case '\n': goto yy65; case '\r': goto yy67; case '!': goto yy35; case '"': goto yy14; case '#': goto yy37; case '%': goto yy25; case '&': goto yy29; case '\'': goto yy11; case '(': goto yy39; case ')': goto yy41; case '*': goto yy23; case '+': goto yy19; case ',': goto yy47; case '-': goto yy21; case '.': goto yy12; case '/': goto yy4; case '0': goto yy8; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy10; case ':': goto yy51; case ';': goto yy59; case '<': goto yy17; case '=': goto yy33; case '>': goto yy15; case '?': goto yy57; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy6; case '[': goto yy43; case '\\': goto yy2; case ']': goto yy45; case '^': goto yy27; case '{': goto yy53; case '|': goto yy31; case '}': goto yy55; case '~': goto yy49; default: goto yy68; } yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x08) goto yy3; if (yych <= '\r') goto yy177; if (yych == ' ') goto yy177; yy3: { goto bad_chars; } yy4: ++YYCURSOR; if ((yych = *YYCURSOR) <= '.') { if (yych == '*') goto yy174; } else { if (yych <= '/') goto yy172; if (yych == '=') goto yy170; } { RET('/'); } yy6: ++YYCURSOR; yych = *YYCURSOR; goto yy169; yy7: { RET(TOKEN_IDENTIFIER); } yy8: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { if (yych <= 'T') { if (yych == 'L') goto yy144; goto yy160; } else { if (yych <= 'U') goto yy144; if (yych <= 'W') goto yy160; goto yy161; } } else { if (yych <= 't') { if (yych == 'l') goto yy144; goto yy160; } else { if (yych <= 'u') goto yy144; if (yych == 'x') goto yy161; goto yy160; } } yy9: { RET(TOKEN_INT_LITERAL); } yy10: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); goto yy142; yy11: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych == '\n') goto yy3; if (yych == '\r') goto yy3; goto yy132; yy12: ++YYCURSOR; if ((yych = *YYCURSOR) <= '/') goto yy13; if (yych <= '9') goto yy123; yy13: { RET('.'); } yy14: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych == '\n') goto yy3; if (yych == '\r') goto yy3; goto yy113; yy15: ++YYCURSOR; if ((yych = *YYCURSOR) <= '<') goto yy16; if (yych <= '=') goto yy106; if (yych <= '>') goto yy108; yy16: { RET('>'); } yy17: ++YYCURSOR; if ((yych = *YYCURSOR) <= ';') goto yy18; if (yych <= '<') goto yy102; if (yych <= '=') goto yy100; yy18: { RET('<'); } yy19: ++YYCURSOR; if ((yych = *YYCURSOR) == '+') goto yy96; if (yych == '=') goto yy98; { RET('+'); } yy21: ++YYCURSOR; if ((yych = *YYCURSOR) == '-') goto yy92; if (yych == '=') goto yy94; { RET('-'); } yy23: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy90; { RET('*'); } yy25: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy88; { RET('%'); } yy27: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy86; { RET('^'); } yy29: ++YYCURSOR; if ((yych = *YYCURSOR) == '&') goto yy82; if (yych == '=') goto yy84; { RET('&'); } yy31: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy80; if (yych == '|') goto yy78; { RET('|'); } yy33: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy76; { RET('='); } yy35: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy74; { RET('!'); } yy37: ++YYCURSOR; if ((yych = *YYCURSOR) == '#') goto yy72; { RET(TOKEN_HASH); } yy39: ++YYCURSOR; { RET('('); } yy41: ++YYCURSOR; { RET(')'); } yy43: ++YYCURSOR; { RET('['); } yy45: ++YYCURSOR; { RET(']'); } yy47: ++YYCURSOR; { RET(','); } yy49: ++YYCURSOR; { RET('~'); } yy51: ++YYCURSOR; { RET(':'); } yy53: ++YYCURSOR; { RET('{'); } yy55: ++YYCURSOR; { RET('}'); } yy57: ++YYCURSOR; { RET('?'); } yy59: ++YYCURSOR; { if (s->asm_comments) goto singlelinecomment; RET(';'); } yy61: ++YYCURSOR; { if (eoi) { RET(TOKEN_EOI); } goto bad_chars; } yy63: ++YYCURSOR; yych = *YYCURSOR; goto yy71; yy64: { if (s->report_whitespace) RET(' '); goto scanner_loop; } yy65: ++YYCURSOR; yy66: { s->line++; RET('\n'); } yy67: yych = *++YYCURSOR; if (yych == '\n') goto yy69; goto yy66; yy68: yych = *++YYCURSOR; goto yy3; yy69: yych = *++YYCURSOR; goto yy66; yy70: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy71: if (yych <= '\n') { if (yych == '\t') goto yy70; goto yy64; } else { if (yych <= '\f') goto yy70; if (yych == ' ') goto yy70; goto yy64; } yy72: ++YYCURSOR; { RET(TOKEN_HASHHASH); } yy74: ++YYCURSOR; { RET(TOKEN_NEQ); } yy76: ++YYCURSOR; { RET(TOKEN_EQL); } yy78: ++YYCURSOR; { RET(TOKEN_OROR); } yy80: ++YYCURSOR; { RET(TOKEN_ORASSIGN); } yy82: ++YYCURSOR; { RET(TOKEN_ANDAND); } yy84: ++YYCURSOR; { RET(TOKEN_ANDASSIGN); } yy86: ++YYCURSOR; { RET(TOKEN_XORASSIGN); } yy88: ++YYCURSOR; { RET(TOKEN_MODASSIGN); } yy90: ++YYCURSOR; { RET(TOKEN_MULTASSIGN); } yy92: ++YYCURSOR; { RET(TOKEN_DECREMENT); } yy94: ++YYCURSOR; { RET(TOKEN_SUBASSIGN); } yy96: ++YYCURSOR; { RET(TOKEN_INCREMENT); } yy98: ++YYCURSOR; { RET(TOKEN_ADDASSIGN); } yy100: ++YYCURSOR; { RET(TOKEN_LEQ); } yy102: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy104; { RET(TOKEN_LSHIFT); } yy104: ++YYCURSOR; { RET(TOKEN_LSHIFTASSIGN); } yy106: ++YYCURSOR; { RET(TOKEN_GEQ); } yy108: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy110; { RET(TOKEN_RSHIFT); } yy110: ++YYCURSOR; { RET(TOKEN_RSHIFTASSIGN); } yy112: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy113: if (yych <= '\r') { if (yych == '\n') goto yy114; if (yych <= '\f') goto yy112; } else { if (yych <= '"') { if (yych <= '!') goto yy112; goto yy116; } else { if (yych == '\\') goto yy115; goto yy112; } } yy114: YYCURSOR = YYMARKER; if (yyaccept <= 1) { if (yyaccept <= 0) { goto yy3; } else { goto yy9; } } else { goto yy125; } yy115: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'b') { if (yych <= '7') { if (yych <= '&') { if (yych == '"') goto yy112; goto yy114; } else { if (yych <= '\'') goto yy112; if (yych <= '/') goto yy114; goto yy119; } } else { if (yych <= '[') { if (yych == '?') goto yy112; goto yy114; } else { if (yych <= '\\') goto yy112; if (yych <= '`') goto yy114; goto yy112; } } } else { if (yych <= 'r') { if (yych <= 'm') { if (yych == 'f') goto yy112; goto yy114; } else { if (yych <= 'n') goto yy112; if (yych <= 'q') goto yy114; goto yy112; } } else { if (yych <= 'u') { if (yych == 't') goto yy112; goto yy114; } else { if (yych <= 'v') goto yy112; if (yych == 'x') goto yy118; goto yy114; } } } yy116: ++YYCURSOR; { RET(TOKEN_STRING_LITERAL); } yy118: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '@') { if (yych <= '/') goto yy114; if (yych <= '9') goto yy121; goto yy114; } else { if (yych <= 'F') goto yy121; if (yych <= '`') goto yy114; if (yych <= 'f') goto yy121; goto yy114; } yy119: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '!') { if (yych <= '\n') { if (yych <= '\t') goto yy112; goto yy114; } else { if (yych == '\r') goto yy114; goto yy112; } } else { if (yych <= '7') { if (yych <= '"') goto yy116; if (yych <= '/') goto yy112; goto yy119; } else { if (yych == '\\') goto yy115; goto yy112; } } yy121: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '/') { if (yych <= '\f') { if (yych == '\n') goto yy114; goto yy112; } else { if (yych <= '\r') goto yy114; if (yych == '"') goto yy116; goto yy112; } } else { if (yych <= '[') { if (yych <= '9') goto yy121; if (yych <= '@') goto yy112; if (yych <= 'F') goto yy121; goto yy112; } else { if (yych <= '\\') goto yy115; if (yych <= '`') goto yy112; if (yych <= 'f') goto yy121; goto yy112; } } yy123: yyaccept = 2; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; if (yych <= 'G') { if (yych <= 'D') { if (yych <= '/') goto yy125; if (yych <= '9') goto yy123; } else { if (yych <= 'E') goto yy126; if (yych <= 'F') goto yy127; } } else { if (yych <= 'e') { if (yych <= 'H') goto yy127; if (yych >= 'e') goto yy126; } else { if (yych == 'g') goto yy125; if (yych <= 'h') goto yy127; } } yy125: { RET(TOKEN_FLOAT_LITERAL); } yy126: yych = *++YYCURSOR; if (yych <= ',') { if (yych == '+') goto yy128; goto yy114; } else { if (yych <= '-') goto yy128; if (yych <= '/') goto yy114; if (yych <= '9') goto yy129; goto yy114; } yy127: yych = *++YYCURSOR; goto yy125; yy128: yych = *++YYCURSOR; if (yych <= '/') goto yy114; if (yych >= ':') goto yy114; yy129: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'G') { if (yych <= '9') { if (yych <= '/') goto yy125; goto yy129; } else { if (yych == 'F') goto yy127; goto yy125; } } else { if (yych <= 'f') { if (yych <= 'H') goto yy127; if (yych <= 'e') goto yy125; goto yy127; } else { if (yych == 'h') goto yy127; goto yy125; } } yy131: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy132: if (yych <= '\r') { if (yych == '\n') goto yy114; if (yych <= '\f') goto yy131; goto yy114; } else { if (yych <= '\'') { if (yych <= '&') goto yy131; goto yy134; } else { if (yych != '\\') goto yy131; } } yy133: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'b') { if (yych <= '7') { if (yych <= '&') { if (yych == '"') goto yy131; goto yy114; } else { if (yych <= '\'') goto yy131; if (yych <= '/') goto yy114; goto yy136; } } else { if (yych <= '[') { if (yych == '?') goto yy131; goto yy114; } else { if (yych <= '\\') goto yy131; if (yych <= '`') goto yy114; goto yy131; } } } else { if (yych <= 'r') { if (yych <= 'm') { if (yych == 'f') goto yy131; goto yy114; } else { if (yych <= 'n') goto yy131; if (yych <= 'q') goto yy114; goto yy131; } } else { if (yych <= 'u') { if (yych == 't') goto yy131; goto yy114; } else { if (yych <= 'v') goto yy131; if (yych == 'x') goto yy135; goto yy114; } } } yy134: yych = *++YYCURSOR; goto yy9; yy135: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '@') { if (yych <= '/') goto yy114; if (yych <= '9') goto yy138; goto yy114; } else { if (yych <= 'F') goto yy138; if (yych <= '`') goto yy114; if (yych <= 'f') goto yy138; goto yy114; } yy136: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '&') { if (yych <= '\n') { if (yych <= '\t') goto yy131; goto yy114; } else { if (yych == '\r') goto yy114; goto yy131; } } else { if (yych <= '7') { if (yych <= '\'') goto yy134; if (yych <= '/') goto yy131; goto yy136; } else { if (yych == '\\') goto yy133; goto yy131; } } yy138: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '/') { if (yych <= '\f') { if (yych == '\n') goto yy114; goto yy131; } else { if (yych <= '\r') goto yy114; if (yych == '\'') goto yy134; goto yy131; } } else { if (yych <= '[') { if (yych <= '9') goto yy138; if (yych <= '@') goto yy131; if (yych <= 'F') goto yy138; goto yy131; } else { if (yych <= '\\') goto yy133; if (yych <= '`') goto yy131; if (yych <= 'f') goto yy138; goto yy131; } } yy140: yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'E') goto yy151; if (yych == 'e') goto yy151; goto yy150; yy141: yyaccept = 1; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; yy142: if (yych <= 'L') { if (yych <= '9') { if (yych == '.') goto yy140; if (yych <= '/') goto yy9; goto yy141; } else { if (yych == 'E') goto yy143; if (yych <= 'K') goto yy9; goto yy144; } } else { if (yych <= 'e') { if (yych == 'U') goto yy144; if (yych <= 'd') goto yy9; } else { if (yych <= 'l') { if (yych <= 'k') goto yy9; goto yy144; } else { if (yych == 'u') goto yy144; goto yy9; } } } yy143: yych = *++YYCURSOR; if (yych <= ',') { if (yych == '+') goto yy146; goto yy114; } else { if (yych <= '-') goto yy146; if (yych <= '/') goto yy114; if (yych <= '9') goto yy147; goto yy114; } yy144: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'U') { if (yych == 'L') goto yy144; if (yych <= 'T') goto yy9; goto yy144; } else { if (yych <= 'l') { if (yych <= 'k') goto yy9; goto yy144; } else { if (yych == 'u') goto yy144; goto yy9; } } yy146: yych = *++YYCURSOR; if (yych <= '/') goto yy114; if (yych >= ':') goto yy114; yy147: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'G') { if (yych <= '9') { if (yych <= '/') goto yy125; goto yy147; } else { if (yych == 'F') goto yy127; goto yy125; } } else { if (yych <= 'f') { if (yych <= 'H') goto yy127; if (yych <= 'e') goto yy125; goto yy127; } else { if (yych == 'h') goto yy127; goto yy125; } } yy149: yyaccept = 2; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; yy150: if (yych <= 'G') { if (yych <= 'D') { if (yych <= '/') goto yy125; if (yych <= '9') goto yy149; goto yy125; } else { if (yych <= 'E') goto yy155; if (yych <= 'F') goto yy127; goto yy125; } } else { if (yych <= 'e') { if (yych <= 'H') goto yy127; if (yych <= 'd') goto yy125; goto yy155; } else { if (yych == 'g') goto yy125; if (yych <= 'h') goto yy127; goto yy125; } } yy151: yych = *++YYCURSOR; if (yych <= ',') { if (yych != '+') goto yy114; } else { if (yych <= '-') goto yy152; if (yych <= '/') goto yy114; if (yych <= '9') goto yy153; goto yy114; } yy152: yych = *++YYCURSOR; if (yych <= '/') goto yy114; if (yych >= ':') goto yy114; yy153: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'G') { if (yych <= '9') { if (yych <= '/') goto yy125; goto yy153; } else { if (yych == 'F') goto yy127; goto yy125; } } else { if (yych <= 'f') { if (yych <= 'H') goto yy127; if (yych <= 'e') goto yy125; goto yy127; } else { if (yych == 'h') goto yy127; goto yy125; } } yy155: yych = *++YYCURSOR; if (yych <= ',') { if (yych != '+') goto yy114; } else { if (yych <= '-') goto yy156; if (yych <= '/') goto yy114; if (yych <= '9') goto yy157; goto yy114; } yy156: yych = *++YYCURSOR; if (yych <= '/') goto yy114; if (yych >= ':') goto yy114; yy157: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'G') { if (yych <= '9') { if (yych <= '/') goto yy125; goto yy157; } else { if (yych == 'F') goto yy127; goto yy125; } } else { if (yych <= 'f') { if (yych <= 'H') goto yy127; if (yych <= 'e') goto yy125; goto yy127; } else { if (yych == 'h') goto yy127; goto yy125; } } yy159: yyaccept = 1; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; yy160: if (yych <= 'L') { if (yych <= '9') { if (yych == '.') goto yy140; if (yych <= '/') goto yy9; goto yy159; } else { if (yych == 'E') goto yy143; if (yych <= 'K') goto yy9; goto yy166; } } else { if (yych <= 'e') { if (yych == 'U') goto yy166; if (yych <= 'd') goto yy9; goto yy143; } else { if (yych <= 'l') { if (yych <= 'k') goto yy9; goto yy166; } else { if (yych == 'u') goto yy166; goto yy9; } } } yy161: yych = *++YYCURSOR; if (yych <= '@') { if (yych <= '/') goto yy114; if (yych >= ':') goto yy114; } else { if (yych <= 'F') goto yy162; if (yych <= '`') goto yy114; if (yych >= 'g') goto yy114; } yy162: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'T') { if (yych <= '@') { if (yych <= '/') goto yy9; if (yych <= '9') goto yy162; goto yy9; } else { if (yych <= 'F') goto yy162; if (yych != 'L') goto yy9; } } else { if (yych <= 'k') { if (yych <= 'U') goto yy164; if (yych <= '`') goto yy9; if (yych <= 'f') goto yy162; goto yy9; } else { if (yych <= 'l') goto yy164; if (yych != 'u') goto yy9; } } yy164: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'U') { if (yych == 'L') goto yy164; if (yych <= 'T') goto yy9; goto yy164; } else { if (yych <= 'l') { if (yych <= 'k') goto yy9; goto yy164; } else { if (yych == 'u') goto yy164; goto yy9; } } yy166: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'U') { if (yych == 'L') goto yy166; if (yych <= 'T') goto yy9; goto yy166; } else { if (yych <= 'l') { if (yych <= 'k') goto yy9; goto yy166; } else { if (yych == 'u') goto yy166; goto yy9; } } yy168: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy169: if (yych <= 'Z') { if (yych <= '/') goto yy7; if (yych <= '9') goto yy168; if (yych <= '@') goto yy7; goto yy168; } else { if (yych <= '_') { if (yych <= '^') goto yy7; goto yy168; } else { if (yych <= '`') goto yy7; if (yych <= 'z') goto yy168; goto yy7; } } yy170: ++YYCURSOR; { RET(TOKEN_DIVASSIGN); } yy172: ++YYCURSOR; { goto singlelinecomment; } yy174: ++YYCURSOR; { goto multilinecomment; } yy176: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; yy177: if (yych <= '\f') { if (yych <= 0x08) goto yy114; if (yych != '\n') goto yy176; } else { if (yych <= '\r') goto yy180; if (yych == ' ') goto yy176; goto yy114; } yy178: ++YYCURSOR; yy179: { s->line++; goto scanner_loop; } yy180: ++YYCURSOR; if ((yych = *YYCURSOR) == '\n') goto yy178; goto yy179; } multilinecomment: if (YYLIMIT == YYCURSOR) YYFILL(1); matchptr = cursor; // The "*\/" is just to avoid screwing up text editor syntax highlighting. { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= '\f') { if (yych <= 0x00) goto yy188; if (yych == '\n') goto yy185; goto yy190; } else { if (yych <= '\r') goto yy187; if (yych != '*') goto yy190; } ++YYCURSOR; if ((yych = *YYCURSOR) == '/') goto yy192; yy184: { goto multilinecomment; } yy185: ++YYCURSOR; yy186: { s->line++; goto multilinecomment; } yy187: yych = *++YYCURSOR; if (yych == '\n') goto yy191; goto yy186; yy188: ++YYCURSOR; { if (eoi) RET(TOKEN_INCOMPLETE_COMMENT); goto multilinecomment; } yy190: yych = *++YYCURSOR; goto yy184; yy191: yych = *++YYCURSOR; goto yy186; yy192: ++YYCURSOR; { if (s->report_comments) RET(TOKEN_MULTI_COMMENT); else if (s->report_whitespace) RET(' '); // Microsoft's preprocessor allows multiline comments // before a preprocessor directive, even though C/C++ // doesn't. See if we've hit this case. #if MATCH_MICROSOFT_PREPROCESSOR if (s->tokenval == ((Token) '\n')) // was start of line? { update_state(s, eoi, cursor, token, (Token) '\n'); goto ppdirective; // may jump back to scanner_loop. } #endif goto scanner_loop; } } singlelinecomment: if (YYLIMIT == YYCURSOR) YYFILL(1); matchptr = cursor; { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= '\n') { if (yych <= 0x00) goto yy199; if (yych <= '\t') goto yy201; } else { if (yych == '\r') goto yy198; goto yy201; } ++YYCURSOR; yy197: { s->line++; if (s->report_comments) { cursor = matchptr; // so we RET('\n') next. RET(TOKEN_SINGLE_COMMENT); } token = matchptr; RET('\n'); } yy198: yych = *++YYCURSOR; if (yych == '\n') goto yy203; goto yy197; yy199: ++YYCURSOR; { if (eoi) { if (s->report_comments) RET(TOKEN_SINGLE_COMMENT); else RET(TOKEN_EOI); } goto singlelinecomment; } yy201: ++YYCURSOR; { goto singlelinecomment; } yy203: ++YYCURSOR; yych = *YYCURSOR; goto yy197; } ppdirective: if (YYLIMIT == YYCURSOR) YYFILL(1); { YYCTYPE yych; unsigned int yyaccept = 0; if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8); yych = *YYCURSOR; if (yych <= '\f') { if (yych == '\t') goto yy208; if (yych <= '\n') goto yy210; goto yy208; } else { if (yych <= ' ') { if (yych <= 0x1F) goto yy210; goto yy208; } else { if (yych != '#') goto yy210; } } yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'h') { if (yych <= 0x1F) { if (yych == '\t') goto yy214; } else { if (yych <= ' ') goto yy214; if (yych <= 'c') goto yy207; if (yych <= 'e') goto yy214; } } else { if (yych <= 'o') { if (yych <= 'i') goto yy214; if (yych == 'l') goto yy214; } else { if (yych <= 'p') goto yy214; if (yych == 'u') goto yy214; } } yy207: { token = cursor = (const uchar *) s->source; limit = cursor + s->bytes_left; goto scanner_loop; } yy208: ++YYCURSOR; yych = *YYCURSOR; goto yy212; yy209: { goto ppdirective; } yy210: yych = *++YYCURSOR; goto yy207; yy211: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy212: if (yych <= '\n') { if (yych == '\t') goto yy211; goto yy209; } else { if (yych <= '\f') goto yy211; if (yych == ' ') goto yy211; goto yy209; } yy213: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7); yych = *YYCURSOR; yy214: if (yych <= 'h') { if (yych <= ' ') { if (yych == '\t') goto yy213; if (yych >= ' ') goto yy213; } else { if (yych <= 'c') goto yy215; if (yych <= 'd') goto yy220; if (yych <= 'e') goto yy217; } } else { if (yych <= 'o') { if (yych <= 'i') goto yy218; if (yych == 'l') goto yy221; } else { if (yych <= 'p') goto yy216; if (yych == 'u') goto yy219; } } yy215: YYCURSOR = YYMARKER; if (yyaccept <= 0) { goto yy207; } else { goto yy239; } yy216: yych = *++YYCURSOR; if (yych == 'r') goto yy272; goto yy215; yy217: yych = *++YYCURSOR; if (yych <= 'm') { if (yych == 'l') goto yy255; goto yy215; } else { if (yych <= 'n') goto yy256; if (yych == 'r') goto yy257; goto yy215; } yy218: yych = *++YYCURSOR; if (yych == 'f') goto yy238; if (yych == 'n') goto yy237; goto yy215; yy219: yych = *++YYCURSOR; if (yych == 'n') goto yy232; goto yy215; yy220: yych = *++YYCURSOR; if (yych == 'e') goto yy226; goto yy215; yy221: yych = *++YYCURSOR; if (yych != 'i') goto yy215; yych = *++YYCURSOR; if (yych != 'n') goto yy215; yych = *++YYCURSOR; if (yych != 'e') goto yy215; ++YYCURSOR; { RET(TOKEN_PP_LINE); } yy226: yych = *++YYCURSOR; if (yych != 'f') goto yy215; yych = *++YYCURSOR; if (yych != 'i') goto yy215; yych = *++YYCURSOR; if (yych != 'n') goto yy215; yych = *++YYCURSOR; if (yych != 'e') goto yy215; ++YYCURSOR; { RET(TOKEN_PP_DEFINE); } yy232: yych = *++YYCURSOR; if (yych != 'd') goto yy215; yych = *++YYCURSOR; if (yych != 'e') goto yy215; yych = *++YYCURSOR; if (yych != 'f') goto yy215; ++YYCURSOR; { RET(TOKEN_PP_UNDEF); } yy237: yych = *++YYCURSOR; if (yych == 'c') goto yy249; goto yy215; yy238: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'd') goto yy241; if (yych == 'n') goto yy240; yy239: { RET(TOKEN_PP_IF); } yy240: yych = *++YYCURSOR; if (yych == 'd') goto yy245; goto yy215; yy241: yych = *++YYCURSOR; if (yych != 'e') goto yy215; yych = *++YYCURSOR; if (yych != 'f') goto yy215; ++YYCURSOR; { RET(TOKEN_PP_IFDEF); } yy245: yych = *++YYCURSOR; if (yych != 'e') goto yy215; yych = *++YYCURSOR; if (yych != 'f') goto yy215; ++YYCURSOR; { RET(TOKEN_PP_IFNDEF); } yy249: yych = *++YYCURSOR; if (yych != 'l') goto yy215; yych = *++YYCURSOR; if (yych != 'u') goto yy215; yych = *++YYCURSOR; if (yych != 'd') goto yy215; yych = *++YYCURSOR; if (yych != 'e') goto yy215; ++YYCURSOR; { RET(TOKEN_PP_INCLUDE); } yy255: yych = *++YYCURSOR; if (yych == 'i') goto yy266; if (yych == 's') goto yy267; goto yy215; yy256: yych = *++YYCURSOR; if (yych == 'd') goto yy262; goto yy215; yy257: yych = *++YYCURSOR; if (yych != 'r') goto yy215; yych = *++YYCURSOR; if (yych != 'o') goto yy215; yych = *++YYCURSOR; if (yych != 'r') goto yy215; ++YYCURSOR; { RET(TOKEN_PP_ERROR); } yy262: yych = *++YYCURSOR; if (yych != 'i') goto yy215; yych = *++YYCURSOR; if (yych != 'f') goto yy215; ++YYCURSOR; { RET(TOKEN_PP_ENDIF); } yy266: yych = *++YYCURSOR; if (yych == 'f') goto yy270; goto yy215; yy267: yych = *++YYCURSOR; if (yych != 'e') goto yy215; ++YYCURSOR; { RET(TOKEN_PP_ELSE); } yy270: ++YYCURSOR; { RET(TOKEN_PP_ELIF); } yy272: yych = *++YYCURSOR; if (yych != 'a') goto yy215; yych = *++YYCURSOR; if (yych != 'g') goto yy215; yych = *++YYCURSOR; if (yych != 'm') goto yy215; yych = *++YYCURSOR; if (yych != 'a') goto yy215; ++YYCURSOR; { RET(TOKEN_PP_PRAGMA); } } bad_chars: if (YYLIMIT == YYCURSOR) YYFILL(1); { YYCTYPE yych; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '#') { if (yych <= '\r') { if (yych <= 0x00) goto yy282; if (yych <= 0x08) goto yy284; } else { if (yych <= 0x1F) goto yy284; if (yych == '"') goto yy284; } } else { if (yych <= '@') { if (yych <= '$') goto yy284; if (yych >= '@') goto yy284; } else { if (yych == '`') goto yy284; if (yych >= 0x7F) goto yy284; } } ++YYCURSOR; { cursor--; RET(TOKEN_BAD_CHARS); } yy282: ++YYCURSOR; { if (eoi) { assert( !((token >= sentinel) && (token < sentinel+YYMAXFILL)) ); eoi = 0; cursor = (uchar *) s->source_base + s->orig_length; RET(TOKEN_BAD_CHARS); // next call will be EOI. } goto bad_chars; } yy284: ++YYCURSOR; { goto bad_chars; } } assert(0 && "Shouldn't hit this code"); RET(TOKEN_UNKNOWN); } // preprocessor_lexer // end of mojoshader_lexer.re (or .c) ...