diff options
Diffstat (limited to 'src/prebuilt/wast-lexer-gen.cc')
-rw-r--r-- | src/prebuilt/wast-lexer-gen.cc | 7070 |
1 files changed, 7070 insertions, 0 deletions
diff --git a/src/prebuilt/wast-lexer-gen.cc b/src/prebuilt/wast-lexer-gen.cc new file mode 100644 index 00000000..4545dfd7 --- /dev/null +++ b/src/prebuilt/wast-lexer-gen.cc @@ -0,0 +1,7070 @@ +/* Generated by re2c 0.16 */ +#line 1 "src/wast-lexer.cc" +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wast-lexer.h" + +#include <assert.h> +#include <stdio.h> + +#include "config.h" + +#include "wast-parser.h" +#include "wast-parser-lexer-shared.h" + +/* must be included after so some typedefs will be defined */ +#include "wast-parser-gen.hh" + +#define YYMAXFILL 29 + +#define INITIAL_LEXER_BUFFER_SIZE (64 * 1024) + +#define YY_USER_ACTION \ + { \ + loc->filename = lexer->filename; \ + loc->line = lexer->line; \ + loc->first_column = COLUMN(lexer->token); \ + loc->last_column = COLUMN(lexer->cursor); \ + } + +#define RETURN(name) \ + YY_USER_ACTION; \ + return WABT_TOKEN_TYPE_##name + +#define ERROR(...) \ + YY_USER_ACTION; \ + wast_parser_error(loc, lexer, parser, __VA_ARGS__) + +#define BEGIN(c) \ + do { \ + cond = c; \ + } while (0) +#define FILL(n) \ + do { \ + if (WABT_FAILED(fill(loc, lexer, parser, n))) { \ + RETURN(EOF); \ + continue; \ + } \ + } while (0) + +#define yytext (lexer->token) +#define yyleng (lexer->cursor - lexer->token) + +/* p must be a pointer somewhere in the lexer buffer */ +#define FILE_OFFSET(p) ((p) - (lexer->buffer) + lexer->buffer_file_offset) +#define COLUMN(p) (FILE_OFFSET(p) - lexer->line_file_offset + 1) + +#define COMMENT_NESTING (lexer->comment_nesting) +#define NEWLINE \ + do { \ + lexer->line++; \ + lexer->line_file_offset = FILE_OFFSET(lexer->cursor); \ + } while (0) + +#define TEXT \ + lval->text.start = yytext; \ + lval->text.length = yyleng + +#define TEXT_AT(offset) \ + lval->text.start = yytext + offset; \ + lval->text.length = yyleng - offset + +#define TYPE(type_) lval->type = Type::type_ + +#define OPCODE(name) lval->opcode = Opcode::name + +#define LITERAL(type_) \ + lval->literal.type = LiteralType::type_; \ + lval->literal.text.start = yytext; \ + lval->literal.text.length = yyleng + +namespace wabt { + +static Result fill(Location* loc, + WastLexer* lexer, + WastParser* parser, + size_t need) { + if (lexer->eof) + return Result::Error; + size_t free = lexer->token - lexer->buffer; + assert(static_cast<size_t>(lexer->cursor - lexer->buffer) >= free); + /* our buffer is too small, need to realloc */ + if (free < need) { + char* old_buffer = lexer->buffer; + size_t old_buffer_size = lexer->buffer_size; + size_t new_buffer_size = + old_buffer_size ? old_buffer_size * 2 : INITIAL_LEXER_BUFFER_SIZE; + /* make sure there is enough space for the bytes requested (need) and an + * additional YYMAXFILL bytes which is needed for the re2c lexer + * implementation when the eof is reached */ + while ((new_buffer_size - old_buffer_size) + free < need + YYMAXFILL) + new_buffer_size *= 2; + + char* new_buffer = new char[new_buffer_size]; + if (!new_buffer) { + wast_parser_error(loc, lexer, parser, + "unable to reallocate lexer buffer."); + return Result::Error; + } + memmove(new_buffer, lexer->token, lexer->limit - lexer->token); + lexer->buffer = new_buffer; + lexer->buffer_size = new_buffer_size; + lexer->token = new_buffer + (lexer->token - old_buffer) - free; + lexer->marker = new_buffer + (lexer->marker - old_buffer) - free; + lexer->cursor = new_buffer + (lexer->cursor - old_buffer) - free; + lexer->limit = new_buffer + (lexer->limit - old_buffer) - free; + lexer->buffer_file_offset += free; + free += new_buffer_size - old_buffer_size; + delete[] old_buffer; + } else { + /* shift everything down to make more room in the buffer */ + memmove(lexer->buffer, lexer->token, lexer->limit - lexer->token); + lexer->token -= free; + lexer->marker -= free; + lexer->cursor -= free; + lexer->limit -= free; + lexer->buffer_file_offset += free; + } + /* read the new data into the buffer */ + if (lexer->source.type == WastLexerSourceType::File) { + lexer->limit += fread(lexer->limit, 1, free, lexer->source.file); + } else { + /* TODO(binji): could lex directly from buffer */ + assert(lexer->source.type == WastLexerSourceType::Buffer); + size_t read_size = free; + size_t offset = lexer->source.buffer.read_offset; + size_t bytes_left = lexer->source.buffer.size - offset; + if (read_size > bytes_left) + read_size = bytes_left; + memcpy(lexer->limit, + static_cast<const char*>(lexer->source.buffer.data) + offset, + read_size); + lexer->source.buffer.read_offset += read_size; + lexer->limit += read_size; + } + /* if at the end of file, need to fill YYMAXFILL more characters with "fake + * characters", that are not a lexeme nor a lexeme suffix. see + * http://re2c.org/examples/example_03.html */ + if (lexer->limit < lexer->buffer + lexer->buffer_size - YYMAXFILL) { + lexer->eof = true; + memset(lexer->limit, 0, YYMAXFILL); + lexer->limit += YYMAXFILL; + } + return Result::Ok; +} + +int wast_lexer_lex(WABT_WAST_PARSER_STYPE* lval, + WABT_WAST_PARSER_LTYPE* loc, + WastLexer* lexer, + WastParser* parser) { + enum { + YYCOND_INIT, + YYCOND_BAD_TEXT, + YYCOND_LINE_COMMENT, + YYCOND_BLOCK_COMMENT, + YYCOND_i = YYCOND_INIT, + } cond = YYCOND_INIT; + + for (;;) { + lexer->token = lexer->cursor; + +#line 186 "src/prebuilt/wast-lexer-gen.cc" +{ + unsigned char yych; + if (cond < 2) { + if (cond < 1) { + goto YYCOND_i; + } else { + goto YYCOND_BAD_TEXT; + } + } else { + if (cond < 3) { + goto YYCOND_LINE_COMMENT; + } else { + goto YYCOND_BLOCK_COMMENT; + } + } +/* *********************************** */ +YYCOND_BAD_TEXT: + if ((lexer->limit - lexer->cursor) < 3) FILL(3); + yych = *lexer->cursor; + if (yych <= '!') { + if (yych <= '\t') { + if (yych >= 0x01) goto yy5; + } else { + if (yych <= '\n') goto yy7; + if (yych <= 0x1F) goto yy5; + goto yy9; + } + } else { + if (yych <= '\\') { + if (yych <= '"') goto yy11; + if (yych <= '[') goto yy9; + goto yy13; + } else { + if (yych == 0x7F) goto yy5; + goto yy9; + } + } + ++lexer->cursor; +#line 237 "src/wast-lexer.cc" + { ERROR("unexpected EOF"); RETURN(EOF); } +#line 227 "src/prebuilt/wast-lexer-gen.cc" +yy5: + ++lexer->cursor; +yy6: +#line 238 "src/wast-lexer.cc" + { ERROR("illegal character in string"); + continue; } +#line 234 "src/prebuilt/wast-lexer-gen.cc" +yy7: + ++lexer->cursor; + BEGIN(YYCOND_i); +#line 230 "src/wast-lexer.cc" + { ERROR("newline in string"); + NEWLINE; + continue; } +#line 242 "src/prebuilt/wast-lexer-gen.cc" +yy9: + ++lexer->cursor; +#line 229 "src/wast-lexer.cc" + { continue; } +#line 247 "src/prebuilt/wast-lexer-gen.cc" +yy11: + ++lexer->cursor; + BEGIN(YYCOND_i); +#line 236 "src/wast-lexer.cc" + { TEXT; RETURN(TEXT); } +#line 253 "src/prebuilt/wast-lexer-gen.cc" +yy13: + yych = *++lexer->cursor; + if (yych <= '@') { + if (yych <= '"') { + if (yych == '\n') goto yy6; + if (yych >= '"') goto yy9; + } else { + if (yych <= '\'') { + if (yych >= '\'') goto yy9; + } else { + if (yych <= '/') goto yy14; + if (yych <= '9') goto yy16; + } + } + } else { + if (yych <= 'f') { + if (yych <= '[') { + if (yych <= 'F') goto yy16; + } else { + if (yych <= '\\') goto yy9; + if (yych >= 'a') goto yy16; + } + } else { + if (yych <= 'n') { + if (yych >= 'n') goto yy9; + } else { + if (yych == 't') goto yy9; + } + } + } +yy14: + ++lexer->cursor; +yy15: +#line 233 "src/wast-lexer.cc" + { ERROR("bad escape \"%.*s\"", + static_cast<int>(yyleng), yytext); + continue; } +#line 291 "src/prebuilt/wast-lexer-gen.cc" +yy16: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= '@') { + if (yych <= '/') goto yy15; + if (yych <= '9') goto yy9; + goto yy15; + } else { + if (yych <= 'F') goto yy9; + if (yych <= '`') goto yy15; + if (yych <= 'f') goto yy9; + goto yy15; + } +/* *********************************** */ +YYCOND_BLOCK_COMMENT: + if ((lexer->limit - lexer->cursor) < 2) FILL(2); + yych = *lexer->cursor; + if (yych <= '\'') { + if (yych <= 0x00) goto yy19; + if (yych == '\n') goto yy23; + goto yy21; + } else { + if (yych <= '(') goto yy25; + if (yych == ';') goto yy26; + goto yy21; + } +yy19: + ++lexer->cursor; +#line 464 "src/wast-lexer.cc" + { ERROR("unexpected EOF"); RETURN(EOF); } +#line 321 "src/prebuilt/wast-lexer-gen.cc" +yy21: + ++lexer->cursor; +yy22: +#line 465 "src/wast-lexer.cc" + { continue; } +#line 327 "src/prebuilt/wast-lexer-gen.cc" +yy23: + ++lexer->cursor; +#line 463 "src/wast-lexer.cc" + { NEWLINE; continue; } +#line 332 "src/prebuilt/wast-lexer-gen.cc" +yy25: + yych = *++lexer->cursor; + if (yych == ';') goto yy27; + goto yy22; +yy26: + yych = *++lexer->cursor; + if (yych == ')') goto yy29; + goto yy22; +yy27: + ++lexer->cursor; +#line 459 "src/wast-lexer.cc" + { COMMENT_NESTING++; continue; } +#line 345 "src/prebuilt/wast-lexer-gen.cc" +yy29: + ++lexer->cursor; +#line 460 "src/wast-lexer.cc" + { if (--COMMENT_NESTING == 0) + BEGIN(YYCOND_INIT); + continue; } +#line 352 "src/prebuilt/wast-lexer-gen.cc" +/* *********************************** */ +YYCOND_LINE_COMMENT: + { + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 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, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + }; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yybm[0+yych] & 128) { + goto yy34; + } + goto yy36; +yy33: +#line 457 "src/wast-lexer.cc" + { continue; } +#line 399 "src/prebuilt/wast-lexer-gen.cc" +yy34: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yybm[0+yych] & 128) { + goto yy34; + } + goto yy33; +yy36: + ++lexer->cursor; + BEGIN(YYCOND_i); +#line 456 "src/wast-lexer.cc" + { NEWLINE; continue; } +#line 413 "src/prebuilt/wast-lexer-gen.cc" + } +/* *********************************** */ +YYCOND_i: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 0, 0, 0, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 72, 80, 0, 80, 80, 80, 80, 80, + 64, 64, 80, 80, 64, 80, 80, 80, + 240, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 80, 64, 80, 80, 80, 80, + 80, 208, 208, 208, 208, 208, 208, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 64, 16, 64, 80, 80, + 80, 208, 208, 208, 208, 208, 208, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 64, 80, 64, 80, 0, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + }; + if ((lexer->limit - lexer->cursor) < 29) FILL(29); + yych = *lexer->cursor; + if (yybm[0+yych] & 8) { + goto yy44; + } + switch (yych) { + case 0x00: goto yy40; + case '\t': + case '\n': goto yy47; + case ' ': + case '!': + case '#': + case '%': + case '&': + case '\'': + case '*': + case '.': + case '/': + case ':': + case '<': + case '=': + case '>': + case '?': + 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': + case '\\': + case '^': + case '_': + case '`': + case 'h': + case 'j': + case 'k': + case 'q': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '|': + case '~': goto yy49; + case '"': goto yy52; + case '$': goto yy54; + case '(': goto yy55; + case ')': goto yy57; + case '+': + case '-': goto yy59; + case '0': goto yy60; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy62; + case ';': goto yy64; + case 'a': goto yy65; + case 'b': goto yy66; + case 'c': goto yy67; + case 'd': goto yy68; + case 'e': goto yy69; + case 'f': goto yy70; + case 'g': goto yy71; + case 'i': goto yy72; + case 'l': goto yy73; + case 'm': goto yy74; + case 'n': goto yy75; + case 'o': goto yy76; + case 'p': goto yy77; + case 'r': goto yy78; + case 's': goto yy79; + case 't': goto yy80; + case 'u': goto yy81; + default: goto yy42; + } +yy40: + ++lexer->cursor; +#line 471 "src/wast-lexer.cc" + { RETURN(EOF); } +#line 557 "src/prebuilt/wast-lexer-gen.cc" +yy42: + ++lexer->cursor; +yy43: +#line 472 "src/wast-lexer.cc" + { ERROR("unexpected char"); continue; } +#line 563 "src/prebuilt/wast-lexer-gen.cc" +yy44: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yybm[0+yych] & 8) { + goto yy44; + } +#line 467 "src/wast-lexer.cc" + { continue; } +#line 573 "src/prebuilt/wast-lexer-gen.cc" +yy47: + ++lexer->cursor; +#line 466 "src/wast-lexer.cc" + { NEWLINE; continue; } +#line 578 "src/prebuilt/wast-lexer-gen.cc" +yy49: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; +yy50: + if (yybm[0+yych] & 16) { + goto yy49; + } +yy51: +#line 468 "src/wast-lexer.cc" + { ERROR("unexpected token \"%.*s\"", + static_cast<int>(yyleng), yytext); + continue; } +#line 592 "src/prebuilt/wast-lexer-gen.cc" +yy52: + yych = *(lexer->marker = ++lexer->cursor); + if (yych <= 0x1F) goto yy53; + if (yych != 0x7F) goto yy83; +yy53: + BEGIN(YYCOND_BAD_TEXT); +#line 228 "src/wast-lexer.cc" + { continue; } +#line 601 "src/prebuilt/wast-lexer-gen.cc" +yy54: + yych = *++lexer->cursor; + if (yych <= ';') { + if (yych <= '\'') { + if (yych == '!') goto yy88; + if (yych <= '"') goto yy51; + goto yy88; + } else { + if (yych <= '+') { + if (yych <= ')') goto yy51; + goto yy88; + } else { + if (yych <= ',') goto yy51; + if (yych <= ':') goto yy88; + goto yy51; + } + } + } else { + if (yych <= 'z') { + if (yych <= '[') { + if (yych <= 'Z') goto yy88; + goto yy51; + } else { + if (yych == ']') goto yy51; + goto yy88; + } + } else { + if (yych <= '|') { + if (yych <= '{') goto yy51; + goto yy88; + } else { + if (yych == '~') goto yy88; + goto yy51; + } + } + } +yy55: + ++lexer->cursor; + if ((yych = *lexer->cursor) == ';') goto yy91; +#line 219 "src/wast-lexer.cc" + { RETURN(LPAR); } +#line 643 "src/prebuilt/wast-lexer-gen.cc" +yy57: + ++lexer->cursor; +#line 220 "src/wast-lexer.cc" + { RETURN(RPAR); } +#line 648 "src/prebuilt/wast-lexer-gen.cc" +yy59: + yych = *++lexer->cursor; + if (yych <= 'h') { + if (yych <= '/') goto yy50; + if (yych <= '0') goto yy93; + if (yych <= '9') goto yy95; + goto yy50; + } else { + if (yych <= 'i') goto yy97; + if (yych == 'n') goto yy98; + goto yy50; + } +yy60: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 32) { + goto yy62; + } + if (yych <= 'E') { + if (yych <= '+') { + if (yych <= '"') { + if (yych == '!') goto yy49; + } else { + if (yych <= '\'') goto yy49; + if (yych >= '*') goto yy49; + } + } else { + if (yych <= '.') { + if (yych <= ',') goto yy61; + if (yych <= '-') goto yy49; + goto yy99; + } else { + if (yych == ';') goto yy61; + if (yych <= 'D') goto yy49; + goto yy102; + } + } + } else { + if (yych <= 'w') { + if (yych <= '\\') { + if (yych != '[') goto yy49; + } else { + if (yych <= ']') goto yy61; + if (yych == 'e') goto yy102; + goto yy49; + } + } else { + if (yych <= '{') { + if (yych <= 'x') goto yy103; + if (yych <= 'z') goto yy49; + } else { + if (yych == '}') goto yy61; + if (yych <= '~') goto yy49; + } + } + } +yy61: +#line 221 "src/wast-lexer.cc" + { LITERAL(Int); RETURN(NAT); } +#line 707 "src/prebuilt/wast-lexer-gen.cc" +yy62: + ++lexer->cursor; + if ((lexer->limit - lexer->cursor) < 3) FILL(3); + yych = *lexer->cursor; + if (yybm[0+yych] & 32) { + goto yy62; + } + if (yych <= 'D') { + if (yych <= '+') { + if (yych <= '"') { + if (yych == '!') goto yy49; + goto yy61; + } else { + if (yych <= '\'') goto yy49; + if (yych <= ')') goto yy61; + goto yy49; + } + } else { + if (yych <= '.') { + if (yych <= ',') goto yy61; + if (yych <= '-') goto yy49; + goto yy99; + } else { + if (yych == ';') goto yy61; + goto yy49; + } + } + } else { + if (yych <= 'd') { + if (yych <= '[') { + if (yych <= 'E') goto yy102; + if (yych <= 'Z') goto yy49; + goto yy61; + } else { + if (yych == ']') goto yy61; + goto yy49; + } + } else { + if (yych <= '{') { + if (yych <= 'e') goto yy102; + if (yych <= 'z') goto yy49; + goto yy61; + } else { + if (yych == '}') goto yy61; + if (yych <= '~') goto yy49; + goto yy61; + } + } + } +yy64: + yych = *++lexer->cursor; + if (yych == ';') goto yy104; + goto yy43; +yy65: + yych = *++lexer->cursor; + if (yych <= 'm') { + if (yych == 'l') goto yy106; + goto yy50; + } else { + if (yych <= 'n') goto yy107; + if (yych == 's') goto yy108; + goto yy50; + } +yy66: + yych = *++lexer->cursor; + if (yych == 'l') goto yy109; + if (yych == 'r') goto yy110; + goto yy50; +yy67: + yych = *++lexer->cursor; + if (yych == 'a') goto yy112; + if (yych == 'u') goto yy113; + goto yy50; +yy68: + yych = *++lexer->cursor; + if (yych == 'a') goto yy114; + if (yych == 'r') goto yy115; + goto yy50; +yy69: + yych = *++lexer->cursor; + if (yych <= 'm') { + if (yych == 'l') goto yy116; + goto yy50; + } else { + if (yych <= 'n') goto yy117; + if (yych == 'x') goto yy118; + goto yy50; + } +yy70: + yych = *++lexer->cursor; + if (yych <= '5') { + if (yych == '3') goto yy119; + goto yy50; + } else { + if (yych <= '6') goto yy120; + if (yych == 'u') goto yy121; + goto yy50; + } +yy71: + yych = *++lexer->cursor; + if (yych <= 'k') { + if (yych == 'e') goto yy122; + goto yy50; + } else { + if (yych <= 'l') goto yy123; + if (yych == 'r') goto yy124; + goto yy50; + } +yy72: + yych = *++lexer->cursor; + if (yych <= 'e') { + if (yych <= '3') { + if (yych <= '2') goto yy50; + goto yy125; + } else { + if (yych == '6') goto yy126; + goto yy50; + } + } else { + if (yych <= 'l') { + if (yych <= 'f') goto yy127; + goto yy50; + } else { + if (yych <= 'm') goto yy129; + if (yych <= 'n') goto yy130; + goto yy50; + } + } +yy73: + yych = *++lexer->cursor; + if (yych == 'o') goto yy131; + goto yy50; +yy74: + yych = *++lexer->cursor; + if (yych <= 'n') { + if (yych == 'e') goto yy132; + goto yy50; + } else { + if (yych <= 'o') goto yy133; + if (yych == 'u') goto yy134; + goto yy50; + } +yy75: + yych = *++lexer->cursor; + if (yych == 'a') goto yy135; + if (yych == 'o') goto yy136; + goto yy50; +yy76: + yych = *++lexer->cursor; + if (yych == 'f') goto yy137; + if (yych == 'u') goto yy138; + goto yy50; +yy77: + yych = *++lexer->cursor; + if (yych == 'a') goto yy139; + goto yy50; +yy78: + yych = *++lexer->cursor; + if (yych == 'e') goto yy140; + goto yy50; +yy79: + yych = *++lexer->cursor; + if (yych == 'e') goto yy141; + if (yych == 't') goto yy142; + goto yy50; +yy80: + yych = *++lexer->cursor; + if (yych <= 'e') { + if (yych == 'a') goto yy143; + if (yych <= 'd') goto yy50; + goto yy144; + } else { + if (yych <= 'h') { + if (yych <= 'g') goto yy50; + goto yy145; + } else { + if (yych == 'y') goto yy146; + goto yy50; + } + } +yy81: + yych = *++lexer->cursor; + if (yych == 'n') goto yy147; + goto yy50; +yy82: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; +yy83: + if (yybm[0+yych] & 64) { + goto yy82; + } + if (yych <= 0x1F) goto yy84; + if (yych <= '"') goto yy85; + if (yych <= '\\') goto yy87; +yy84: + lexer->cursor = lexer->marker; + goto yy53; +yy85: + ++lexer->cursor; +#line 227 "src/wast-lexer.cc" + { TEXT; RETURN(TEXT); } +#line 910 "src/prebuilt/wast-lexer-gen.cc" +yy87: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yych <= 'F') { + if (yych <= '\'') { + if (yych == '"') goto yy82; + if (yych <= '&') goto yy84; + goto yy82; + } else { + if (yych <= '/') goto yy84; + if (yych <= '9') goto yy148; + if (yych <= '@') goto yy84; + goto yy148; + } + } else { + if (yych <= 'f') { + if (yych == '\\') goto yy82; + if (yych <= '`') goto yy84; + goto yy148; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy84; + goto yy82; + } else { + if (yych == 't') goto yy82; + goto yy84; + } + } + } +yy88: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yych <= ';') { + if (yych <= '\'') { + if (yych == '!') goto yy88; + if (yych >= '#') goto yy88; + } else { + if (yych <= '+') { + if (yych >= '*') goto yy88; + } else { + if (yych <= ',') goto yy90; + if (yych <= ':') goto yy88; + } + } + } else { + if (yych <= 'z') { + if (yych <= '[') { + if (yych <= 'Z') goto yy88; + } else { + if (yych != ']') goto yy88; + } + } else { + if (yych <= '|') { + if (yych >= '|') goto yy88; + } else { + if (yych == '~') goto yy88; + } + } + } +yy90: +#line 453 "src/wast-lexer.cc" + { TEXT; RETURN(VAR); } +#line 975 "src/prebuilt/wast-lexer-gen.cc" +yy91: + ++lexer->cursor; + BEGIN(YYCOND_BLOCK_COMMENT); +#line 458 "src/wast-lexer.cc" + { COMMENT_NESTING = 1; continue; } +#line 981 "src/prebuilt/wast-lexer-gen.cc" +yy93: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= 'D') { + if (yych <= ',') { + if (yych <= '"') { + if (yych == '!') goto yy49; + } else { + if (yych <= '\'') goto yy49; + if (yych <= ')') goto yy94; + if (yych <= '+') goto yy49; + } + } else { + if (yych <= '/') { + if (yych == '.') goto yy99; + goto yy49; + } else { + if (yych <= '9') goto yy95; + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= 'e') { + if (yych <= '[') { + if (yych <= 'E') goto yy102; + if (yych <= 'Z') goto yy49; + } else { + if (yych == ']') goto yy94; + if (yych <= 'd') goto yy49; + goto yy102; + } + } else { + if (yych <= '{') { + if (yych == 'x') goto yy149; + if (yych <= 'z') goto yy49; + } else { + if (yych == '}') goto yy94; + if (yych <= '~') goto yy49; + } + } + } +yy94: +#line 222 "src/wast-lexer.cc" + { LITERAL(Int); RETURN(INT); } +#line 1025 "src/prebuilt/wast-lexer-gen.cc" +yy95: + ++lexer->cursor; + if ((lexer->limit - lexer->cursor) < 3) FILL(3); + yych = *lexer->cursor; + if (yych <= ';') { + if (yych <= '+') { + if (yych <= '"') { + if (yych == '!') goto yy49; + goto yy94; + } else { + if (yych <= '\'') goto yy49; + if (yych <= ')') goto yy94; + goto yy49; + } + } else { + if (yych <= '.') { + if (yych <= ',') goto yy94; + if (yych <= '-') goto yy49; + goto yy99; + } else { + if (yych <= '/') goto yy49; + if (yych <= '9') goto yy95; + if (yych <= ':') goto yy49; + goto yy94; + } + } + } else { + if (yych <= 'd') { + if (yych <= 'Z') { + if (yych == 'E') goto yy102; + goto yy49; + } else { + if (yych == '\\') goto yy49; + if (yych <= ']') goto yy94; + goto yy49; + } + } else { + if (yych <= '{') { + if (yych <= 'e') goto yy102; + if (yych <= 'z') goto yy49; + goto yy94; + } else { + if (yych == '}') goto yy94; + if (yych <= '~') goto yy49; + goto yy94; + } + } + } +yy97: + yych = *++lexer->cursor; + if (yych == 'n') goto yy150; + goto yy50; +yy98: + yych = *++lexer->cursor; + if (yych == 'a') goto yy135; + goto yy50; +yy99: + ++lexer->cursor; + if ((lexer->limit - lexer->cursor) < 3) FILL(3); + yych = *lexer->cursor; + if (yych <= 'D') { + if (yych <= '+') { + if (yych <= '"') { + if (yych == '!') goto yy49; + } else { + if (yych <= '\'') goto yy49; + if (yych >= '*') goto yy49; + } + } else { + if (yych <= '9') { + if (yych <= ',') goto yy101; + if (yych <= '/') goto yy49; + goto yy99; + } else { + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= 'd') { + if (yych <= '[') { + if (yych <= 'E') goto yy102; + if (yych <= 'Z') goto yy49; + } else { + if (yych != ']') goto yy49; + } + } else { + if (yych <= '{') { + if (yych <= 'e') goto yy102; + if (yych <= 'z') goto yy49; + } else { + if (yych == '}') goto yy101; + if (yych <= '~') goto yy49; + } + } + } +yy101: +#line 223 "src/wast-lexer.cc" + { LITERAL(Float); RETURN(FLOAT); } +#line 1124 "src/prebuilt/wast-lexer-gen.cc" +yy102: + yych = *++lexer->cursor; + if (yych <= ',') { + if (yych == '+') goto yy151; + goto yy50; + } else { + if (yych <= '-') goto yy151; + if (yych <= '/') goto yy50; + if (yych <= '9') goto yy152; + goto yy50; + } +yy103: + yych = *++lexer->cursor; + if (yybm[0+yych] & 128) { + goto yy154; + } + goto yy50; +yy104: + ++lexer->cursor; + BEGIN(YYCOND_LINE_COMMENT); +#line 455 "src/wast-lexer.cc" + { continue; } +#line 1147 "src/prebuilt/wast-lexer-gen.cc" +yy106: + yych = *++lexer->cursor; + if (yych == 'i') goto yy156; + goto yy50; +yy107: + yych = *++lexer->cursor; + if (yych == 'y') goto yy157; + goto yy50; +yy108: + yych = *++lexer->cursor; + if (yych == 's') goto yy158; + goto yy50; +yy109: + yych = *++lexer->cursor; + if (yych == 'o') goto yy159; + goto yy50; +yy110: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= 'Z') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy111; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= '_') { + if (yych <= '\\') { + if (yych >= '\\') goto yy49; + } else { + if (yych <= ']') goto yy111; + if (yych <= '^') goto yy49; + goto yy160; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy111: +#line 253 "src/wast-lexer.cc" + { RETURN(BR); } +#line 1201 "src/prebuilt/wast-lexer-gen.cc" +yy112: + yych = *++lexer->cursor; + if (yych == 'l') goto yy161; + goto yy50; +yy113: + yych = *++lexer->cursor; + if (yych == 'r') goto yy162; + goto yy50; +yy114: + yych = *++lexer->cursor; + if (yych == 't') goto yy163; + goto yy50; +yy115: + yych = *++lexer->cursor; + if (yych == 'o') goto yy164; + goto yy50; +yy116: + yych = *++lexer->cursor; + if (yych == 'e') goto yy165; + if (yych == 's') goto yy166; + goto yy50; +yy117: + yych = *++lexer->cursor; + if (yych == 'd') goto yy167; + goto yy50; +yy118: + yych = *++lexer->cursor; + if (yych == 'p') goto yy169; + goto yy50; +yy119: + yych = *++lexer->cursor; + if (yych == '2') goto yy170; + goto yy50; +yy120: + yych = *++lexer->cursor; + if (yych == '4') goto yy172; + goto yy50; +yy121: + yych = *++lexer->cursor; + if (yych == 'n') goto yy174; + goto yy50; +yy122: + yych = *++lexer->cursor; + if (yych == 't') goto yy175; + goto yy50; +yy123: + yych = *++lexer->cursor; + if (yych == 'o') goto yy177; + goto yy50; +yy124: + yych = *++lexer->cursor; + if (yych == 'o') goto yy178; + goto yy50; +yy125: + yych = *++lexer->cursor; + if (yych == '2') goto yy179; + goto yy50; +yy126: + yych = *++lexer->cursor; + if (yych == '4') goto yy181; + goto yy50; +yy127: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= 'Z') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy128; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= '_') { + if (yych <= '\\') { + if (yych >= '\\') goto yy49; + } else { + if (yych <= ']') goto yy128; + if (yych <= '^') goto yy49; + goto yy183; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy128: +#line 248 "src/wast-lexer.cc" + { RETURN(IF); } +#line 1300 "src/prebuilt/wast-lexer-gen.cc" +yy129: + yych = *++lexer->cursor; + if (yych == 'p') goto yy184; + goto yy50; +yy130: + yych = *++lexer->cursor; + if (yych <= 'o') { + if (yych == 'f') goto yy185; + goto yy50; + } else { + if (yych <= 'p') goto yy187; + if (yych == 'v') goto yy188; + goto yy50; + } +yy131: + yych = *++lexer->cursor; + if (yych == 'c') goto yy189; + if (yych == 'o') goto yy190; + goto yy50; +yy132: + yych = *++lexer->cursor; + if (yych == 'm') goto yy191; + goto yy50; +yy133: + yych = *++lexer->cursor; + if (yych == 'd') goto yy192; + goto yy50; +yy134: + yych = *++lexer->cursor; + if (yych == 't') goto yy193; + goto yy50; +yy135: + yych = *++lexer->cursor; + if (yych == 'n') goto yy195; + goto yy50; +yy136: + yych = *++lexer->cursor; + if (yych == 'p') goto yy197; + goto yy50; +yy137: + yych = *++lexer->cursor; + if (yych == 'f') goto yy199; + goto yy50; +yy138: + yych = *++lexer->cursor; + if (yych == 't') goto yy200; + goto yy50; +yy139: + yych = *++lexer->cursor; + if (yych == 'r') goto yy201; + goto yy50; +yy140: + yych = *++lexer->cursor; + if (yych <= 'r') { + if (yych == 'g') goto yy202; + goto yy50; + } else { + if (yych <= 's') goto yy203; + if (yych <= 't') goto yy204; + goto yy50; + } +yy141: + yych = *++lexer->cursor; + if (yych == 'l') goto yy205; + if (yych == 't') goto yy206; + goto yy50; +yy142: + yych = *++lexer->cursor; + if (yych == 'a') goto yy207; + goto yy50; +yy143: + yych = *++lexer->cursor; + if (yych == 'b') goto yy208; + goto yy50; +yy144: + yych = *++lexer->cursor; + if (yych == 'e') goto yy209; + goto yy50; +yy145: + yych = *++lexer->cursor; + if (yych == 'e') goto yy210; + goto yy50; +yy146: + yych = *++lexer->cursor; + if (yych == 'p') goto yy211; + goto yy50; +yy147: + yych = *++lexer->cursor; + if (yych == 'r') goto yy212; + goto yy50; +yy148: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yych <= '@') { + if (yych <= '/') goto yy84; + if (yych <= '9') goto yy82; + goto yy84; + } else { + if (yych <= 'F') goto yy82; + if (yych <= '`') goto yy84; + if (yych <= 'f') goto yy82; + goto yy84; + } +yy149: + yych = *++lexer->cursor; + if (yych <= '@') { + if (yych <= '/') goto yy50; + if (yych <= '9') goto yy213; + goto yy50; + } else { + if (yych <= 'F') goto yy213; + if (yych <= '`') goto yy50; + if (yych <= 'f') goto yy213; + goto yy50; + } +yy150: + yych = *++lexer->cursor; + if (yych == 'f') goto yy185; + goto yy50; +yy151: + yych = *++lexer->cursor; + if (yych <= '/') goto yy50; + if (yych >= ':') goto yy50; +yy152: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yych <= ':') { + if (yych <= ')') { + if (yych <= '!') { + if (yych <= ' ') goto yy101; + goto yy49; + } else { + if (yych <= '"') goto yy101; + if (yych <= '\'') goto yy49; + goto yy101; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + goto yy101; + } else { + if (yych <= '/') goto yy49; + if (yych <= '9') goto yy152; + goto yy49; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych <= ';') goto yy101; + goto yy49; + } else { + if (yych == '\\') goto yy49; + goto yy101; + } + } else { + if (yych <= '|') { + if (yych == '{') goto yy101; + goto yy49; + } else { + if (yych == '~') goto yy49; + goto yy101; + } + } + } +yy154: + ++lexer->cursor; + if ((lexer->limit - lexer->cursor) < 3) FILL(3); + yych = *lexer->cursor; + if (yybm[0+yych] & 128) { + goto yy154; + } + if (yych <= ';') { + if (yych <= ')') { + if (yych <= '!') { + if (yych <= ' ') goto yy61; + goto yy49; + } else { + if (yych <= '"') goto yy61; + if (yych <= '\'') goto yy49; + goto yy61; + } + } else { + if (yych <= '-') { + if (yych == ',') goto yy61; + goto yy49; + } else { + if (yych <= '.') goto yy215; + if (yych <= ':') goto yy49; + goto yy61; + } + } + } else { + if (yych <= 'p') { + if (yych <= '\\') { + if (yych == '[') goto yy61; + goto yy49; + } else { + if (yych <= ']') goto yy61; + if (yych <= 'o') goto yy49; + goto yy217; + } + } else { + if (yych <= '|') { + if (yych == '{') goto yy61; + goto yy49; + } else { + if (yych == '~') goto yy49; + goto yy61; + } + } + } +yy156: + yych = *++lexer->cursor; + if (yych == 'g') goto yy218; + goto yy50; +yy157: + yych = *++lexer->cursor; + if (yych == 'f') goto yy219; + goto yy50; +yy158: + yych = *++lexer->cursor; + if (yych == 'e') goto yy220; + goto yy50; +yy159: + yych = *++lexer->cursor; + if (yych == 'c') goto yy221; + goto yy50; +yy160: + yych = *++lexer->cursor; + if (yych == 'i') goto yy222; + if (yych == 't') goto yy223; + goto yy50; +yy161: + yych = *++lexer->cursor; + if (yych == 'l') goto yy224; + goto yy50; +yy162: + yych = *++lexer->cursor; + if (yych == 'r') goto yy226; + goto yy50; +yy163: + yych = *++lexer->cursor; + if (yych == 'a') goto yy227; + goto yy50; +yy164: + yych = *++lexer->cursor; + if (yych == 'p') goto yy229; + goto yy50; +yy165: + yych = *++lexer->cursor; + if (yych == 'm') goto yy231; + goto yy50; +yy166: + yych = *++lexer->cursor; + if (yych == 'e') goto yy233; + goto yy50; +yy167: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 260 "src/wast-lexer.cc" + { RETURN(END); } +#line 1567 "src/prebuilt/wast-lexer-gen.cc" +yy169: + yych = *++lexer->cursor; + if (yych == 'o') goto yy235; + goto yy50; +yy170: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= ':') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy171; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych == '.') goto yy236; + goto yy49; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych >= '<') goto yy49; + } else { + if (yych == '\\') goto yy49; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy171: +#line 242 "src/wast-lexer.cc" + { TYPE(F32); RETURN(VALUE_TYPE); } +#line 1608 "src/prebuilt/wast-lexer-gen.cc" +yy172: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= ':') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy173; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych == '.') goto yy237; + goto yy49; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych >= '<') goto yy49; + } else { + if (yych == '\\') goto yy49; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy173: +#line 243 "src/wast-lexer.cc" + { TYPE(F64); RETURN(VALUE_TYPE); } +#line 1645 "src/prebuilt/wast-lexer-gen.cc" +yy174: + yych = *++lexer->cursor; + if (yych == 'c') goto yy238; + goto yy50; +yy175: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= 'Z') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy176; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= '_') { + if (yych <= '\\') { + if (yych >= '\\') goto yy49; + } else { + if (yych <= ']') goto yy176; + if (yych <= '^') goto yy49; + goto yy240; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy176: +#line 440 "src/wast-lexer.cc" + { RETURN(GET); } +#line 1687 "src/prebuilt/wast-lexer-gen.cc" +yy177: + yych = *++lexer->cursor; + if (yych == 'b') goto yy241; + goto yy50; +yy178: + yych = *++lexer->cursor; + if (yych == 'w') goto yy242; + goto yy50; +yy179: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= ':') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy180; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych == '.') goto yy243; + goto yy49; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych >= '<') goto yy49; + } else { + if (yych == '\\') goto yy49; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy180: +#line 240 "src/wast-lexer.cc" + { TYPE(I32); RETURN(VALUE_TYPE); } +#line 1732 "src/prebuilt/wast-lexer-gen.cc" +yy181: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= ':') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy182; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych == '.') goto yy244; + goto yy49; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych >= '<') goto yy49; + } else { + if (yych == '\\') goto yy49; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy182: +#line 241 "src/wast-lexer.cc" + { TYPE(I64); RETURN(VALUE_TYPE); } +#line 1769 "src/prebuilt/wast-lexer-gen.cc" +yy183: + yych = *++lexer->cursor; + if (yych == 'e') goto yy245; + goto yy50; +yy184: + yych = *++lexer->cursor; + if (yych == 'o') goto yy246; + goto yy50; +yy185: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= 'Z') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy186; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= 'i') { + if (yych <= '\\') { + if (yych >= '\\') goto yy49; + } else { + if (yych <= ']') goto yy186; + if (yych <= 'h') goto yy49; + goto yy247; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy186: +#line 225 "src/wast-lexer.cc" + { LITERAL(Infinity); RETURN(FLOAT); } +#line 1815 "src/prebuilt/wast-lexer-gen.cc" +yy187: + yych = *++lexer->cursor; + if (yych == 'u') goto yy248; + goto yy50; +yy188: + yych = *++lexer->cursor; + if (yych == 'o') goto yy249; + goto yy50; +yy189: + yych = *++lexer->cursor; + if (yych == 'a') goto yy250; + goto yy50; +yy190: + yych = *++lexer->cursor; + if (yych == 'p') goto yy251; + goto yy50; +yy191: + yych = *++lexer->cursor; + if (yych == 'o') goto yy253; + goto yy50; +yy192: + yych = *++lexer->cursor; + if (yych == 'u') goto yy254; + goto yy50; +yy193: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 245 "src/wast-lexer.cc" + { RETURN(MUT); } +#line 1847 "src/prebuilt/wast-lexer-gen.cc" +yy195: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= ';') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy196; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych <= '9') goto yy49; + if (yych <= ':') goto yy255; + } + } + } else { + if (yych <= 'z') { + if (yych <= '[') { + if (yych <= 'Z') goto yy49; + } else { + if (yych != ']') goto yy49; + } + } else { + if (yych <= '|') { + if (yych >= '|') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy196: +#line 226 "src/wast-lexer.cc" + { LITERAL(Nan); RETURN(FLOAT); } +#line 1884 "src/prebuilt/wast-lexer-gen.cc" +yy197: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 246 "src/wast-lexer.cc" + { RETURN(NOP); } +#line 1892 "src/prebuilt/wast-lexer-gen.cc" +yy199: + yych = *++lexer->cursor; + if (yych == 's') goto yy256; + goto yy50; +yy200: + yych = *++lexer->cursor; + if (yych == 'p') goto yy257; + goto yy50; +yy201: + yych = *++lexer->cursor; + if (yych == 'a') goto yy258; + goto yy50; +yy202: + yych = *++lexer->cursor; + if (yych == 'i') goto yy259; + goto yy50; +yy203: + yych = *++lexer->cursor; + if (yych == 'u') goto yy260; + goto yy50; +yy204: + yych = *++lexer->cursor; + if (yych == 'u') goto yy261; + goto yy50; +yy205: + yych = *++lexer->cursor; + if (yych == 'e') goto yy262; + goto yy50; +yy206: + yych = *++lexer->cursor; + if (yych == '_') goto yy263; + goto yy50; +yy207: + yych = *++lexer->cursor; + if (yych == 'r') goto yy264; + goto yy50; +yy208: + yych = *++lexer->cursor; + if (yych == 'l') goto yy265; + goto yy50; +yy209: + yych = *++lexer->cursor; + if (yych == '_') goto yy266; + goto yy50; +yy210: + yych = *++lexer->cursor; + if (yych == 'n') goto yy267; + goto yy50; +yy211: + yych = *++lexer->cursor; + if (yych == 'e') goto yy269; + goto yy50; +yy212: + yych = *++lexer->cursor; + if (yych == 'e') goto yy271; + goto yy50; +yy213: + ++lexer->cursor; + if ((lexer->limit - lexer->cursor) < 3) FILL(3); + yych = *lexer->cursor; + if (yych <= '@') { + if (yych <= ',') { + if (yych <= '"') { + if (yych == '!') goto yy49; + goto yy94; + } else { + if (yych <= '\'') goto yy49; + if (yych <= ')') goto yy94; + if (yych <= '+') goto yy49; + goto yy94; + } + } else { + if (yych <= '/') { + if (yych != '.') goto yy49; + } else { + if (yych <= '9') goto yy213; + if (yych == ';') goto yy94; + goto yy49; + } + } + } else { + if (yych <= 'f') { + if (yych <= '[') { + if (yych <= 'F') goto yy213; + if (yych <= 'Z') goto yy49; + goto yy94; + } else { + if (yych == ']') goto yy94; + if (yych <= '`') goto yy49; + goto yy213; + } + } else { + if (yych <= '{') { + if (yych == 'p') goto yy217; + if (yych <= 'z') goto yy49; + goto yy94; + } else { + if (yych == '}') goto yy94; + if (yych <= '~') goto yy49; + goto yy94; + } + } + } +yy215: + ++lexer->cursor; + if ((lexer->limit - lexer->cursor) < 3) FILL(3); + yych = *lexer->cursor; + if (yych <= 'F') { + if (yych <= '+') { + if (yych <= '"') { + if (yych == '!') goto yy49; + goto yy51; + } else { + if (yych <= '\'') goto yy49; + if (yych <= ')') goto yy51; + goto yy49; + } + } else { + if (yych <= '9') { + if (yych <= ',') goto yy51; + if (yych <= '/') goto yy49; + goto yy215; + } else { + if (yych == ';') goto yy51; + if (yych <= '@') goto yy49; + goto yy215; + } + } + } else { + if (yych <= 'o') { + if (yych <= '\\') { + if (yych == '[') goto yy51; + goto yy49; + } else { + if (yych <= ']') goto yy51; + if (yych <= '`') goto yy49; + if (yych <= 'f') goto yy215; + goto yy49; + } + } else { + if (yych <= '{') { + if (yych <= 'p') goto yy217; + if (yych <= 'z') goto yy49; + goto yy51; + } else { + if (yych == '}') goto yy51; + if (yych <= '~') goto yy49; + goto yy51; + } + } + } +yy217: + yych = *++lexer->cursor; + if (yych <= ',') { + if (yych == '+') goto yy272; + goto yy50; + } else { + if (yych <= '-') goto yy272; + if (yych <= '/') goto yy50; + if (yych <= '9') goto yy273; + goto yy50; + } +yy218: + yych = *++lexer->cursor; + if (yych == 'n') goto yy276; + goto yy50; +yy219: + yych = *++lexer->cursor; + if (yych == 'u') goto yy277; + goto yy50; +yy220: + yych = *++lexer->cursor; + if (yych == 'r') goto yy278; + goto yy50; +yy221: + yych = *++lexer->cursor; + if (yych == 'k') goto yy279; + goto yy50; +yy222: + yych = *++lexer->cursor; + if (yych == 'f') goto yy281; + goto yy50; +yy223: + yych = *++lexer->cursor; + if (yych == 'a') goto yy283; + goto yy50; +yy224: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= 'Z') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy225; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= '_') { + if (yych <= '\\') { + if (yych >= '\\') goto yy49; + } else { + if (yych <= ']') goto yy225; + if (yych <= '^') goto yy49; + goto yy284; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy225: +#line 256 "src/wast-lexer.cc" + { RETURN(CALL); } +#line 2116 "src/prebuilt/wast-lexer-gen.cc" +yy226: + yych = *++lexer->cursor; + if (yych == 'e') goto yy285; + goto yy50; +yy227: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 434 "src/wast-lexer.cc" + { RETURN(DATA); } +#line 2128 "src/prebuilt/wast-lexer-gen.cc" +yy229: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 259 "src/wast-lexer.cc" + { RETURN(DROP); } +#line 2136 "src/prebuilt/wast-lexer-gen.cc" +yy231: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 433 "src/wast-lexer.cc" + { RETURN(ELEM); } +#line 2144 "src/prebuilt/wast-lexer-gen.cc" +yy233: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 251 "src/wast-lexer.cc" + { RETURN(ELSE); } +#line 2152 "src/prebuilt/wast-lexer-gen.cc" +yy235: + yych = *++lexer->cursor; + if (yych == 'r') goto yy286; + goto yy50; +yy236: + yych = *++lexer->cursor; + switch (yych) { + case 'a': goto yy287; + case 'c': goto yy288; + case 'd': goto yy289; + case 'e': goto yy290; + case 'f': goto yy291; + case 'g': goto yy292; + case 'l': goto yy293; + case 'm': goto yy294; + case 'n': goto yy295; + case 'r': goto yy296; + case 's': goto yy297; + case 't': goto yy298; + default: goto yy50; + } +yy237: + yych = *++lexer->cursor; + switch (yych) { + case 'a': goto yy299; + case 'c': goto yy300; + case 'd': goto yy301; + case 'e': goto yy302; + case 'f': goto yy303; + case 'g': goto yy304; + case 'l': goto yy305; + case 'm': goto yy306; + case 'n': goto yy307; + case 'p': goto yy308; + case 'r': goto yy309; + case 's': goto yy310; + case 't': goto yy311; + default: goto yy50; + } +yy238: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 424 "src/wast-lexer.cc" + { RETURN(FUNC); } +#line 2199 "src/prebuilt/wast-lexer-gen.cc" +yy240: + yych = *++lexer->cursor; + if (yych == 'g') goto yy312; + if (yych == 'l') goto yy313; + goto yy50; +yy241: + yych = *++lexer->cursor; + if (yych == 'a') goto yy314; + goto yy50; +yy242: + yych = *++lexer->cursor; + if (yych == '_') goto yy315; + goto yy50; +yy243: + yych = *++lexer->cursor; + switch (yych) { + case 'a': goto yy316; + case 'c': goto yy317; + case 'd': goto yy318; + case 'e': goto yy319; + case 'g': goto yy320; + case 'l': goto yy321; + case 'm': goto yy322; + case 'n': goto yy323; + case 'o': goto yy324; + case 'p': goto yy325; + case 'r': goto yy326; + case 's': goto yy327; + case 't': goto yy328; + case 'w': goto yy329; + case 'x': goto yy330; + default: goto yy50; + } +yy244: + yych = *++lexer->cursor; + switch (yych) { + case 'a': goto yy331; + case 'c': goto yy332; + case 'd': goto yy333; + case 'e': goto yy334; + case 'g': goto yy335; + case 'l': goto yy336; + case 'm': goto yy337; + case 'n': goto yy338; + case 'o': goto yy339; + case 'p': goto yy340; + case 'r': goto yy341; + case 's': goto yy342; + case 't': goto yy343; + case 'x': goto yy344; + default: goto yy50; + } +yy245: + yych = *++lexer->cursor; + if (yych == 'l') goto yy345; + goto yy50; +yy246: + yych = *++lexer->cursor; + if (yych == 'r') goto yy346; + goto yy50; +yy247: + yych = *++lexer->cursor; + if (yych == 'n') goto yy347; + goto yy50; +yy248: + yych = *++lexer->cursor; + if (yych == 't') goto yy348; + goto yy50; +yy249: + yych = *++lexer->cursor; + if (yych == 'k') goto yy350; + goto yy50; +yy250: + yych = *++lexer->cursor; + if (yych == 'l') goto yy351; + goto yy50; +yy251: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 252 "src/wast-lexer.cc" + { RETURN(LOOP); } +#line 2283 "src/prebuilt/wast-lexer-gen.cc" +yy253: + yych = *++lexer->cursor; + if (yych == 'r') goto yy353; + goto yy50; +yy254: + yych = *++lexer->cursor; + if (yych == 'l') goto yy354; + goto yy50; +yy255: + yych = *++lexer->cursor; + if (yych == '0') goto yy355; + goto yy50; +yy256: + yych = *++lexer->cursor; + if (yych == 'e') goto yy356; + goto yy50; +yy257: + yych = *++lexer->cursor; + if (yych == 'u') goto yy357; + goto yy50; +yy258: + yych = *++lexer->cursor; + if (yych == 'm') goto yy358; + goto yy50; +yy259: + yych = *++lexer->cursor; + if (yych == 's') goto yy360; + goto yy50; +yy260: + yych = *++lexer->cursor; + if (yych == 'l') goto yy361; + goto yy50; +yy261: + yych = *++lexer->cursor; + if (yych == 'r') goto yy362; + goto yy50; +yy262: + yych = *++lexer->cursor; + if (yych == 'c') goto yy363; + goto yy50; +yy263: + yych = *++lexer->cursor; + if (yych == 'g') goto yy364; + if (yych == 'l') goto yy365; + goto yy50; +yy264: + yych = *++lexer->cursor; + if (yych == 't') goto yy366; + goto yy50; +yy265: + yych = *++lexer->cursor; + if (yych == 'e') goto yy368; + goto yy50; +yy266: + yych = *++lexer->cursor; + if (yych == 'l') goto yy370; + goto yy50; +yy267: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 250 "src/wast-lexer.cc" + { RETURN(THEN); } +#line 2348 "src/prebuilt/wast-lexer-gen.cc" +yy269: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 423 "src/wast-lexer.cc" + { RETURN(TYPE); } +#line 2356 "src/prebuilt/wast-lexer-gen.cc" +yy271: + yych = *++lexer->cursor; + if (yych == 'a') goto yy371; + goto yy50; +yy272: + yych = *++lexer->cursor; + if (yych <= '/') goto yy50; + if (yych >= ':') goto yy50; +yy273: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yych <= ':') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy275; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych <= '/') goto yy49; + if (yych <= '9') goto yy273; + goto yy49; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych >= '<') goto yy49; + } else { + if (yych == '\\') goto yy49; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy275: +#line 224 "src/wast-lexer.cc" + { LITERAL(Hexfloat); RETURN(FLOAT); } +#line 2404 "src/prebuilt/wast-lexer-gen.cc" +yy276: + yych = *++lexer->cursor; + if (yych == '=') goto yy372; + goto yy50; +yy277: + yych = *++lexer->cursor; + if (yych == 'n') goto yy373; + goto yy50; +yy278: + yych = *++lexer->cursor; + if (yych == 't') goto yy374; + goto yy50; +yy279: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 247 "src/wast-lexer.cc" + { RETURN(BLOCK); } +#line 2424 "src/prebuilt/wast-lexer-gen.cc" +yy281: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 254 "src/wast-lexer.cc" + { RETURN(BR_IF); } +#line 2432 "src/prebuilt/wast-lexer-gen.cc" +yy283: + yych = *++lexer->cursor; + if (yych == 'b') goto yy375; + goto yy50; +yy284: + yych = *++lexer->cursor; + if (yych == 'i') goto yy376; + goto yy50; +yy285: + yych = *++lexer->cursor; + if (yych == 'n') goto yy377; + goto yy50; +yy286: + yych = *++lexer->cursor; + if (yych == 't') goto yy378; + goto yy50; +yy287: + yych = *++lexer->cursor; + if (yych == 'b') goto yy380; + if (yych == 'd') goto yy381; + goto yy50; +yy288: + yych = *++lexer->cursor; + if (yych == 'e') goto yy382; + if (yych == 'o') goto yy383; + goto yy50; +yy289: + yych = *++lexer->cursor; + if (yych == 'e') goto yy384; + if (yych == 'i') goto yy385; + goto yy50; +yy290: + yych = *++lexer->cursor; + if (yych == 'q') goto yy386; + goto yy50; +yy291: + yych = *++lexer->cursor; + if (yych == 'l') goto yy388; + goto yy50; +yy292: + yych = *++lexer->cursor; + if (yych == 'e') goto yy389; + if (yych == 't') goto yy391; + goto yy50; +yy293: + yych = *++lexer->cursor; + if (yych <= 'n') { + if (yych == 'e') goto yy393; + goto yy50; + } else { + if (yych <= 'o') goto yy395; + if (yych == 't') goto yy396; + goto yy50; + } +yy294: + yych = *++lexer->cursor; + if (yych <= 'h') { + if (yych == 'a') goto yy398; + goto yy50; + } else { + if (yych <= 'i') goto yy399; + if (yych == 'u') goto yy400; + goto yy50; + } +yy295: + yych = *++lexer->cursor; + if (yych == 'e') goto yy401; + goto yy50; +yy296: + yych = *++lexer->cursor; + if (yych == 'e') goto yy403; + goto yy50; +yy297: + yych = *++lexer->cursor; + if (yych <= 's') { + if (yych == 'q') goto yy404; + goto yy50; + } else { + if (yych <= 't') goto yy405; + if (yych <= 'u') goto yy406; + goto yy50; + } +yy298: + yych = *++lexer->cursor; + if (yych == 'r') goto yy407; + goto yy50; +yy299: + yych = *++lexer->cursor; + if (yych == 'b') goto yy408; + if (yych == 'd') goto yy409; + goto yy50; +yy300: + yych = *++lexer->cursor; + if (yych == 'e') goto yy410; + if (yych == 'o') goto yy411; + goto yy50; +yy301: + yych = *++lexer->cursor; + if (yych == 'i') goto yy412; + goto yy50; +yy302: + yych = *++lexer->cursor; + if (yych == 'q') goto yy413; + goto yy50; +yy303: + yych = *++lexer->cursor; + if (yych == 'l') goto yy415; + goto yy50; +yy304: + yych = *++lexer->cursor; + if (yych == 'e') goto yy416; + if (yych == 't') goto yy418; + goto yy50; +yy305: + yych = *++lexer->cursor; + if (yych <= 'n') { + if (yych == 'e') goto yy420; + goto yy50; + } else { + if (yych <= 'o') goto yy422; + if (yych == 't') goto yy423; + goto yy50; + } +yy306: + yych = *++lexer->cursor; + if (yych <= 'h') { + if (yych == 'a') goto yy425; + goto yy50; + } else { + if (yych <= 'i') goto yy426; + if (yych == 'u') goto yy427; + goto yy50; + } +yy307: + yych = *++lexer->cursor; + if (yych == 'e') goto yy428; + goto yy50; +yy308: + yych = *++lexer->cursor; + if (yych == 'r') goto yy430; + goto yy50; +yy309: + yych = *++lexer->cursor; + if (yych == 'e') goto yy431; + goto yy50; +yy310: + yych = *++lexer->cursor; + if (yych <= 's') { + if (yych == 'q') goto yy432; + goto yy50; + } else { + if (yych <= 't') goto yy433; + if (yych <= 'u') goto yy434; + goto yy50; + } +yy311: + yych = *++lexer->cursor; + if (yych == 'r') goto yy435; + goto yy50; +yy312: + yych = *++lexer->cursor; + if (yych == 'l') goto yy436; + goto yy50; +yy313: + yych = *++lexer->cursor; + if (yych == 'o') goto yy437; + goto yy50; +yy314: + yych = *++lexer->cursor; + if (yych == 'l') goto yy438; + goto yy50; +yy315: + yych = *++lexer->cursor; + if (yych == 'm') goto yy440; + goto yy50; +yy316: + yych = *++lexer->cursor; + if (yych == 'd') goto yy441; + if (yych == 'n') goto yy442; + goto yy50; +yy317: + yych = *++lexer->cursor; + if (yych <= 'n') { + if (yych == 'l') goto yy443; + goto yy50; + } else { + if (yych <= 'o') goto yy444; + if (yych == 't') goto yy445; + goto yy50; + } +yy318: + yych = *++lexer->cursor; + if (yych == 'i') goto yy446; + goto yy50; +yy319: + yych = *++lexer->cursor; + if (yych == 'q') goto yy447; + goto yy50; +yy320: + yych = *++lexer->cursor; + if (yych == 'e') goto yy449; + if (yych == 't') goto yy450; + goto yy50; +yy321: + yych = *++lexer->cursor; + if (yych <= 'n') { + if (yych == 'e') goto yy451; + goto yy50; + } else { + if (yych <= 'o') goto yy452; + if (yych == 't') goto yy453; + goto yy50; + } +yy322: + yych = *++lexer->cursor; + if (yych == 'u') goto yy454; + goto yy50; +yy323: + yych = *++lexer->cursor; + if (yych == 'e') goto yy455; + goto yy50; +yy324: + yych = *++lexer->cursor; + if (yych == 'r') goto yy457; + goto yy50; +yy325: + yych = *++lexer->cursor; + if (yych == 'o') goto yy459; + goto yy50; +yy326: + yych = *++lexer->cursor; + if (yych == 'e') goto yy460; + if (yych == 'o') goto yy461; + goto yy50; +yy327: + yych = *++lexer->cursor; + if (yych <= 's') { + if (yych == 'h') goto yy462; + goto yy50; + } else { + if (yych <= 't') goto yy463; + if (yych <= 'u') goto yy464; + goto yy50; + } +yy328: + yych = *++lexer->cursor; + if (yych == 'r') goto yy465; + goto yy50; +yy329: + yych = *++lexer->cursor; + if (yych == 'r') goto yy466; + goto yy50; +yy330: + yych = *++lexer->cursor; + if (yych == 'o') goto yy467; + goto yy50; +yy331: + yych = *++lexer->cursor; + if (yych == 'd') goto yy468; + if (yych == 'n') goto yy469; + goto yy50; +yy332: + yych = *++lexer->cursor; + if (yych <= 'n') { + if (yych == 'l') goto yy470; + goto yy50; + } else { + if (yych <= 'o') goto yy471; + if (yych == 't') goto yy472; + goto yy50; + } +yy333: + yych = *++lexer->cursor; + if (yych == 'i') goto yy473; + goto yy50; +yy334: + yych = *++lexer->cursor; + if (yych == 'q') goto yy474; + if (yych == 'x') goto yy476; + goto yy50; +yy335: + yych = *++lexer->cursor; + if (yych == 'e') goto yy477; + if (yych == 't') goto yy478; + goto yy50; +yy336: + yych = *++lexer->cursor; + if (yych <= 'n') { + if (yych == 'e') goto yy479; + goto yy50; + } else { + if (yych <= 'o') goto yy480; + if (yych == 't') goto yy481; + goto yy50; + } +yy337: + yych = *++lexer->cursor; + if (yych == 'u') goto yy482; + goto yy50; +yy338: + yych = *++lexer->cursor; + if (yych == 'e') goto yy483; + goto yy50; +yy339: + yych = *++lexer->cursor; + if (yych == 'r') goto yy485; + goto yy50; +yy340: + yych = *++lexer->cursor; + if (yych == 'o') goto yy487; + goto yy50; +yy341: + yych = *++lexer->cursor; + if (yych == 'e') goto yy488; + if (yych == 'o') goto yy489; + goto yy50; +yy342: + yych = *++lexer->cursor; + if (yych <= 's') { + if (yych == 'h') goto yy490; + goto yy50; + } else { + if (yych <= 't') goto yy491; + if (yych <= 'u') goto yy492; + goto yy50; + } +yy343: + yych = *++lexer->cursor; + if (yych == 'r') goto yy493; + goto yy50; +yy344: + yych = *++lexer->cursor; + if (yych == 'o') goto yy494; + goto yy50; +yy345: + yych = *++lexer->cursor; + if (yych == 's') goto yy495; + goto yy50; +yy346: + yych = *++lexer->cursor; + if (yych == 't') goto yy496; + goto yy50; +yy347: + yych = *++lexer->cursor; + if (yych == 'i') goto yy498; + goto yy50; +yy348: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 451 "src/wast-lexer.cc" + { RETURN(INPUT); } +#line 2786 "src/prebuilt/wast-lexer-gen.cc" +yy350: + yych = *++lexer->cursor; + if (yych == 'e') goto yy499; + goto yy50; +yy351: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 427 "src/wast-lexer.cc" + { RETURN(LOCAL); } +#line 2798 "src/prebuilt/wast-lexer-gen.cc" +yy353: + yych = *++lexer->cursor; + if (yych == 'y') goto yy501; + goto yy50; +yy354: + yych = *++lexer->cursor; + if (yych == 'e') goto yy503; + goto yy50; +yy355: + yych = *++lexer->cursor; + if (yych == 'x') goto yy505; + goto yy50; +yy356: + yych = *++lexer->cursor; + if (yych == 't') goto yy506; + goto yy50; +yy357: + yych = *++lexer->cursor; + if (yych == 't') goto yy508; + goto yy50; +yy358: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 425 "src/wast-lexer.cc" + { RETURN(PARAM); } +#line 2826 "src/prebuilt/wast-lexer-gen.cc" +yy360: + yych = *++lexer->cursor; + if (yych == 't') goto yy510; + goto yy50; +yy361: + yych = *++lexer->cursor; + if (yych == 't') goto yy511; + goto yy50; +yy362: + yych = *++lexer->cursor; + if (yych == 'n') goto yy513; + goto yy50; +yy363: + yych = *++lexer->cursor; + if (yych == 't') goto yy515; + goto yy50; +yy364: + yych = *++lexer->cursor; + if (yych == 'l') goto yy517; + goto yy50; +yy365: + yych = *++lexer->cursor; + if (yych == 'o') goto yy518; + goto yy50; +yy366: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 432 "src/wast-lexer.cc" + { RETURN(START); } +#line 2858 "src/prebuilt/wast-lexer-gen.cc" +yy368: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 430 "src/wast-lexer.cc" + { RETURN(TABLE); } +#line 2866 "src/prebuilt/wast-lexer-gen.cc" +yy370: + yych = *++lexer->cursor; + if (yych == 'o') goto yy519; + goto yy50; +yy371: + yych = *++lexer->cursor; + if (yych == 'c') goto yy520; + goto yy50; +yy372: + yych = *++lexer->cursor; + if (yych <= '/') goto yy50; + if (yych <= '0') goto yy521; + if (yych <= '9') goto yy523; + goto yy50; +yy373: + yych = *++lexer->cursor; + if (yych == 'c') goto yy525; + goto yy50; +yy374: + yych = *++lexer->cursor; + if (yych == '_') goto yy527; + goto yy50; +yy375: + yych = *++lexer->cursor; + if (yych == 'l') goto yy528; + goto yy50; +yy376: + yych = *++lexer->cursor; + if (yych <= 'l') goto yy50; + if (yych <= 'm') goto yy529; + if (yych <= 'n') goto yy530; + goto yy50; +yy377: + yych = *++lexer->cursor; + if (yych == 't') goto yy531; + goto yy50; +yy378: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 437 "src/wast-lexer.cc" + { RETURN(EXPORT); } +#line 2910 "src/prebuilt/wast-lexer-gen.cc" +yy380: + yych = *++lexer->cursor; + if (yych == 's') goto yy532; + goto yy50; +yy381: + yych = *++lexer->cursor; + if (yych == 'd') goto yy534; + goto yy50; +yy382: + yych = *++lexer->cursor; + if (yych == 'i') goto yy536; + goto yy50; +yy383: + yych = *++lexer->cursor; + if (yych == 'n') goto yy537; + if (yych == 'p') goto yy538; + goto yy50; +yy384: + yych = *++lexer->cursor; + if (yych == 'm') goto yy539; + goto yy50; +yy385: + yych = *++lexer->cursor; + if (yych == 'v') goto yy540; + goto yy50; +yy386: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 382 "src/wast-lexer.cc" + { OPCODE(F32Eq); RETURN(COMPARE); } +#line 2943 "src/prebuilt/wast-lexer-gen.cc" +yy388: + yych = *++lexer->cursor; + if (yych == 'o') goto yy542; + goto yy50; +yy389: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 392 "src/wast-lexer.cc" + { OPCODE(F32Ge); RETURN(COMPARE); } +#line 2955 "src/prebuilt/wast-lexer-gen.cc" +yy391: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 390 "src/wast-lexer.cc" + { OPCODE(F32Gt); RETURN(COMPARE); } +#line 2963 "src/prebuilt/wast-lexer-gen.cc" +yy393: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 388 "src/wast-lexer.cc" + { OPCODE(F32Le); RETURN(COMPARE); } +#line 2971 "src/prebuilt/wast-lexer-gen.cc" +yy395: + yych = *++lexer->cursor; + if (yych == 'a') goto yy543; + goto yy50; +yy396: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 386 "src/wast-lexer.cc" + { OPCODE(F32Lt); RETURN(COMPARE); } +#line 2983 "src/prebuilt/wast-lexer-gen.cc" +yy398: + yych = *++lexer->cursor; + if (yych == 'x') goto yy544; + goto yy50; +yy399: + yych = *++lexer->cursor; + if (yych == 'n') goto yy546; + goto yy50; +yy400: + yych = *++lexer->cursor; + if (yych == 'l') goto yy548; + goto yy50; +yy401: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= '[') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy402; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ':') { + if (yych != ',') goto yy49; + } else { + if (yych <= ';') goto yy402; + if (yych <= 'Z') goto yy49; + } + } + } else { + if (yych <= 'g') { + if (yych <= '`') { + if (yych != ']') goto yy49; + } else { + if (yych <= 'a') goto yy550; + if (yych <= 'f') goto yy49; + goto yy551; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy402: +#line 384 "src/wast-lexer.cc" + { OPCODE(F32Ne); RETURN(COMPARE); } +#line 3034 "src/prebuilt/wast-lexer-gen.cc" +yy403: + yych = *++lexer->cursor; + if (yych == 'i') goto yy553; + goto yy50; +yy404: + yych = *++lexer->cursor; + if (yych == 'r') goto yy554; + goto yy50; +yy405: + yych = *++lexer->cursor; + if (yych == 'o') goto yy555; + goto yy50; +yy406: + yych = *++lexer->cursor; + if (yych == 'b') goto yy556; + goto yy50; +yy407: + yych = *++lexer->cursor; + if (yych == 'u') goto yy558; + goto yy50; +yy408: + yych = *++lexer->cursor; + if (yych == 's') goto yy559; + goto yy50; +yy409: + yych = *++lexer->cursor; + if (yych == 'd') goto yy561; + goto yy50; +yy410: + yych = *++lexer->cursor; + if (yych == 'i') goto yy563; + goto yy50; +yy411: + yych = *++lexer->cursor; + if (yych == 'n') goto yy564; + if (yych == 'p') goto yy565; + goto yy50; +yy412: + yych = *++lexer->cursor; + if (yych == 'v') goto yy566; + goto yy50; +yy413: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 383 "src/wast-lexer.cc" + { OPCODE(F64Eq); RETURN(COMPARE); } +#line 3083 "src/prebuilt/wast-lexer-gen.cc" +yy415: + yych = *++lexer->cursor; + if (yych == 'o') goto yy568; + goto yy50; +yy416: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 393 "src/wast-lexer.cc" + { OPCODE(F64Ge); RETURN(COMPARE); } +#line 3095 "src/prebuilt/wast-lexer-gen.cc" +yy418: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 391 "src/wast-lexer.cc" + { OPCODE(F64Gt); RETURN(COMPARE); } +#line 3103 "src/prebuilt/wast-lexer-gen.cc" +yy420: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 389 "src/wast-lexer.cc" + { OPCODE(F64Le); RETURN(COMPARE); } +#line 3111 "src/prebuilt/wast-lexer-gen.cc" +yy422: + yych = *++lexer->cursor; + if (yych == 'a') goto yy569; + goto yy50; +yy423: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 387 "src/wast-lexer.cc" + { OPCODE(F64Lt); RETURN(COMPARE); } +#line 3123 "src/prebuilt/wast-lexer-gen.cc" +yy425: + yych = *++lexer->cursor; + if (yych == 'x') goto yy570; + goto yy50; +yy426: + yych = *++lexer->cursor; + if (yych == 'n') goto yy572; + goto yy50; +yy427: + yych = *++lexer->cursor; + if (yych == 'l') goto yy574; + goto yy50; +yy428: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= '[') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy429; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ':') { + if (yych != ',') goto yy49; + } else { + if (yych <= ';') goto yy429; + if (yych <= 'Z') goto yy49; + } + } + } else { + if (yych <= 'g') { + if (yych <= '`') { + if (yych != ']') goto yy49; + } else { + if (yych <= 'a') goto yy576; + if (yych <= 'f') goto yy49; + goto yy577; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy429: +#line 385 "src/wast-lexer.cc" + { OPCODE(F64Ne); RETURN(COMPARE); } +#line 3174 "src/prebuilt/wast-lexer-gen.cc" +yy430: + yych = *++lexer->cursor; + if (yych == 'o') goto yy579; + goto yy50; +yy431: + yych = *++lexer->cursor; + if (yych == 'i') goto yy580; + goto yy50; +yy432: + yych = *++lexer->cursor; + if (yych == 'r') goto yy581; + goto yy50; +yy433: + yych = *++lexer->cursor; + if (yych == 'o') goto yy582; + goto yy50; +yy434: + yych = *++lexer->cursor; + if (yych == 'b') goto yy583; + goto yy50; +yy435: + yych = *++lexer->cursor; + if (yych == 'u') goto yy585; + goto yy50; +yy436: + yych = *++lexer->cursor; + if (yych == 'o') goto yy586; + goto yy50; +yy437: + yych = *++lexer->cursor; + if (yych == 'c') goto yy587; + goto yy50; +yy438: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 428 "src/wast-lexer.cc" + { RETURN(GLOBAL); } +#line 3214 "src/prebuilt/wast-lexer-gen.cc" +yy440: + yych = *++lexer->cursor; + if (yych == 'e') goto yy588; + goto yy50; +yy441: + yych = *++lexer->cursor; + if (yych == 'd') goto yy589; + goto yy50; +yy442: + yych = *++lexer->cursor; + if (yych == 'd') goto yy591; + goto yy50; +yy443: + yych = *++lexer->cursor; + if (yych == 'z') goto yy593; + goto yy50; +yy444: + yych = *++lexer->cursor; + if (yych == 'n') goto yy595; + goto yy50; +yy445: + yych = *++lexer->cursor; + if (yych == 'z') goto yy596; + goto yy50; +yy446: + yych = *++lexer->cursor; + if (yych == 'v') goto yy598; + goto yy50; +yy447: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= 'Z') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy448; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= 'z') { + if (yych <= '\\') { + if (yych >= '\\') goto yy49; + } else { + if (yych <= ']') goto yy448; + if (yych <= 'y') goto yy49; + goto yy599; + } + } else { + if (yych <= '|') { + if (yych >= '|') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy448: +#line 362 "src/wast-lexer.cc" + { OPCODE(I32Eq); RETURN(COMPARE); } +#line 3280 "src/prebuilt/wast-lexer-gen.cc" +yy449: + yych = *++lexer->cursor; + if (yych == '_') goto yy601; + goto yy50; +yy450: + yych = *++lexer->cursor; + if (yych == '_') goto yy602; + goto yy50; +yy451: + yych = *++lexer->cursor; + if (yych == '_') goto yy603; + goto yy50; +yy452: + yych = *++lexer->cursor; + if (yych == 'a') goto yy604; + goto yy50; +yy453: + yych = *++lexer->cursor; + if (yych == '_') goto yy605; + goto yy50; +yy454: + yych = *++lexer->cursor; + if (yych == 'l') goto yy606; + goto yy50; +yy455: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 364 "src/wast-lexer.cc" + { OPCODE(I32Ne); RETURN(COMPARE); } +#line 3312 "src/prebuilt/wast-lexer-gen.cc" +yy457: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 334 "src/wast-lexer.cc" + { OPCODE(I32Or); RETURN(BINARY); } +#line 3320 "src/prebuilt/wast-lexer-gen.cc" +yy459: + yych = *++lexer->cursor; + if (yych == 'p') goto yy608; + goto yy50; +yy460: + yych = *++lexer->cursor; + if (yych == 'i') goto yy609; + if (yych == 'm') goto yy610; + goto yy50; +yy461: + yych = *++lexer->cursor; + if (yych == 't') goto yy611; + goto yy50; +yy462: + yych = *++lexer->cursor; + if (yych == 'l') goto yy612; + if (yych == 'r') goto yy614; + goto yy50; +yy463: + yych = *++lexer->cursor; + if (yych == 'o') goto yy615; + goto yy50; +yy464: + yych = *++lexer->cursor; + if (yych == 'b') goto yy616; + goto yy50; +yy465: + yych = *++lexer->cursor; + if (yych == 'u') goto yy618; + goto yy50; +yy466: + yych = *++lexer->cursor; + if (yych == 'a') goto yy619; + goto yy50; +yy467: + yych = *++lexer->cursor; + if (yych == 'r') goto yy620; + goto yy50; +yy468: + yych = *++lexer->cursor; + if (yych == 'd') goto yy622; + goto yy50; +yy469: + yych = *++lexer->cursor; + if (yych == 'd') goto yy624; + goto yy50; +yy470: + yych = *++lexer->cursor; + if (yych == 'z') goto yy626; + goto yy50; +yy471: + yych = *++lexer->cursor; + if (yych == 'n') goto yy628; + goto yy50; +yy472: + yych = *++lexer->cursor; + if (yych == 'z') goto yy629; + goto yy50; +yy473: + yych = *++lexer->cursor; + if (yych == 'v') goto yy631; + goto yy50; +yy474: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= 'Z') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy475; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= 'z') { + if (yych <= '\\') { + if (yych >= '\\') goto yy49; + } else { + if (yych <= ']') goto yy475; + if (yych <= 'y') goto yy49; + goto yy632; + } + } else { + if (yych <= '|') { + if (yych >= '|') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy475: +#line 363 "src/wast-lexer.cc" + { OPCODE(I64Eq); RETURN(COMPARE); } +#line 3420 "src/prebuilt/wast-lexer-gen.cc" +yy476: + yych = *++lexer->cursor; + if (yych == 't') goto yy634; + goto yy50; +yy477: + yych = *++lexer->cursor; + if (yych == '_') goto yy635; + goto yy50; +yy478: + yych = *++lexer->cursor; + if (yych == '_') goto yy636; + goto yy50; +yy479: + yych = *++lexer->cursor; + if (yych == '_') goto yy637; + goto yy50; +yy480: + yych = *++lexer->cursor; + if (yych == 'a') goto yy638; + goto yy50; +yy481: + yych = *++lexer->cursor; + if (yych == '_') goto yy639; + goto yy50; +yy482: + yych = *++lexer->cursor; + if (yych == 'l') goto yy640; + goto yy50; +yy483: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 365 "src/wast-lexer.cc" + { OPCODE(I64Ne); RETURN(COMPARE); } +#line 3456 "src/prebuilt/wast-lexer-gen.cc" +yy485: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 335 "src/wast-lexer.cc" + { OPCODE(I64Or); RETURN(BINARY); } +#line 3464 "src/prebuilt/wast-lexer-gen.cc" +yy487: + yych = *++lexer->cursor; + if (yych == 'p') goto yy642; + goto yy50; +yy488: + yych = *++lexer->cursor; + if (yych == 'i') goto yy643; + if (yych == 'm') goto yy644; + goto yy50; +yy489: + yych = *++lexer->cursor; + if (yych == 't') goto yy645; + goto yy50; +yy490: + yych = *++lexer->cursor; + if (yych == 'l') goto yy646; + if (yych == 'r') goto yy648; + goto yy50; +yy491: + yych = *++lexer->cursor; + if (yych == 'o') goto yy649; + goto yy50; +yy492: + yych = *++lexer->cursor; + if (yych == 'b') goto yy650; + goto yy50; +yy493: + yych = *++lexer->cursor; + if (yych == 'u') goto yy652; + goto yy50; +yy494: + yych = *++lexer->cursor; + if (yych == 'r') goto yy653; + goto yy50; +yy495: + yych = *++lexer->cursor; + if (yych == 'e') goto yy655; + goto yy50; +yy496: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 436 "src/wast-lexer.cc" + { RETURN(IMPORT); } +#line 3510 "src/prebuilt/wast-lexer-gen.cc" +yy498: + yych = *++lexer->cursor; + if (yych == 't') goto yy657; + goto yy50; +yy499: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 439 "src/wast-lexer.cc" + { RETURN(INVOKE); } +#line 3522 "src/prebuilt/wast-lexer-gen.cc" +yy501: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 431 "src/wast-lexer.cc" + { RETURN(MEMORY); } +#line 3530 "src/prebuilt/wast-lexer-gen.cc" +yy503: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 429 "src/wast-lexer.cc" + { RETURN(MODULE); } +#line 3538 "src/prebuilt/wast-lexer-gen.cc" +yy505: + yych = *++lexer->cursor; + if (yych <= '@') { + if (yych <= '/') goto yy50; + if (yych <= '9') goto yy658; + goto yy50; + } else { + if (yych <= 'F') goto yy658; + if (yych <= '`') goto yy50; + if (yych <= 'f') goto yy658; + goto yy50; + } +yy506: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= '<') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy507; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych <= '=') goto yy660; + goto yy49; + } else { + if (yych == '\\') goto yy49; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy507: +#line 435 "src/wast-lexer.cc" + { RETURN(OFFSET); } +#line 3587 "src/prebuilt/wast-lexer-gen.cc" +yy508: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 452 "src/wast-lexer.cc" + { RETURN(OUTPUT); } +#line 3595 "src/prebuilt/wast-lexer-gen.cc" +yy510: + yych = *++lexer->cursor; + if (yych == 'e') goto yy661; + goto yy50; +yy511: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 426 "src/wast-lexer.cc" + { RETURN(RESULT); } +#line 3607 "src/prebuilt/wast-lexer-gen.cc" +yy513: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 261 "src/wast-lexer.cc" + { RETURN(RETURN); } +#line 3615 "src/prebuilt/wast-lexer-gen.cc" +yy515: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 419 "src/wast-lexer.cc" + { RETURN(SELECT); } +#line 3623 "src/prebuilt/wast-lexer-gen.cc" +yy517: + yych = *++lexer->cursor; + if (yych == 'o') goto yy662; + goto yy50; +yy518: + yych = *++lexer->cursor; + if (yych == 'c') goto yy663; + goto yy50; +yy519: + yych = *++lexer->cursor; + if (yych == 'c') goto yy664; + goto yy50; +yy520: + yych = *++lexer->cursor; + if (yych == 'h') goto yy665; + goto yy50; +yy521: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= ';') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy522; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= '/') { + if (yych != ',') goto yy49; + } else { + if (yych <= '9') goto yy523; + if (yych <= ':') goto yy49; + } + } + } else { + if (yych <= 'x') { + if (yych <= '\\') { + if (yych != '[') goto yy49; + } else { + if (yych <= ']') goto yy522; + if (yych <= 'w') goto yy49; + goto yy666; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy522: +#line 291 "src/wast-lexer.cc" + { TEXT_AT(6); RETURN(ALIGN_EQ_NAT); } +#line 3678 "src/prebuilt/wast-lexer-gen.cc" +yy523: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yych <= ':') { + if (yych <= ')') { + if (yych <= '!') { + if (yych <= ' ') goto yy522; + goto yy49; + } else { + if (yych <= '"') goto yy522; + if (yych <= '\'') goto yy49; + goto yy522; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + goto yy522; + } else { + if (yych <= '/') goto yy49; + if (yych <= '9') goto yy523; + goto yy49; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych <= ';') goto yy522; + goto yy49; + } else { + if (yych == '\\') goto yy49; + goto yy522; + } + } else { + if (yych <= '|') { + if (yych == '{') goto yy522; + goto yy49; + } else { + if (yych == '~') goto yy49; + goto yy522; + } + } + } +yy525: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 244 "src/wast-lexer.cc" + { RETURN(ANYFUNC); } +#line 3729 "src/prebuilt/wast-lexer-gen.cc" +yy527: + yych = *++lexer->cursor; + switch (yych) { + case 'e': goto yy667; + case 'i': goto yy668; + case 'm': goto yy669; + case 'r': goto yy670; + case 't': goto yy671; + case 'u': goto yy672; + default: goto yy50; + } +yy528: + yych = *++lexer->cursor; + if (yych == 'e') goto yy673; + goto yy50; +yy529: + yych = *++lexer->cursor; + if (yych == 'p') goto yy675; + goto yy50; +yy530: + yych = *++lexer->cursor; + if (yych == 'd') goto yy676; + goto yy50; +yy531: + yych = *++lexer->cursor; + if (yych == '_') goto yy677; + goto yy50; +yy532: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 306 "src/wast-lexer.cc" + { OPCODE(F32Abs); RETURN(UNARY); } +#line 3764 "src/prebuilt/wast-lexer-gen.cc" +yy534: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 348 "src/wast-lexer.cc" + { OPCODE(F32Add); RETURN(BINARY); } +#line 3772 "src/prebuilt/wast-lexer-gen.cc" +yy536: + yych = *++lexer->cursor; + if (yych == 'l') goto yy678; + goto yy50; +yy537: + yych = *++lexer->cursor; + if (yych == 's') goto yy680; + if (yych == 'v') goto yy681; + goto yy50; +yy538: + yych = *++lexer->cursor; + if (yych == 'y') goto yy682; + goto yy50; +yy539: + yych = *++lexer->cursor; + if (yych == 'o') goto yy683; + goto yy50; +yy540: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 354 "src/wast-lexer.cc" + { OPCODE(F32Div); RETURN(BINARY); } +#line 3797 "src/prebuilt/wast-lexer-gen.cc" +yy542: + yych = *++lexer->cursor; + if (yych == 'o') goto yy684; + goto yy50; +yy543: + yych = *++lexer->cursor; + if (yych == 'd') goto yy685; + goto yy50; +yy544: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 358 "src/wast-lexer.cc" + { OPCODE(F32Max); RETURN(BINARY); } +#line 3813 "src/prebuilt/wast-lexer-gen.cc" +yy546: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 356 "src/wast-lexer.cc" + { OPCODE(F32Min); RETURN(BINARY); } +#line 3821 "src/prebuilt/wast-lexer-gen.cc" +yy548: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 352 "src/wast-lexer.cc" + { OPCODE(F32Mul); RETURN(BINARY); } +#line 3829 "src/prebuilt/wast-lexer-gen.cc" +yy550: + yych = *++lexer->cursor; + if (yych == 'r') goto yy687; + goto yy50; +yy551: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 304 "src/wast-lexer.cc" + { OPCODE(F32Neg); RETURN(UNARY); } +#line 3841 "src/prebuilt/wast-lexer-gen.cc" +yy553: + yych = *++lexer->cursor; + if (yych == 'n') goto yy688; + goto yy50; +yy554: + yych = *++lexer->cursor; + if (yych == 't') goto yy689; + goto yy50; +yy555: + yych = *++lexer->cursor; + if (yych == 'r') goto yy691; + goto yy50; +yy556: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 350 "src/wast-lexer.cc" + { OPCODE(F32Sub); RETURN(BINARY); } +#line 3861 "src/prebuilt/wast-lexer-gen.cc" +yy558: + yych = *++lexer->cursor; + if (yych == 'n') goto yy692; + goto yy50; +yy559: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 307 "src/wast-lexer.cc" + { OPCODE(F64Abs); RETURN(UNARY); } +#line 3873 "src/prebuilt/wast-lexer-gen.cc" +yy561: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 349 "src/wast-lexer.cc" + { OPCODE(F64Add); RETURN(BINARY); } +#line 3881 "src/prebuilt/wast-lexer-gen.cc" +yy563: + yych = *++lexer->cursor; + if (yych == 'l') goto yy693; + goto yy50; +yy564: + yych = *++lexer->cursor; + if (yych == 's') goto yy695; + if (yych == 'v') goto yy696; + goto yy50; +yy565: + yych = *++lexer->cursor; + if (yych == 'y') goto yy697; + goto yy50; +yy566: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 355 "src/wast-lexer.cc" + { OPCODE(F64Div); RETURN(BINARY); } +#line 3902 "src/prebuilt/wast-lexer-gen.cc" +yy568: + yych = *++lexer->cursor; + if (yych == 'o') goto yy698; + goto yy50; +yy569: + yych = *++lexer->cursor; + if (yych == 'd') goto yy699; + goto yy50; +yy570: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 359 "src/wast-lexer.cc" + { OPCODE(F64Max); RETURN(BINARY); } +#line 3918 "src/prebuilt/wast-lexer-gen.cc" +yy572: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 357 "src/wast-lexer.cc" + { OPCODE(F64Min); RETURN(BINARY); } +#line 3926 "src/prebuilt/wast-lexer-gen.cc" +yy574: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 353 "src/wast-lexer.cc" + { OPCODE(F64Mul); RETURN(BINARY); } +#line 3934 "src/prebuilt/wast-lexer-gen.cc" +yy576: + yych = *++lexer->cursor; + if (yych == 'r') goto yy701; + goto yy50; +yy577: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 305 "src/wast-lexer.cc" + { OPCODE(F64Neg); RETURN(UNARY); } +#line 3946 "src/prebuilt/wast-lexer-gen.cc" +yy579: + yych = *++lexer->cursor; + if (yych == 'm') goto yy702; + goto yy50; +yy580: + yych = *++lexer->cursor; + if (yych == 'n') goto yy703; + goto yy50; +yy581: + yych = *++lexer->cursor; + if (yych == 't') goto yy704; + goto yy50; +yy582: + yych = *++lexer->cursor; + if (yych == 'r') goto yy706; + goto yy50; +yy583: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 351 "src/wast-lexer.cc" + { OPCODE(F64Sub); RETURN(BINARY); } +#line 3970 "src/prebuilt/wast-lexer-gen.cc" +yy585: + yych = *++lexer->cursor; + if (yych == 'n') goto yy707; + goto yy50; +yy586: + yych = *++lexer->cursor; + if (yych == 'b') goto yy708; + goto yy50; +yy587: + yych = *++lexer->cursor; + if (yych == 'a') goto yy709; + goto yy50; +yy588: + yych = *++lexer->cursor; + if (yych == 'm') goto yy710; + goto yy50; +yy589: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 318 "src/wast-lexer.cc" + { OPCODE(I32Add); RETURN(BINARY); } +#line 3994 "src/prebuilt/wast-lexer-gen.cc" +yy591: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 332 "src/wast-lexer.cc" + { OPCODE(I32And); RETURN(BINARY); } +#line 4002 "src/prebuilt/wast-lexer-gen.cc" +yy593: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 298 "src/wast-lexer.cc" + { OPCODE(I32Clz); RETURN(UNARY); } +#line 4010 "src/prebuilt/wast-lexer-gen.cc" +yy595: + yych = *++lexer->cursor; + if (yych == 's') goto yy711; + goto yy50; +yy596: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 300 "src/wast-lexer.cc" + { OPCODE(I32Ctz); RETURN(UNARY); } +#line 4022 "src/prebuilt/wast-lexer-gen.cc" +yy598: + yych = *++lexer->cursor; + if (yych == '_') goto yy712; + goto yy50; +yy599: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 296 "src/wast-lexer.cc" + { OPCODE(I32Eqz); RETURN(CONVERT); } +#line 4034 "src/prebuilt/wast-lexer-gen.cc" +yy601: + yych = *++lexer->cursor; + if (yych == 's') goto yy713; + if (yych == 'u') goto yy715; + goto yy50; +yy602: + yych = *++lexer->cursor; + if (yych == 's') goto yy717; + if (yych == 'u') goto yy719; + goto yy50; +yy603: + yych = *++lexer->cursor; + if (yych == 's') goto yy721; + if (yych == 'u') goto yy723; + goto yy50; +yy604: + yych = *++lexer->cursor; + if (yych == 'd') goto yy725; + goto yy50; +yy605: + yych = *++lexer->cursor; + if (yych == 's') goto yy727; + if (yych == 'u') goto yy729; + goto yy50; +yy606: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 322 "src/wast-lexer.cc" + { OPCODE(I32Mul); RETURN(BINARY); } +#line 4066 "src/prebuilt/wast-lexer-gen.cc" +yy608: + yych = *++lexer->cursor; + if (yych == 'c') goto yy731; + goto yy50; +yy609: + yych = *++lexer->cursor; + if (yych == 'n') goto yy732; + goto yy50; +yy610: + yych = *++lexer->cursor; + if (yych == '_') goto yy733; + goto yy50; +yy611: + yych = *++lexer->cursor; + if (yych == 'l') goto yy734; + if (yych == 'r') goto yy736; + goto yy50; +yy612: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 338 "src/wast-lexer.cc" + { OPCODE(I32Shl); RETURN(BINARY); } +#line 4091 "src/prebuilt/wast-lexer-gen.cc" +yy614: + yych = *++lexer->cursor; + if (yych == '_') goto yy738; + goto yy50; +yy615: + yych = *++lexer->cursor; + if (yych == 'r') goto yy739; + goto yy50; +yy616: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 320 "src/wast-lexer.cc" + { OPCODE(I32Sub); RETURN(BINARY); } +#line 4107 "src/prebuilt/wast-lexer-gen.cc" +yy618: + yych = *++lexer->cursor; + if (yych == 'n') goto yy740; + goto yy50; +yy619: + yych = *++lexer->cursor; + if (yych == 'p') goto yy741; + goto yy50; +yy620: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 336 "src/wast-lexer.cc" + { OPCODE(I32Xor); RETURN(BINARY); } +#line 4123 "src/prebuilt/wast-lexer-gen.cc" +yy622: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 319 "src/wast-lexer.cc" + { OPCODE(I64Add); RETURN(BINARY); } +#line 4131 "src/prebuilt/wast-lexer-gen.cc" +yy624: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 333 "src/wast-lexer.cc" + { OPCODE(I64And); RETURN(BINARY); } +#line 4139 "src/prebuilt/wast-lexer-gen.cc" +yy626: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 299 "src/wast-lexer.cc" + { OPCODE(I64Clz); RETURN(UNARY); } +#line 4147 "src/prebuilt/wast-lexer-gen.cc" +yy628: + yych = *++lexer->cursor; + if (yych == 's') goto yy742; + goto yy50; +yy629: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 301 "src/wast-lexer.cc" + { OPCODE(I64Ctz); RETURN(UNARY); } +#line 4159 "src/prebuilt/wast-lexer-gen.cc" +yy631: + yych = *++lexer->cursor; + if (yych == '_') goto yy743; + goto yy50; +yy632: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 297 "src/wast-lexer.cc" + { OPCODE(I64Eqz); RETURN(CONVERT); } +#line 4171 "src/prebuilt/wast-lexer-gen.cc" +yy634: + yych = *++lexer->cursor; + if (yych == 'e') goto yy744; + goto yy50; +yy635: + yych = *++lexer->cursor; + if (yych == 's') goto yy745; + if (yych == 'u') goto yy747; + goto yy50; +yy636: + yych = *++lexer->cursor; + if (yych == 's') goto yy749; + if (yych == 'u') goto yy751; + goto yy50; +yy637: + yych = *++lexer->cursor; + if (yych == 's') goto yy753; + if (yych == 'u') goto yy755; + goto yy50; +yy638: + yych = *++lexer->cursor; + if (yych == 'd') goto yy757; + goto yy50; +yy639: + yych = *++lexer->cursor; + if (yych == 's') goto yy759; + if (yych == 'u') goto yy761; + goto yy50; +yy640: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 323 "src/wast-lexer.cc" + { OPCODE(I64Mul); RETURN(BINARY); } +#line 4207 "src/prebuilt/wast-lexer-gen.cc" +yy642: + yych = *++lexer->cursor; + if (yych == 'c') goto yy763; + goto yy50; +yy643: + yych = *++lexer->cursor; + if (yych == 'n') goto yy764; + goto yy50; +yy644: + yych = *++lexer->cursor; + if (yych == '_') goto yy765; + goto yy50; +yy645: + yych = *++lexer->cursor; + if (yych == 'l') goto yy766; + if (yych == 'r') goto yy768; + goto yy50; +yy646: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 339 "src/wast-lexer.cc" + { OPCODE(I64Shl); RETURN(BINARY); } +#line 4232 "src/prebuilt/wast-lexer-gen.cc" +yy648: + yych = *++lexer->cursor; + if (yych == '_') goto yy770; + goto yy50; +yy649: + yych = *++lexer->cursor; + if (yych == 'r') goto yy771; + goto yy50; +yy650: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 321 "src/wast-lexer.cc" + { OPCODE(I64Sub); RETURN(BINARY); } +#line 4248 "src/prebuilt/wast-lexer-gen.cc" +yy652: + yych = *++lexer->cursor; + if (yych == 'n') goto yy772; + goto yy50; +yy653: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 337 "src/wast-lexer.cc" + { OPCODE(I64Xor); RETURN(BINARY); } +#line 4260 "src/prebuilt/wast-lexer-gen.cc" +yy655: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 249 "src/wast-lexer.cc" + { RETURN(IF); } +#line 4268 "src/prebuilt/wast-lexer-gen.cc" +yy657: + yych = *++lexer->cursor; + if (yych == 'y') goto yy773; + goto yy50; +yy658: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yych <= '@') { + if (yych <= '+') { + if (yych <= '"') { + if (yych == '!') goto yy49; + goto yy196; + } else { + if (yych <= '\'') goto yy49; + if (yych <= ')') goto yy196; + goto yy49; + } + } else { + if (yych <= '9') { + if (yych <= ',') goto yy196; + if (yych <= '/') goto yy49; + goto yy658; + } else { + if (yych == ';') goto yy196; + goto yy49; + } + } + } else { + if (yych <= '`') { + if (yych <= '[') { + if (yych <= 'F') goto yy658; + if (yych <= 'Z') goto yy49; + goto yy196; + } else { + if (yych == ']') goto yy196; + goto yy49; + } + } else { + if (yych <= '{') { + if (yych <= 'f') goto yy658; + if (yych <= 'z') goto yy49; + goto yy196; + } else { + if (yych == '}') goto yy196; + if (yych <= '~') goto yy49; + goto yy196; + } + } + } +yy660: + yych = *++lexer->cursor; + if (yych <= '/') goto yy50; + if (yych <= '0') goto yy774; + if (yych <= '9') goto yy776; + goto yy50; +yy661: + yych = *++lexer->cursor; + if (yych == 'r') goto yy778; + goto yy50; +yy662: + yych = *++lexer->cursor; + if (yych == 'b') goto yy780; + goto yy50; +yy663: + yych = *++lexer->cursor; + if (yych == 'a') goto yy781; + goto yy50; +yy664: + yych = *++lexer->cursor; + if (yych == 'a') goto yy782; + goto yy50; +yy665: + yych = *++lexer->cursor; + if (yych == 'a') goto yy783; + goto yy50; +yy666: + yych = *++lexer->cursor; + if (yych <= '@') { + if (yych <= '/') goto yy50; + if (yych <= '9') goto yy784; + goto yy50; + } else { + if (yych <= 'F') goto yy784; + if (yych <= '`') goto yy50; + if (yych <= 'f') goto yy784; + goto yy50; + } +yy667: + yych = *++lexer->cursor; + if (yych == 'x') goto yy786; + goto yy50; +yy668: + yych = *++lexer->cursor; + if (yych == 'n') goto yy787; + goto yy50; +yy669: + yych = *++lexer->cursor; + if (yych == 'a') goto yy788; + goto yy50; +yy670: + yych = *++lexer->cursor; + if (yych == 'e') goto yy789; + goto yy50; +yy671: + yych = *++lexer->cursor; + if (yych == 'r') goto yy790; + goto yy50; +yy672: + yych = *++lexer->cursor; + if (yych == 'n') goto yy791; + goto yy50; +yy673: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 255 "src/wast-lexer.cc" + { RETURN(BR_TABLE); } +#line 4388 "src/prebuilt/wast-lexer-gen.cc" +yy675: + yych = *++lexer->cursor; + if (yych == 'o') goto yy792; + goto yy50; +yy676: + yych = *++lexer->cursor; + if (yych == 'i') goto yy793; + goto yy50; +yy677: + yych = *++lexer->cursor; + if (yych == 'm') goto yy794; + goto yy50; +yy678: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 310 "src/wast-lexer.cc" + { OPCODE(F32Ceil); RETURN(UNARY); } +#line 4408 "src/prebuilt/wast-lexer-gen.cc" +yy680: + yych = *++lexer->cursor; + if (yych == 't') goto yy795; + goto yy50; +yy681: + yych = *++lexer->cursor; + if (yych == 'e') goto yy797; + goto yy50; +yy682: + yych = *++lexer->cursor; + if (yych == 's') goto yy798; + goto yy50; +yy683: + yych = *++lexer->cursor; + if (yych == 't') goto yy799; + goto yy50; +yy684: + yych = *++lexer->cursor; + if (yych == 'r') goto yy800; + goto yy50; +yy685: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 269 "src/wast-lexer.cc" + { OPCODE(F32Load); RETURN(LOAD); } +#line 4436 "src/prebuilt/wast-lexer-gen.cc" +yy687: + yych = *++lexer->cursor; + if (yych == 'e') goto yy802; + goto yy50; +yy688: + yych = *++lexer->cursor; + if (yych == 't') goto yy803; + goto yy50; +yy689: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 308 "src/wast-lexer.cc" + { OPCODE(F32Sqrt); RETURN(UNARY); } +#line 4452 "src/prebuilt/wast-lexer-gen.cc" +yy691: + yych = *++lexer->cursor; + if (yych == 'e') goto yy804; + goto yy50; +yy692: + yych = *++lexer->cursor; + if (yych == 'c') goto yy806; + goto yy50; +yy693: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 311 "src/wast-lexer.cc" + { OPCODE(F64Ceil); RETURN(UNARY); } +#line 4468 "src/prebuilt/wast-lexer-gen.cc" +yy695: + yych = *++lexer->cursor; + if (yych == 't') goto yy808; + goto yy50; +yy696: + yych = *++lexer->cursor; + if (yych == 'e') goto yy810; + goto yy50; +yy697: + yych = *++lexer->cursor; + if (yych == 's') goto yy811; + goto yy50; +yy698: + yych = *++lexer->cursor; + if (yych == 'r') goto yy812; + goto yy50; +yy699: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 270 "src/wast-lexer.cc" + { OPCODE(F64Load); RETURN(LOAD); } +#line 4492 "src/prebuilt/wast-lexer-gen.cc" +yy701: + yych = *++lexer->cursor; + if (yych == 'e') goto yy814; + goto yy50; +yy702: + yych = *++lexer->cursor; + if (yych == 'o') goto yy815; + goto yy50; +yy703: + yych = *++lexer->cursor; + if (yych == 't') goto yy816; + goto yy50; +yy704: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 309 "src/wast-lexer.cc" + { OPCODE(F64Sqrt); RETURN(UNARY); } +#line 4512 "src/prebuilt/wast-lexer-gen.cc" +yy706: + yych = *++lexer->cursor; + if (yych == 'e') goto yy817; + goto yy50; +yy707: + yych = *++lexer->cursor; + if (yych == 'c') goto yy819; + goto yy50; +yy708: + yych = *++lexer->cursor; + if (yych == 'a') goto yy821; + goto yy50; +yy709: + yych = *++lexer->cursor; + if (yych == 'l') goto yy822; + goto yy50; +yy710: + yych = *++lexer->cursor; + if (yych == 'o') goto yy824; + goto yy50; +yy711: + yych = *++lexer->cursor; + if (yych == 't') goto yy825; + goto yy50; +yy712: + yych = *++lexer->cursor; + if (yych == 's') goto yy827; + if (yych == 'u') goto yy829; + goto yy50; +yy713: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 378 "src/wast-lexer.cc" + { OPCODE(I32GeS); RETURN(COMPARE); } +#line 4549 "src/prebuilt/wast-lexer-gen.cc" +yy715: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 380 "src/wast-lexer.cc" + { OPCODE(I32GeU); RETURN(COMPARE); } +#line 4557 "src/prebuilt/wast-lexer-gen.cc" +yy717: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 374 "src/wast-lexer.cc" + { OPCODE(I32GtS); RETURN(COMPARE); } +#line 4565 "src/prebuilt/wast-lexer-gen.cc" +yy719: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 376 "src/wast-lexer.cc" + { OPCODE(I32GtU); RETURN(COMPARE); } +#line 4573 "src/prebuilt/wast-lexer-gen.cc" +yy721: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 370 "src/wast-lexer.cc" + { OPCODE(I32LeS); RETURN(COMPARE); } +#line 4581 "src/prebuilt/wast-lexer-gen.cc" +yy723: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 372 "src/wast-lexer.cc" + { OPCODE(I32LeU); RETURN(COMPARE); } +#line 4589 "src/prebuilt/wast-lexer-gen.cc" +yy725: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= '8') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy726; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= '0') { + if (yych != ',') goto yy49; + } else { + if (yych <= '1') goto yy831; + if (yych <= '7') goto yy49; + goto yy832; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych != ';') goto yy49; + } else { + if (yych == '\\') goto yy49; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy726: +#line 267 "src/wast-lexer.cc" + { OPCODE(I32Load); RETURN(LOAD); } +#line 4627 "src/prebuilt/wast-lexer-gen.cc" +yy727: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 366 "src/wast-lexer.cc" + { OPCODE(I32LtS); RETURN(COMPARE); } +#line 4635 "src/prebuilt/wast-lexer-gen.cc" +yy729: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 368 "src/wast-lexer.cc" + { OPCODE(I32LtU); RETURN(COMPARE); } +#line 4643 "src/prebuilt/wast-lexer-gen.cc" +yy731: + yych = *++lexer->cursor; + if (yych == 'n') goto yy833; + goto yy50; +yy732: + yych = *++lexer->cursor; + if (yych == 't') goto yy834; + goto yy50; +yy733: + yych = *++lexer->cursor; + if (yych == 's') goto yy835; + if (yych == 'u') goto yy837; + goto yy50; +yy734: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 344 "src/wast-lexer.cc" + { OPCODE(I32Rotl); RETURN(BINARY); } +#line 4664 "src/prebuilt/wast-lexer-gen.cc" +yy736: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 346 "src/wast-lexer.cc" + { OPCODE(I32Rotr); RETURN(BINARY); } +#line 4672 "src/prebuilt/wast-lexer-gen.cc" +yy738: + yych = *++lexer->cursor; + if (yych == 's') goto yy839; + if (yych == 'u') goto yy841; + goto yy50; +yy739: + yych = *++lexer->cursor; + if (yych == 'e') goto yy843; + goto yy50; +yy740: + yych = *++lexer->cursor; + if (yych == 'c') goto yy845; + goto yy50; +yy741: + yych = *++lexer->cursor; + if (yych == '/') goto yy846; + goto yy50; +yy742: + yych = *++lexer->cursor; + if (yych == 't') goto yy847; + goto yy50; +yy743: + yych = *++lexer->cursor; + if (yych == 's') goto yy849; + if (yych == 'u') goto yy851; + goto yy50; +yy744: + yych = *++lexer->cursor; + if (yych == 'n') goto yy853; + goto yy50; +yy745: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 379 "src/wast-lexer.cc" + { OPCODE(I64GeS); RETURN(COMPARE); } +#line 4710 "src/prebuilt/wast-lexer-gen.cc" +yy747: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 381 "src/wast-lexer.cc" + { OPCODE(I64GeU); RETURN(COMPARE); } +#line 4718 "src/prebuilt/wast-lexer-gen.cc" +yy749: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 375 "src/wast-lexer.cc" + { OPCODE(I64GtS); RETURN(COMPARE); } +#line 4726 "src/prebuilt/wast-lexer-gen.cc" +yy751: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 377 "src/wast-lexer.cc" + { OPCODE(I64GtU); RETURN(COMPARE); } +#line 4734 "src/prebuilt/wast-lexer-gen.cc" +yy753: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 371 "src/wast-lexer.cc" + { OPCODE(I64LeS); RETURN(COMPARE); } +#line 4742 "src/prebuilt/wast-lexer-gen.cc" +yy755: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 373 "src/wast-lexer.cc" + { OPCODE(I64LeU); RETURN(COMPARE); } +#line 4750 "src/prebuilt/wast-lexer-gen.cc" +yy757: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= '7') { + if (yych <= '+') { + if (yych <= '"') { + if (yych == '!') goto yy49; + } else { + if (yych <= '\'') goto yy49; + if (yych >= '*') goto yy49; + } + } else { + if (yych <= '1') { + if (yych <= ',') goto yy758; + if (yych <= '0') goto yy49; + goto yy854; + } else { + if (yych == '3') goto yy855; + goto yy49; + } + } + } else { + if (yych <= '\\') { + if (yych <= ';') { + if (yych <= '8') goto yy856; + if (yych <= ':') goto yy49; + } else { + if (yych != '[') goto yy49; + } + } else { + if (yych <= '{') { + if (yych <= ']') goto yy758; + if (yych <= 'z') goto yy49; + } else { + if (yych == '}') goto yy758; + if (yych <= '~') goto yy49; + } + } + } +yy758: +#line 268 "src/wast-lexer.cc" + { OPCODE(I64Load); RETURN(LOAD); } +#line 4792 "src/prebuilt/wast-lexer-gen.cc" +yy759: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 367 "src/wast-lexer.cc" + { OPCODE(I64LtS); RETURN(COMPARE); } +#line 4800 "src/prebuilt/wast-lexer-gen.cc" +yy761: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 369 "src/wast-lexer.cc" + { OPCODE(I64LtU); RETURN(COMPARE); } +#line 4808 "src/prebuilt/wast-lexer-gen.cc" +yy763: + yych = *++lexer->cursor; + if (yych == 'n') goto yy857; + goto yy50; +yy764: + yych = *++lexer->cursor; + if (yych == 't') goto yy858; + goto yy50; +yy765: + yych = *++lexer->cursor; + if (yych == 's') goto yy859; + if (yych == 'u') goto yy861; + goto yy50; +yy766: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 345 "src/wast-lexer.cc" + { OPCODE(I64Rotl); RETURN(BINARY); } +#line 4829 "src/prebuilt/wast-lexer-gen.cc" +yy768: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 347 "src/wast-lexer.cc" + { OPCODE(I64Rotr); RETURN(BINARY); } +#line 4837 "src/prebuilt/wast-lexer-gen.cc" +yy770: + yych = *++lexer->cursor; + if (yych == 's') goto yy863; + if (yych == 'u') goto yy865; + goto yy50; +yy771: + yych = *++lexer->cursor; + if (yych == 'e') goto yy867; + goto yy50; +yy772: + yych = *++lexer->cursor; + if (yych == 'c') goto yy869; + goto yy50; +yy773: + yych = *++lexer->cursor; + if (yybm[0+yych] & 16) { + goto yy49; + } + goto yy186; +yy774: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= ';') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy775; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= '/') { + if (yych != ',') goto yy49; + } else { + if (yych <= '9') goto yy776; + if (yych <= ':') goto yy49; + } + } + } else { + if (yych <= 'x') { + if (yych <= '\\') { + if (yych != '[') goto yy49; + } else { + if (yych <= ']') goto yy775; + if (yych <= 'w') goto yy49; + goto yy870; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy775: +#line 290 "src/wast-lexer.cc" + { TEXT_AT(7); RETURN(OFFSET_EQ_NAT); } +#line 4895 "src/prebuilt/wast-lexer-gen.cc" +yy776: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yych <= ':') { + if (yych <= ')') { + if (yych <= '!') { + if (yych <= ' ') goto yy775; + goto yy49; + } else { + if (yych <= '"') goto yy775; + if (yych <= '\'') goto yy49; + goto yy775; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + goto yy775; + } else { + if (yych <= '/') goto yy49; + if (yych <= '9') goto yy776; + goto yy49; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych <= ';') goto yy775; + goto yy49; + } else { + if (yych == '\\') goto yy49; + goto yy775; + } + } else { + if (yych <= '|') { + if (yych == '{') goto yy775; + goto yy49; + } else { + if (yych == '~') goto yy49; + goto yy775; + } + } + } +yy778: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 438 "src/wast-lexer.cc" + { RETURN(REGISTER); } +#line 4946 "src/prebuilt/wast-lexer-gen.cc" +yy780: + yych = *++lexer->cursor; + if (yych == 'a') goto yy871; + goto yy50; +yy781: + yych = *++lexer->cursor; + if (yych == 'l') goto yy872; + goto yy50; +yy782: + yych = *++lexer->cursor; + if (yych == 'l') goto yy874; + goto yy50; +yy783: + yych = *++lexer->cursor; + if (yych == 'b') goto yy876; + goto yy50; +yy784: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yych <= '@') { + if (yych <= '+') { + if (yych <= '"') { + if (yych == '!') goto yy49; + goto yy522; + } else { + if (yych <= '\'') goto yy49; + if (yych <= ')') goto yy522; + goto yy49; + } + } else { + if (yych <= '9') { + if (yych <= ',') goto yy522; + if (yych <= '/') goto yy49; + goto yy784; + } else { + if (yych == ';') goto yy522; + goto yy49; + } + } + } else { + if (yych <= '`') { + if (yych <= '[') { + if (yych <= 'F') goto yy784; + if (yych <= 'Z') goto yy49; + goto yy522; + } else { + if (yych == ']') goto yy522; + goto yy49; + } + } else { + if (yych <= '{') { + if (yych <= 'f') goto yy784; + if (yych <= 'z') goto yy49; + goto yy522; + } else { + if (yych == '}') goto yy522; + if (yych <= '~') goto yy49; + goto yy522; + } + } + } +yy786: + yych = *++lexer->cursor; + if (yych == 'h') goto yy877; + goto yy50; +yy787: + yych = *++lexer->cursor; + if (yych == 'v') goto yy878; + goto yy50; +yy788: + yych = *++lexer->cursor; + if (yych == 'l') goto yy879; + goto yy50; +yy789: + yych = *++lexer->cursor; + if (yych == 't') goto yy880; + goto yy50; +yy790: + yych = *++lexer->cursor; + if (yych == 'a') goto yy881; + goto yy50; +yy791: + yych = *++lexer->cursor; + if (yych == 'l') goto yy882; + goto yy50; +yy792: + yych = *++lexer->cursor; + if (yych == 'r') goto yy883; + goto yy50; +yy793: + yych = *++lexer->cursor; + if (yych == 'r') goto yy884; + goto yy50; +yy794: + yych = *++lexer->cursor; + if (yych == 'e') goto yy885; + goto yy50; +yy795: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 294 "src/wast-lexer.cc" + { TYPE(F32); RETURN(CONST); } +#line 5052 "src/prebuilt/wast-lexer-gen.cc" +yy797: + yych = *++lexer->cursor; + if (yych == 'r') goto yy886; + goto yy50; +yy798: + yych = *++lexer->cursor; + if (yych == 'i') goto yy887; + goto yy50; +yy799: + yych = *++lexer->cursor; + if (yych == 'e') goto yy888; + goto yy50; +yy800: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 312 "src/wast-lexer.cc" + { OPCODE(F32Floor); RETURN(UNARY); } +#line 5072 "src/prebuilt/wast-lexer-gen.cc" +yy802: + yych = *++lexer->cursor; + if (yych == 's') goto yy889; + goto yy50; +yy803: + yych = *++lexer->cursor; + if (yych == 'e') goto yy890; + goto yy50; +yy804: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 273 "src/wast-lexer.cc" + { OPCODE(F32Store); RETURN(STORE); } +#line 5088 "src/prebuilt/wast-lexer-gen.cc" +yy806: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 314 "src/wast-lexer.cc" + { OPCODE(F32Trunc); RETURN(UNARY); } +#line 5096 "src/prebuilt/wast-lexer-gen.cc" +yy808: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 295 "src/wast-lexer.cc" + { TYPE(F64); RETURN(CONST); } +#line 5104 "src/prebuilt/wast-lexer-gen.cc" +yy810: + yych = *++lexer->cursor; + if (yych == 'r') goto yy891; + goto yy50; +yy811: + yych = *++lexer->cursor; + if (yych == 'i') goto yy892; + goto yy50; +yy812: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 313 "src/wast-lexer.cc" + { OPCODE(F64Floor); RETURN(UNARY); } +#line 5120 "src/prebuilt/wast-lexer-gen.cc" +yy814: + yych = *++lexer->cursor; + if (yych == 's') goto yy893; + goto yy50; +yy815: + yych = *++lexer->cursor; + if (yych == 't') goto yy894; + goto yy50; +yy816: + yych = *++lexer->cursor; + if (yych == 'e') goto yy895; + goto yy50; +yy817: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 274 "src/wast-lexer.cc" + { OPCODE(F64Store); RETURN(STORE); } +#line 5140 "src/prebuilt/wast-lexer-gen.cc" +yy819: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 315 "src/wast-lexer.cc" + { OPCODE(F64Trunc); RETURN(UNARY); } +#line 5148 "src/prebuilt/wast-lexer-gen.cc" +yy821: + yych = *++lexer->cursor; + if (yych == 'l') goto yy896; + goto yy50; +yy822: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 262 "src/wast-lexer.cc" + { RETURN(GET_LOCAL); } +#line 5160 "src/prebuilt/wast-lexer-gen.cc" +yy824: + yych = *++lexer->cursor; + if (yych == 'r') goto yy898; + goto yy50; +yy825: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 292 "src/wast-lexer.cc" + { TYPE(I32); RETURN(CONST); } +#line 5172 "src/prebuilt/wast-lexer-gen.cc" +yy827: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 324 "src/wast-lexer.cc" + { OPCODE(I32DivS); RETURN(BINARY); } +#line 5180 "src/prebuilt/wast-lexer-gen.cc" +yy829: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 326 "src/wast-lexer.cc" + { OPCODE(I32DivU); RETURN(BINARY); } +#line 5188 "src/prebuilt/wast-lexer-gen.cc" +yy831: + yych = *++lexer->cursor; + if (yych == '6') goto yy899; + goto yy50; +yy832: + yych = *++lexer->cursor; + if (yych == '_') goto yy900; + goto yy50; +yy833: + yych = *++lexer->cursor; + if (yych == 't') goto yy901; + goto yy50; +yy834: + yych = *++lexer->cursor; + if (yych == 'e') goto yy903; + goto yy50; +yy835: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 328 "src/wast-lexer.cc" + { OPCODE(I32RemS); RETURN(BINARY); } +#line 5212 "src/prebuilt/wast-lexer-gen.cc" +yy837: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 330 "src/wast-lexer.cc" + { OPCODE(I32RemU); RETURN(BINARY); } +#line 5220 "src/prebuilt/wast-lexer-gen.cc" +yy839: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 340 "src/wast-lexer.cc" + { OPCODE(I32ShrS); RETURN(BINARY); } +#line 5228 "src/prebuilt/wast-lexer-gen.cc" +yy841: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 342 "src/wast-lexer.cc" + { OPCODE(I32ShrU); RETURN(BINARY); } +#line 5236 "src/prebuilt/wast-lexer-gen.cc" +yy843: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= '8') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy844; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= '0') { + if (yych != ',') goto yy49; + } else { + if (yych <= '1') goto yy904; + if (yych <= '7') goto yy49; + goto yy905; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych != ';') goto yy49; + } else { + if (yych == '\\') goto yy49; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy844: +#line 271 "src/wast-lexer.cc" + { OPCODE(I32Store); RETURN(STORE); } +#line 5274 "src/prebuilt/wast-lexer-gen.cc" +yy845: + yych = *++lexer->cursor; + if (yych == '_') goto yy907; + goto yy50; +yy846: + yych = *++lexer->cursor; + if (yych == 'i') goto yy908; + goto yy50; +yy847: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 293 "src/wast-lexer.cc" + { TYPE(I64); RETURN(CONST); } +#line 5290 "src/prebuilt/wast-lexer-gen.cc" +yy849: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 325 "src/wast-lexer.cc" + { OPCODE(I64DivS); RETURN(BINARY); } +#line 5298 "src/prebuilt/wast-lexer-gen.cc" +yy851: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 327 "src/wast-lexer.cc" + { OPCODE(I64DivU); RETURN(BINARY); } +#line 5306 "src/prebuilt/wast-lexer-gen.cc" +yy853: + yych = *++lexer->cursor; + if (yych == 'd') goto yy909; + goto yy50; +yy854: + yych = *++lexer->cursor; + if (yych == '6') goto yy910; + goto yy50; +yy855: + yych = *++lexer->cursor; + if (yych == '2') goto yy911; + goto yy50; +yy856: + yych = *++lexer->cursor; + if (yych == '_') goto yy912; + goto yy50; +yy857: + yych = *++lexer->cursor; + if (yych == 't') goto yy913; + goto yy50; +yy858: + yych = *++lexer->cursor; + if (yych == 'e') goto yy915; + goto yy50; +yy859: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 329 "src/wast-lexer.cc" + { OPCODE(I64RemS); RETURN(BINARY); } +#line 5338 "src/prebuilt/wast-lexer-gen.cc" +yy861: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 331 "src/wast-lexer.cc" + { OPCODE(I64RemU); RETURN(BINARY); } +#line 5346 "src/prebuilt/wast-lexer-gen.cc" +yy863: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 341 "src/wast-lexer.cc" + { OPCODE(I64ShrS); RETURN(BINARY); } +#line 5354 "src/prebuilt/wast-lexer-gen.cc" +yy865: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 343 "src/wast-lexer.cc" + { OPCODE(I64ShrU); RETURN(BINARY); } +#line 5362 "src/prebuilt/wast-lexer-gen.cc" +yy867: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= '7') { + if (yych <= '+') { + if (yych <= '"') { + if (yych == '!') goto yy49; + } else { + if (yych <= '\'') goto yy49; + if (yych >= '*') goto yy49; + } + } else { + if (yych <= '1') { + if (yych <= ',') goto yy868; + if (yych <= '0') goto yy49; + goto yy916; + } else { + if (yych == '3') goto yy917; + goto yy49; + } + } + } else { + if (yych <= '\\') { + if (yych <= ';') { + if (yych <= '8') goto yy918; + if (yych <= ':') goto yy49; + } else { + if (yych != '[') goto yy49; + } + } else { + if (yych <= '{') { + if (yych <= ']') goto yy868; + if (yych <= 'z') goto yy49; + } else { + if (yych == '}') goto yy868; + if (yych <= '~') goto yy49; + } + } + } +yy868: +#line 272 "src/wast-lexer.cc" + { OPCODE(I64Store); RETURN(STORE); } +#line 5404 "src/prebuilt/wast-lexer-gen.cc" +yy869: + yych = *++lexer->cursor; + if (yych == '_') goto yy920; + goto yy50; +yy870: + yych = *++lexer->cursor; + if (yych <= '@') { + if (yych <= '/') goto yy50; + if (yych <= '9') goto yy921; + goto yy50; + } else { + if (yych <= 'F') goto yy921; + if (yych <= '`') goto yy50; + if (yych <= 'f') goto yy921; + goto yy50; + } +yy871: + yych = *++lexer->cursor; + if (yych == 'l') goto yy923; + goto yy50; +yy872: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 263 "src/wast-lexer.cc" + { RETURN(SET_LOCAL); } +#line 5432 "src/prebuilt/wast-lexer-gen.cc" +yy874: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 264 "src/wast-lexer.cc" + { RETURN(TEE_LOCAL); } +#line 5440 "src/prebuilt/wast-lexer-gen.cc" +yy876: + yych = *++lexer->cursor; + if (yych == 'l') goto yy925; + goto yy50; +yy877: + yych = *++lexer->cursor; + if (yych == 'a') goto yy926; + goto yy50; +yy878: + yych = *++lexer->cursor; + if (yych == 'a') goto yy927; + goto yy50; +yy879: + yych = *++lexer->cursor; + if (yych == 'f') goto yy928; + goto yy50; +yy880: + yych = *++lexer->cursor; + if (yych == 'u') goto yy929; + goto yy50; +yy881: + yych = *++lexer->cursor; + if (yych == 'p') goto yy930; + goto yy50; +yy882: + yych = *++lexer->cursor; + if (yych == 'i') goto yy932; + goto yy50; +yy883: + yych = *++lexer->cursor; + if (yych == 't') goto yy933; + goto yy50; +yy884: + yych = *++lexer->cursor; + if (yych == 'e') goto yy935; + goto yy50; +yy885: + yych = *++lexer->cursor; + if (yych == 'm') goto yy936; + goto yy50; +yy886: + yych = *++lexer->cursor; + if (yych == 't') goto yy937; + goto yy50; +yy887: + yych = *++lexer->cursor; + if (yych == 'g') goto yy938; + goto yy50; +yy888: + yych = *++lexer->cursor; + if (yych == '/') goto yy939; + goto yy50; +yy889: + yych = *++lexer->cursor; + if (yych == 't') goto yy940; + goto yy50; +yy890: + yych = *++lexer->cursor; + if (yych == 'r') goto yy942; + goto yy50; +yy891: + yych = *++lexer->cursor; + if (yych == 't') goto yy943; + goto yy50; +yy892: + yych = *++lexer->cursor; + if (yych == 'g') goto yy944; + goto yy50; +yy893: + yych = *++lexer->cursor; + if (yych == 't') goto yy945; + goto yy50; +yy894: + yych = *++lexer->cursor; + if (yych == 'e') goto yy947; + goto yy50; +yy895: + yych = *++lexer->cursor; + if (yych == 'r') goto yy948; + goto yy50; +yy896: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 265 "src/wast-lexer.cc" + { RETURN(GET_GLOBAL); } +#line 5528 "src/prebuilt/wast-lexer-gen.cc" +yy898: + yych = *++lexer->cursor; + if (yych == 'y') goto yy949; + goto yy50; +yy899: + yych = *++lexer->cursor; + if (yych == '_') goto yy951; + goto yy50; +yy900: + yych = *++lexer->cursor; + if (yych == 's') goto yy952; + if (yych == 'u') goto yy954; + goto yy50; +yy901: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 302 "src/wast-lexer.cc" + { OPCODE(I32Popcnt); RETURN(UNARY); } +#line 5549 "src/prebuilt/wast-lexer-gen.cc" +yy903: + yych = *++lexer->cursor; + if (yych == 'r') goto yy956; + goto yy50; +yy904: + yych = *++lexer->cursor; + if (yych == '6') goto yy957; + goto yy50; +yy905: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 285 "src/wast-lexer.cc" + { OPCODE(I32Store8); RETURN(STORE); } +#line 5565 "src/prebuilt/wast-lexer-gen.cc" +yy907: + yych = *++lexer->cursor; + if (yych == 's') goto yy959; + if (yych == 'u') goto yy960; + goto yy50; +yy908: + yych = *++lexer->cursor; + if (yych == '6') goto yy961; + goto yy50; +yy909: + yych = *++lexer->cursor; + if (yych == '_') goto yy962; + goto yy50; +yy910: + yych = *++lexer->cursor; + if (yych == '_') goto yy963; + goto yy50; +yy911: + yych = *++lexer->cursor; + if (yych == '_') goto yy964; + goto yy50; +yy912: + yych = *++lexer->cursor; + if (yych == 's') goto yy965; + if (yych == 'u') goto yy967; + goto yy50; +yy913: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 303 "src/wast-lexer.cc" + { OPCODE(I64Popcnt); RETURN(UNARY); } +#line 5599 "src/prebuilt/wast-lexer-gen.cc" +yy915: + yych = *++lexer->cursor; + if (yych == 'r') goto yy969; + goto yy50; +yy916: + yych = *++lexer->cursor; + if (yych == '6') goto yy970; + goto yy50; +yy917: + yych = *++lexer->cursor; + if (yych == '2') goto yy972; + goto yy50; +yy918: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 286 "src/wast-lexer.cc" + { OPCODE(I64Store8); RETURN(STORE); } +#line 5619 "src/prebuilt/wast-lexer-gen.cc" +yy920: + yych = *++lexer->cursor; + if (yych == 's') goto yy974; + if (yych == 'u') goto yy975; + goto yy50; +yy921: + ++lexer->cursor; + if (lexer->limit <= lexer->cursor) FILL(1); + yych = *lexer->cursor; + if (yych <= '@') { + if (yych <= '+') { + if (yych <= '"') { + if (yych == '!') goto yy49; + goto yy775; + } else { + if (yych <= '\'') goto yy49; + if (yych <= ')') goto yy775; + goto yy49; + } + } else { + if (yych <= '9') { + if (yych <= ',') goto yy775; + if (yych <= '/') goto yy49; + goto yy921; + } else { + if (yych == ';') goto yy775; + goto yy49; + } + } + } else { + if (yych <= '`') { + if (yych <= '[') { + if (yych <= 'F') goto yy921; + if (yych <= 'Z') goto yy49; + goto yy775; + } else { + if (yych == ']') goto yy775; + goto yy49; + } + } else { + if (yych <= '{') { + if (yych <= 'f') goto yy921; + if (yych <= 'z') goto yy49; + goto yy775; + } else { + if (yych == '}') goto yy775; + if (yych <= '~') goto yy49; + goto yy775; + } + } + } +yy923: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 266 "src/wast-lexer.cc" + { RETURN(SET_GLOBAL); } +#line 5678 "src/prebuilt/wast-lexer-gen.cc" +yy925: + yych = *++lexer->cursor; + if (yych == 'e') goto yy976; + goto yy50; +yy926: + yych = *++lexer->cursor; + if (yych == 'u') goto yy978; + goto yy50; +yy927: + yych = *++lexer->cursor; + if (yych == 'l') goto yy979; + goto yy50; +yy928: + yych = *++lexer->cursor; + if (yych == 'o') goto yy980; + goto yy50; +yy929: + yych = *++lexer->cursor; + if (yych == 'r') goto yy981; + goto yy50; +yy930: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 449 "src/wast-lexer.cc" + { RETURN(ASSERT_TRAP); } +#line 5706 "src/prebuilt/wast-lexer-gen.cc" +yy932: + yych = *++lexer->cursor; + if (yych == 'n') goto yy982; + goto yy50; +yy933: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 257 "src/wast-lexer.cc" + { RETURN(CALL_IMPORT); } +#line 5718 "src/prebuilt/wast-lexer-gen.cc" +yy935: + yych = *++lexer->cursor; + if (yych == 'c') goto yy983; + goto yy50; +yy936: + yych = *++lexer->cursor; + if (yych == 'o') goto yy984; + goto yy50; +yy937: + yych = *++lexer->cursor; + if (yych == '_') goto yy985; + goto yy50; +yy938: + yych = *++lexer->cursor; + if (yych == 'n') goto yy986; + goto yy50; +yy939: + yych = *++lexer->cursor; + if (yych == 'f') goto yy988; + goto yy50; +yy940: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 316 "src/wast-lexer.cc" + { OPCODE(F32Nearest); RETURN(UNARY); } +#line 5746 "src/prebuilt/wast-lexer-gen.cc" +yy942: + yych = *++lexer->cursor; + if (yych == 'p') goto yy989; + goto yy50; +yy943: + yych = *++lexer->cursor; + if (yych == '_') goto yy990; + goto yy50; +yy944: + yych = *++lexer->cursor; + if (yych == 'n') goto yy991; + goto yy50; +yy945: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 317 "src/wast-lexer.cc" + { OPCODE(F64Nearest); RETURN(UNARY); } +#line 5766 "src/prebuilt/wast-lexer-gen.cc" +yy947: + yych = *++lexer->cursor; + if (yych == '/') goto yy993; + goto yy50; +yy948: + yych = *++lexer->cursor; + if (yych == 'p') goto yy994; + goto yy50; +yy949: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 422 "src/wast-lexer.cc" + { RETURN(GROW_MEMORY); } +#line 5782 "src/prebuilt/wast-lexer-gen.cc" +yy951: + yych = *++lexer->cursor; + if (yych == 's') goto yy995; + if (yych == 'u') goto yy997; + goto yy50; +yy952: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 275 "src/wast-lexer.cc" + { OPCODE(I32Load8S); RETURN(LOAD); } +#line 5795 "src/prebuilt/wast-lexer-gen.cc" +yy954: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 277 "src/wast-lexer.cc" + { OPCODE(I32Load8U); RETURN(LOAD); } +#line 5803 "src/prebuilt/wast-lexer-gen.cc" +yy956: + yych = *++lexer->cursor; + if (yych == 'p') goto yy999; + goto yy50; +yy957: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 287 "src/wast-lexer.cc" + { OPCODE(I32Store16); RETURN(STORE); } +#line 5815 "src/prebuilt/wast-lexer-gen.cc" +yy959: + yych = *++lexer->cursor; + if (yych == '/') goto yy1000; + goto yy50; +yy960: + yych = *++lexer->cursor; + if (yych == '/') goto yy1001; + goto yy50; +yy961: + yych = *++lexer->cursor; + if (yych == '4') goto yy1002; + goto yy50; +yy962: + yych = *++lexer->cursor; + if (yych == 's') goto yy1004; + if (yych == 'u') goto yy1005; + goto yy50; +yy963: + yych = *++lexer->cursor; + if (yych == 's') goto yy1006; + if (yych == 'u') goto yy1008; + goto yy50; +yy964: + yych = *++lexer->cursor; + if (yych == 's') goto yy1010; + if (yych == 'u') goto yy1012; + goto yy50; +yy965: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 276 "src/wast-lexer.cc" + { OPCODE(I64Load8S); RETURN(LOAD); } +#line 5850 "src/prebuilt/wast-lexer-gen.cc" +yy967: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 278 "src/wast-lexer.cc" + { OPCODE(I64Load8U); RETURN(LOAD); } +#line 5858 "src/prebuilt/wast-lexer-gen.cc" +yy969: + yych = *++lexer->cursor; + if (yych == 'p') goto yy1014; + goto yy50; +yy970: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 288 "src/wast-lexer.cc" + { OPCODE(I64Store16); RETURN(STORE); } +#line 5870 "src/prebuilt/wast-lexer-gen.cc" +yy972: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 289 "src/wast-lexer.cc" + { OPCODE(I64Store32); RETURN(STORE); } +#line 5878 "src/prebuilt/wast-lexer-gen.cc" +yy974: + yych = *++lexer->cursor; + if (yych == '/') goto yy1015; + goto yy50; +yy975: + yych = *++lexer->cursor; + if (yych == '/') goto yy1016; + goto yy50; +yy976: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 420 "src/wast-lexer.cc" + { RETURN(UNREACHABLE); } +#line 5894 "src/prebuilt/wast-lexer-gen.cc" +yy978: + yych = *++lexer->cursor; + if (yych == 's') goto yy1017; + goto yy50; +yy979: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1018; + goto yy50; +yy980: + yych = *++lexer->cursor; + if (yych == 'r') goto yy1019; + goto yy50; +yy981: + yych = *++lexer->cursor; + if (yych == 'n') goto yy1020; + goto yy50; +yy982: + yych = *++lexer->cursor; + if (yych == 'k') goto yy1022; + goto yy50; +yy983: + yych = *++lexer->cursor; + if (yych == 't') goto yy1023; + goto yy50; +yy984: + yych = *++lexer->cursor; + if (yych == 'r') goto yy1025; + goto yy50; +yy985: + yych = *++lexer->cursor; + if (yych == 's') goto yy1026; + if (yych == 'u') goto yy1027; + goto yy50; +yy986: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 360 "src/wast-lexer.cc" + { OPCODE(F32Copysign); RETURN(BINARY); } +#line 5935 "src/prebuilt/wast-lexer-gen.cc" +yy988: + yych = *++lexer->cursor; + if (yych == '6') goto yy1028; + goto yy50; +yy989: + yych = *++lexer->cursor; + if (yych == 'r') goto yy1029; + goto yy50; +yy990: + yych = *++lexer->cursor; + if (yych == 's') goto yy1030; + if (yych == 'u') goto yy1031; + goto yy50; +yy991: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 361 "src/wast-lexer.cc" + { OPCODE(F64Copysign); RETURN(BINARY); } +#line 5956 "src/prebuilt/wast-lexer-gen.cc" +yy993: + yych = *++lexer->cursor; + if (yych == 'f') goto yy1032; + goto yy50; +yy994: + yych = *++lexer->cursor; + if (yych == 'r') goto yy1033; + goto yy50; +yy995: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 279 "src/wast-lexer.cc" + { OPCODE(I32Load16S); RETURN(LOAD); } +#line 5972 "src/prebuilt/wast-lexer-gen.cc" +yy997: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 281 "src/wast-lexer.cc" + { OPCODE(I32Load16U); RETURN(LOAD); } +#line 5980 "src/prebuilt/wast-lexer-gen.cc" +yy999: + yych = *++lexer->cursor; + if (yych == 'r') goto yy1034; + goto yy50; +yy1000: + yych = *++lexer->cursor; + if (yych == 'f') goto yy1035; + goto yy50; +yy1001: + yych = *++lexer->cursor; + if (yych == 'f') goto yy1036; + goto yy50; +yy1002: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 396 "src/wast-lexer.cc" + { OPCODE(I32WrapI64); RETURN(CONVERT); } +#line 6000 "src/prebuilt/wast-lexer-gen.cc" +yy1004: + yych = *++lexer->cursor; + if (yych == '/') goto yy1037; + goto yy50; +yy1005: + yych = *++lexer->cursor; + if (yych == '/') goto yy1038; + goto yy50; +yy1006: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 280 "src/wast-lexer.cc" + { OPCODE(I64Load16S); RETURN(LOAD); } +#line 6016 "src/prebuilt/wast-lexer-gen.cc" +yy1008: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 282 "src/wast-lexer.cc" + { OPCODE(I64Load16U); RETURN(LOAD); } +#line 6024 "src/prebuilt/wast-lexer-gen.cc" +yy1010: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 283 "src/wast-lexer.cc" + { OPCODE(I64Load32S); RETURN(LOAD); } +#line 6032 "src/prebuilt/wast-lexer-gen.cc" +yy1012: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 284 "src/wast-lexer.cc" + { OPCODE(I64Load32U); RETURN(LOAD); } +#line 6040 "src/prebuilt/wast-lexer-gen.cc" +yy1014: + yych = *++lexer->cursor; + if (yych == 'r') goto yy1039; + goto yy50; +yy1015: + yych = *++lexer->cursor; + if (yych == 'f') goto yy1040; + goto yy50; +yy1016: + yych = *++lexer->cursor; + if (yych == 'f') goto yy1041; + goto yy50; +yy1017: + yych = *++lexer->cursor; + if (yych == 't') goto yy1042; + goto yy50; +yy1018: + yych = *++lexer->cursor; + if (yych == 'd') goto yy1043; + goto yy50; +yy1019: + yych = *++lexer->cursor; + if (yych == 'm') goto yy1045; + goto yy50; +yy1020: + ++lexer->cursor; + if ((yych = *lexer->cursor) <= 'Z') { + if (yych <= ')') { + if (yych <= '!') { + if (yych >= '!') goto yy49; + } else { + if (yych <= '"') goto yy1021; + if (yych <= '\'') goto yy49; + } + } else { + if (yych <= ',') { + if (yych <= '+') goto yy49; + } else { + if (yych != ';') goto yy49; + } + } + } else { + if (yych <= '_') { + if (yych <= '\\') { + if (yych >= '\\') goto yy49; + } else { + if (yych <= ']') goto yy1021; + if (yych <= '^') goto yy49; + goto yy1046; + } + } else { + if (yych <= '|') { + if (yych != '{') goto yy49; + } else { + if (yych == '~') goto yy49; + } + } + } +yy1021: +#line 444 "src/wast-lexer.cc" + { RETURN(ASSERT_RETURN); } +#line 6102 "src/prebuilt/wast-lexer-gen.cc" +yy1022: + yych = *++lexer->cursor; + if (yych == 'a') goto yy1047; + goto yy50; +yy1023: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 258 "src/wast-lexer.cc" + { RETURN(CALL_INDIRECT); } +#line 6114 "src/prebuilt/wast-lexer-gen.cc" +yy1025: + yych = *++lexer->cursor; + if (yych == 'y') goto yy1048; + goto yy50; +yy1026: + yych = *++lexer->cursor; + if (yych == '/') goto yy1050; + goto yy50; +yy1027: + yych = *++lexer->cursor; + if (yych == '/') goto yy1051; + goto yy50; +yy1028: + yych = *++lexer->cursor; + if (yych == '4') goto yy1052; + goto yy50; +yy1029: + yych = *++lexer->cursor; + if (yych == 'e') goto yy1054; + goto yy50; +yy1030: + yych = *++lexer->cursor; + if (yych == '/') goto yy1055; + goto yy50; +yy1031: + yych = *++lexer->cursor; + if (yych == '/') goto yy1056; + goto yy50; +yy1032: + yych = *++lexer->cursor; + if (yych == '3') goto yy1057; + goto yy50; +yy1033: + yych = *++lexer->cursor; + if (yych == 'e') goto yy1058; + goto yy50; +yy1034: + yych = *++lexer->cursor; + if (yych == 'e') goto yy1059; + goto yy50; +yy1035: + yych = *++lexer->cursor; + if (yych == '3') goto yy1060; + if (yych == '6') goto yy1061; + goto yy50; +yy1036: + yych = *++lexer->cursor; + if (yych == '3') goto yy1062; + if (yych == '6') goto yy1063; + goto yy50; +yy1037: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1064; + goto yy50; +yy1038: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1065; + goto yy50; +yy1039: + yych = *++lexer->cursor; + if (yych == 'e') goto yy1066; + goto yy50; +yy1040: + yych = *++lexer->cursor; + if (yych == '3') goto yy1067; + if (yych == '6') goto yy1068; + goto yy50; +yy1041: + yych = *++lexer->cursor; + if (yych == '3') goto yy1069; + if (yych == '6') goto yy1070; + goto yy50; +yy1042: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1071; + goto yy50; +yy1043: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 442 "src/wast-lexer.cc" + { RETURN(ASSERT_INVALID); } +#line 6198 "src/prebuilt/wast-lexer-gen.cc" +yy1045: + yych = *++lexer->cursor; + if (yych == 'e') goto yy1072; + goto yy50; +yy1046: + yych = *++lexer->cursor; + if (yych == 'a') goto yy1073; + if (yych == 'c') goto yy1074; + goto yy50; +yy1047: + yych = *++lexer->cursor; + if (yych == 'b') goto yy1075; + goto yy50; +yy1048: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 421 "src/wast-lexer.cc" + { RETURN(CURRENT_MEMORY); } +#line 6219 "src/prebuilt/wast-lexer-gen.cc" +yy1050: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1076; + goto yy50; +yy1051: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1077; + goto yy50; +yy1052: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 414 "src/wast-lexer.cc" + { OPCODE(F32DemoteF64); RETURN(CONVERT); } +#line 6235 "src/prebuilt/wast-lexer-gen.cc" +yy1054: + yych = *++lexer->cursor; + if (yych == 't') goto yy1078; + goto yy50; +yy1055: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1079; + goto yy50; +yy1056: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1080; + goto yy50; +yy1057: + yych = *++lexer->cursor; + if (yych == '2') goto yy1081; + goto yy50; +yy1058: + yych = *++lexer->cursor; + if (yych == 't') goto yy1083; + goto yy50; +yy1059: + yych = *++lexer->cursor; + if (yych == 't') goto yy1084; + goto yy50; +yy1060: + yych = *++lexer->cursor; + if (yych == '2') goto yy1085; + goto yy50; +yy1061: + yych = *++lexer->cursor; + if (yych == '4') goto yy1087; + goto yy50; +yy1062: + yych = *++lexer->cursor; + if (yych == '2') goto yy1089; + goto yy50; +yy1063: + yych = *++lexer->cursor; + if (yych == '4') goto yy1091; + goto yy50; +yy1064: + yych = *++lexer->cursor; + if (yych == '3') goto yy1093; + goto yy50; +yy1065: + yych = *++lexer->cursor; + if (yych == '3') goto yy1094; + goto yy50; +yy1066: + yych = *++lexer->cursor; + if (yych == 't') goto yy1095; + goto yy50; +yy1067: + yych = *++lexer->cursor; + if (yych == '2') goto yy1096; + goto yy50; +yy1068: + yych = *++lexer->cursor; + if (yych == '4') goto yy1098; + goto yy50; +yy1069: + yych = *++lexer->cursor; + if (yych == '2') goto yy1100; + goto yy50; +yy1070: + yych = *++lexer->cursor; + if (yych == '4') goto yy1102; + goto yy50; +yy1071: + yych = *++lexer->cursor; + if (yych == 'o') goto yy1104; + goto yy50; +yy1072: + yych = *++lexer->cursor; + if (yych == 'd') goto yy1105; + goto yy50; +yy1073: + yych = *++lexer->cursor; + if (yych == 'r') goto yy1107; + goto yy50; +yy1074: + yych = *++lexer->cursor; + if (yych == 'a') goto yy1108; + goto yy50; +yy1075: + yych = *++lexer->cursor; + if (yych == 'l') goto yy1109; + goto yy50; +yy1076: + yych = *++lexer->cursor; + if (yych == '3') goto yy1110; + if (yych == '6') goto yy1111; + goto yy50; +yy1077: + yych = *++lexer->cursor; + if (yych == '3') goto yy1112; + if (yych == '6') goto yy1113; + goto yy50; +yy1078: + yych = *++lexer->cursor; + if (yych == '/') goto yy1114; + goto yy50; +yy1079: + yych = *++lexer->cursor; + if (yych == '3') goto yy1115; + if (yych == '6') goto yy1116; + goto yy50; +yy1080: + yych = *++lexer->cursor; + if (yych == '3') goto yy1117; + if (yych == '6') goto yy1118; + goto yy50; +yy1081: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 413 "src/wast-lexer.cc" + { OPCODE(F64PromoteF32); RETURN(CONVERT); } +#line 6355 "src/prebuilt/wast-lexer-gen.cc" +yy1083: + yych = *++lexer->cursor; + if (yych == '/') goto yy1119; + goto yy50; +yy1084: + yych = *++lexer->cursor; + if (yych == '/') goto yy1120; + goto yy50; +yy1085: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 397 "src/wast-lexer.cc" + { OPCODE(I32TruncSF32); RETURN(CONVERT); } +#line 6371 "src/prebuilt/wast-lexer-gen.cc" +yy1087: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 399 "src/wast-lexer.cc" + { OPCODE(I32TruncSF64); RETURN(CONVERT); } +#line 6379 "src/prebuilt/wast-lexer-gen.cc" +yy1089: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 401 "src/wast-lexer.cc" + { OPCODE(I32TruncUF32); RETURN(CONVERT); } +#line 6387 "src/prebuilt/wast-lexer-gen.cc" +yy1091: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 403 "src/wast-lexer.cc" + { OPCODE(I32TruncUF64); RETURN(CONVERT); } +#line 6395 "src/prebuilt/wast-lexer-gen.cc" +yy1093: + yych = *++lexer->cursor; + if (yych == '2') goto yy1121; + goto yy50; +yy1094: + yych = *++lexer->cursor; + if (yych == '2') goto yy1123; + goto yy50; +yy1095: + yych = *++lexer->cursor; + if (yych == '/') goto yy1125; + goto yy50; +yy1096: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 398 "src/wast-lexer.cc" + { OPCODE(I64TruncSF32); RETURN(CONVERT); } +#line 6415 "src/prebuilt/wast-lexer-gen.cc" +yy1098: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 400 "src/wast-lexer.cc" + { OPCODE(I64TruncSF64); RETURN(CONVERT); } +#line 6423 "src/prebuilt/wast-lexer-gen.cc" +yy1100: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 402 "src/wast-lexer.cc" + { OPCODE(I64TruncUF32); RETURN(CONVERT); } +#line 6431 "src/prebuilt/wast-lexer-gen.cc" +yy1102: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 404 "src/wast-lexer.cc" + { OPCODE(I64TruncUF64); RETURN(CONVERT); } +#line 6439 "src/prebuilt/wast-lexer-gen.cc" +yy1104: + yych = *++lexer->cursor; + if (yych == 'n') goto yy1126; + goto yy50; +yy1105: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 441 "src/wast-lexer.cc" + { RETURN(ASSERT_MALFORMED); } +#line 6451 "src/prebuilt/wast-lexer-gen.cc" +yy1107: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1128; + goto yy50; +yy1108: + yych = *++lexer->cursor; + if (yych == 'n') goto yy1129; + goto yy50; +yy1109: + yych = *++lexer->cursor; + if (yych == 'e') goto yy1130; + goto yy50; +yy1110: + yych = *++lexer->cursor; + if (yych == '2') goto yy1132; + goto yy50; +yy1111: + yych = *++lexer->cursor; + if (yych == '4') goto yy1134; + goto yy50; +yy1112: + yych = *++lexer->cursor; + if (yych == '2') goto yy1136; + goto yy50; +yy1113: + yych = *++lexer->cursor; + if (yych == '4') goto yy1138; + goto yy50; +yy1114: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1140; + goto yy50; +yy1115: + yych = *++lexer->cursor; + if (yych == '2') goto yy1141; + goto yy50; +yy1116: + yych = *++lexer->cursor; + if (yych == '4') goto yy1143; + goto yy50; +yy1117: + yych = *++lexer->cursor; + if (yych == '2') goto yy1145; + goto yy50; +yy1118: + yych = *++lexer->cursor; + if (yych == '4') goto yy1147; + goto yy50; +yy1119: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1149; + goto yy50; +yy1120: + yych = *++lexer->cursor; + if (yych == 'f') goto yy1150; + goto yy50; +yy1121: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 394 "src/wast-lexer.cc" + { OPCODE(I64ExtendSI32); RETURN(CONVERT); } +#line 6515 "src/prebuilt/wast-lexer-gen.cc" +yy1123: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 395 "src/wast-lexer.cc" + { OPCODE(I64ExtendUI32); RETURN(CONVERT); } +#line 6523 "src/prebuilt/wast-lexer-gen.cc" +yy1125: + yych = *++lexer->cursor; + if (yych == 'f') goto yy1151; + goto yy50; +yy1126: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 450 "src/wast-lexer.cc" + { RETURN(ASSERT_EXHAUSTION); } +#line 6535 "src/prebuilt/wast-lexer-gen.cc" +yy1128: + yych = *++lexer->cursor; + if (yych == 't') goto yy1152; + goto yy50; +yy1129: + yych = *++lexer->cursor; + if (yych == 'o') goto yy1153; + goto yy50; +yy1130: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 443 "src/wast-lexer.cc" + { RETURN(ASSERT_UNLINKABLE); } +#line 6551 "src/prebuilt/wast-lexer-gen.cc" +yy1132: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 405 "src/wast-lexer.cc" + { OPCODE(F32ConvertSI32); RETURN(CONVERT); } +#line 6559 "src/prebuilt/wast-lexer-gen.cc" +yy1134: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 407 "src/wast-lexer.cc" + { OPCODE(F32ConvertSI64); RETURN(CONVERT); } +#line 6567 "src/prebuilt/wast-lexer-gen.cc" +yy1136: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 409 "src/wast-lexer.cc" + { OPCODE(F32ConvertUI32); RETURN(CONVERT); } +#line 6575 "src/prebuilt/wast-lexer-gen.cc" +yy1138: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 411 "src/wast-lexer.cc" + { OPCODE(F32ConvertUI64); RETURN(CONVERT); } +#line 6583 "src/prebuilt/wast-lexer-gen.cc" +yy1140: + yych = *++lexer->cursor; + if (yych == '3') goto yy1154; + goto yy50; +yy1141: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 406 "src/wast-lexer.cc" + { OPCODE(F64ConvertSI32); RETURN(CONVERT); } +#line 6595 "src/prebuilt/wast-lexer-gen.cc" +yy1143: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 408 "src/wast-lexer.cc" + { OPCODE(F64ConvertSI64); RETURN(CONVERT); } +#line 6603 "src/prebuilt/wast-lexer-gen.cc" +yy1145: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 410 "src/wast-lexer.cc" + { OPCODE(F64ConvertUI32); RETURN(CONVERT); } +#line 6611 "src/prebuilt/wast-lexer-gen.cc" +yy1147: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 412 "src/wast-lexer.cc" + { OPCODE(F64ConvertUI64); RETURN(CONVERT); } +#line 6619 "src/prebuilt/wast-lexer-gen.cc" +yy1149: + yych = *++lexer->cursor; + if (yych == '6') goto yy1155; + goto yy50; +yy1150: + yych = *++lexer->cursor; + if (yych == '3') goto yy1156; + goto yy50; +yy1151: + yych = *++lexer->cursor; + if (yych == '6') goto yy1157; + goto yy50; +yy1152: + yych = *++lexer->cursor; + if (yych == 'h') goto yy1158; + goto yy50; +yy1153: + yych = *++lexer->cursor; + if (yych == 'n') goto yy1159; + goto yy50; +yy1154: + yych = *++lexer->cursor; + if (yych == '2') goto yy1160; + goto yy50; +yy1155: + yych = *++lexer->cursor; + if (yych == '4') goto yy1162; + goto yy50; +yy1156: + yych = *++lexer->cursor; + if (yych == '2') goto yy1164; + goto yy50; +yy1157: + yych = *++lexer->cursor; + if (yych == '4') goto yy1166; + goto yy50; +yy1158: + yych = *++lexer->cursor; + if (yych == 'm') goto yy1168; + goto yy50; +yy1159: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1169; + goto yy50; +yy1160: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 415 "src/wast-lexer.cc" + { OPCODE(F32ReinterpretI32); RETURN(CONVERT); } +#line 6671 "src/prebuilt/wast-lexer-gen.cc" +yy1162: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 417 "src/wast-lexer.cc" + { OPCODE(F64ReinterpretI64); RETURN(CONVERT); } +#line 6679 "src/prebuilt/wast-lexer-gen.cc" +yy1164: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 416 "src/wast-lexer.cc" + { OPCODE(I32ReinterpretF32); RETURN(CONVERT); } +#line 6687 "src/prebuilt/wast-lexer-gen.cc" +yy1166: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 418 "src/wast-lexer.cc" + { OPCODE(I64ReinterpretF64); RETURN(CONVERT); } +#line 6695 "src/prebuilt/wast-lexer-gen.cc" +yy1168: + yych = *++lexer->cursor; + if (yych == 'e') goto yy1170; + goto yy50; +yy1169: + yych = *++lexer->cursor; + if (yych == 'c') goto yy1171; + goto yy50; +yy1170: + yych = *++lexer->cursor; + if (yych == 't') goto yy1172; + goto yy50; +yy1171: + yych = *++lexer->cursor; + if (yych == 'a') goto yy1173; + goto yy50; +yy1172: + yych = *++lexer->cursor; + if (yych == 'i') goto yy1174; + goto yy50; +yy1173: + yych = *++lexer->cursor; + if (yych == 'l') goto yy1175; + goto yy50; +yy1174: + yych = *++lexer->cursor; + if (yych == 'c') goto yy1176; + goto yy50; +yy1175: + yych = *++lexer->cursor; + if (yych == '_') goto yy1177; + goto yy50; +yy1176: + yych = *++lexer->cursor; + if (yych == '_') goto yy1178; + goto yy50; +yy1177: + yych = *++lexer->cursor; + if (yych == 'n') goto yy1179; + goto yy50; +yy1178: + yych = *++lexer->cursor; + if (yych == 'n') goto yy1180; + goto yy50; +yy1179: + yych = *++lexer->cursor; + if (yych == 'a') goto yy1181; + goto yy50; +yy1180: + yych = *++lexer->cursor; + if (yych == 'a') goto yy1182; + goto yy50; +yy1181: + yych = *++lexer->cursor; + if (yych == 'n') goto yy1183; + goto yy50; +yy1182: + yych = *++lexer->cursor; + if (yych == 'n') goto yy1185; + goto yy50; +yy1183: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 445 "src/wast-lexer.cc" + { + RETURN(ASSERT_RETURN_CANONICAL_NAN); } +#line 6764 "src/prebuilt/wast-lexer-gen.cc" +yy1185: + ++lexer->cursor; + if (yybm[0+(yych = *lexer->cursor)] & 16) { + goto yy49; + } +#line 447 "src/wast-lexer.cc" + { + RETURN(ASSERT_RETURN_ARITHMETIC_NAN); } +#line 6773 "src/prebuilt/wast-lexer-gen.cc" + } +} +#line 473 "src/wast-lexer.cc" + + } +} + +static WastLexer* new_lexer(WastLexerSourceType type, const char* filename) { + WastLexer* lexer = new WastLexer(); + lexer->line = 1; + lexer->filename = filename; + lexer->source.type = type; + return lexer; +} + +WastLexer* new_wast_file_lexer(const char* filename) { + WastLexer* lexer = new_lexer(WastLexerSourceType::File, filename); + lexer->source.file = fopen(filename, "rb"); + if (!lexer->source.file) { + destroy_wast_lexer(lexer); + return nullptr; + } + return lexer; +} + +WastLexer* new_wast_buffer_lexer(const char* filename, + const void* data, + size_t size) { + WastLexer* lexer = new_lexer(WastLexerSourceType::Buffer, filename); + lexer->source.buffer.data = data; + lexer->source.buffer.size = size; + lexer->source.buffer.read_offset = 0; + return lexer; +} + +void destroy_wast_lexer(WastLexer* lexer) { + if (lexer->source.type == WastLexerSourceType::File && lexer->source.file) + fclose(lexer->source.file); + delete[] lexer->buffer; + delete lexer; +} + +enum class LineOffsetPosition { + Start, + End, +}; + +static Result scan_forward_for_line_offset_in_buffer( + const char* buffer_start, + const char* buffer_end, + int buffer_line, + size_t buffer_file_offset, + LineOffsetPosition find_position, + int find_line, + int* out_line, + size_t* out_line_offset) { + int line = buffer_line; + int line_offset = 0; + const char* p; + bool is_previous_carriage = 0; + for (p = buffer_start; p < buffer_end; ++p) { + if (*p == '\n') { + if (find_position == LineOffsetPosition::Start) { + if (++line == find_line) { + line_offset = buffer_file_offset + (p - buffer_start) + 1; + break; + } + } else { + if (line++ == find_line) { + line_offset = + buffer_file_offset + (p - buffer_start) - is_previous_carriage; + break; + } + } + } + is_previous_carriage = *p == '\r'; + } + + Result result = Result::Ok; + if (p == buffer_end) { + /* end of buffer */ + if (find_position == LineOffsetPosition::Start) { + result = Result::Error; + } else { + line_offset = buffer_file_offset + (buffer_end - buffer_start); + } + } + + *out_line = line; + *out_line_offset = line_offset; + return result; +} + +static Result scan_forward_for_line_offset_in_file( + WastLexer* lexer, + int line, + size_t line_start_offset, + LineOffsetPosition find_position, + int find_line, + size_t* out_line_offset) { + FILE* lexer_file = lexer->source.file; + Result result = Result::Error; + long old_offset = ftell(lexer_file); + if (old_offset == -1) + return Result::Error; + size_t buffer_file_offset = line_start_offset; + if (fseek(lexer_file, buffer_file_offset, SEEK_SET) == -1) + goto cleanup; + + while (1) { + char buffer[8 * 1024]; + const size_t buffer_size = WABT_ARRAY_SIZE(buffer); + size_t read_bytes = fread(buffer, 1, buffer_size, lexer_file); + if (read_bytes == 0) { + /* end of buffer */ + if (find_position == LineOffsetPosition::Start) { + result = Result::Error; + } else { + *out_line_offset = buffer_file_offset + read_bytes; + result = Result::Ok; + } + goto cleanup; + } + + const char* buffer_end = buffer + read_bytes; + result = scan_forward_for_line_offset_in_buffer( + buffer, buffer_end, line, buffer_file_offset, find_position, find_line, + &line, out_line_offset); + if (result == Result::Ok) + goto cleanup; + + buffer_file_offset += read_bytes; + } + +cleanup: + /* if this fails, we're screwed */ + if (fseek(lexer_file, old_offset, SEEK_SET) == -1) + return Result::Error; + return result; +} + +static Result scan_forward_for_line_offset(WastLexer* lexer, + int line, + size_t line_start_offset, + LineOffsetPosition find_position, + int find_line, + size_t* out_line_offset) { + assert(line <= find_line); + if (lexer->source.type == WastLexerSourceType::Buffer) { + const char* source_buffer = + static_cast<const char*>(lexer->source.buffer.data); + const char* buffer_start = source_buffer + line_start_offset; + const char* buffer_end = source_buffer + lexer->source.buffer.size; + return scan_forward_for_line_offset_in_buffer( + buffer_start, buffer_end, line, line_start_offset, find_position, + find_line, &line, out_line_offset); + } else { + assert(lexer->source.type == WastLexerSourceType::File); + return scan_forward_for_line_offset_in_file(lexer, line, line_start_offset, + find_position, find_line, + out_line_offset); + } +} + +static Result get_line_start_offset(WastLexer* lexer, + int line, + size_t* out_offset) { + int first_line = 1; + size_t first_offset = 0; + int current_line = lexer->line; + size_t current_offset = lexer->line_file_offset; + + if (line == current_line) { + *out_offset = current_offset; + return Result::Ok; + } else if (line == first_line) { + *out_offset = first_offset; + return Result::Ok; + } else if (line > current_line) { + return scan_forward_for_line_offset(lexer, current_line, current_offset, + LineOffsetPosition::Start, line, + out_offset); + } else { + /* TODO(binji): optimize by storing more known line/offset pairs */ + return scan_forward_for_line_offset(lexer, first_line, first_offset, + LineOffsetPosition::Start, line, + out_offset); + } +} + +static Result get_offsets_from_line(WastLexer* lexer, + int line, + size_t* out_line_start, + size_t* out_line_end) { + size_t line_start; + if (WABT_FAILED(get_line_start_offset(lexer, line, &line_start))) + return Result::Error; + + size_t line_end; + if (WABT_FAILED(scan_forward_for_line_offset( + lexer, line, line_start, LineOffsetPosition::End, line, &line_end))) + return Result::Error; + *out_line_start = line_start; + *out_line_end = line_end; + return Result::Ok; +} + +static void clamp_source_line_offsets_to_location(size_t line_start, + size_t line_end, + int first_column, + int last_column, + size_t max_line_length, + size_t* out_new_line_start, + size_t* out_new_line_end) { + size_t line_length = line_end - line_start; + if (line_length > max_line_length) { + size_t column_range = last_column - first_column; + size_t center_on; + if (column_range > max_line_length) { + /* the column range doesn't fit, just center on first_column */ + center_on = first_column - 1; + } else { + /* the entire range fits, display it all in the center */ + center_on = (first_column + last_column) / 2 - 1; + } + if (center_on > max_line_length / 2) + line_start += center_on - max_line_length / 2; + if (line_start > line_end - max_line_length) + line_start = line_end - max_line_length; + line_end = line_start + max_line_length; + } + + *out_new_line_start = line_start; + *out_new_line_end = line_end; +} + +Result wast_lexer_get_source_line(WastLexer* lexer, + const Location* loc, + size_t line_max_length, + char* line, + size_t* out_line_length, + int* out_column_offset) { + Result result; + size_t line_start; /* inclusive */ + size_t line_end; /* exclusive */ + result = get_offsets_from_line(lexer, loc->line, &line_start, &line_end); + if (WABT_FAILED(result)) + return result; + + size_t new_line_start; + size_t new_line_end; + clamp_source_line_offsets_to_location(line_start, line_end, loc->first_column, + loc->last_column, line_max_length, + &new_line_start, &new_line_end); + bool has_start_ellipsis = line_start != new_line_start; + bool has_end_ellipsis = line_end != new_line_end; + + char* write_start = line; + size_t line_length = new_line_end - new_line_start; + size_t read_start = new_line_start; + size_t read_length = line_length; + if (has_start_ellipsis) { + memcpy(line, "...", 3); + read_start += 3; + write_start += 3; + read_length -= 3; + } + if (has_end_ellipsis) { + memcpy(line + line_length - 3, "...", 3); + read_length -= 3; + } + + if (lexer->source.type == WastLexerSourceType::Buffer) { + const char* buffer_read_start = + static_cast<const char*>(lexer->source.buffer.data) + read_start; + memcpy(write_start, buffer_read_start, read_length); + } else { + assert(lexer->source.type == WastLexerSourceType::File); + FILE* lexer_file = lexer->source.file; + long old_offset = ftell(lexer_file); + if (old_offset == -1) + return Result::Error; + if (fseek(lexer_file, read_start, SEEK_SET) == -1) + return Result::Error; + if (fread(write_start, 1, read_length, lexer_file) < read_length) + return Result::Error; + if (fseek(lexer_file, old_offset, SEEK_SET) == -1) + return Result::Error; + } + + line[line_length] = '\0'; + + *out_line_length = line_length; + *out_column_offset = new_line_start - line_start; + return Result::Ok; +} + +} // namespace wabt |