/* Generated by re2c 0.16 */
#line 1 "src/ast-lexer.c"
/*
 * 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 "ast-lexer.h"

#include <assert.h>
#include <stdio.h>

#include "config.h"

#include "allocator.h"
#include "ast-parser.h"
#include "ast-parser-lexer-shared.h"
#include "vector.h"

/* must be included after so some typedefs will be defined */
#include "ast-parser-gen.h"

#define YYMAXFILL 20

#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 WASM_TOKEN_TYPE_##name

#define ERROR(...) \
  YY_USER_ACTION;  \
  wasm_ast_parser_error(loc, lexer, parser, __VA_ARGS__)

#define BEGIN(c) \
  do {           \
    cond = c;    \
  } while (0)
#define FILL(n)                                     \
  do {                                              \
    if (WASM_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 = WASM_TYPE_##type_

#define OPCODE(name) lval->opcode = WASM_OPCODE_##name

#define LITERAL(type_)                      \
  lval->literal.type = WASM_LITERAL_TYPE_##type_; \
  lval->literal.text.start = yytext;              \
  lval->literal.text.length = yyleng

static WasmResult fill(WasmLocation* loc,
                       WasmAstLexer* lexer,
                       WasmAstParser* parser,
                       size_t need) {
  if (lexer->eof)
    return WASM_ERROR;
  size_t free = lexer->token - lexer->buffer;
  assert((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;

    /* TODO(binji): could just alloc instead, because we know we'll need to
     * memmove below */
    char* new_buffer = wasm_realloc(lexer->allocator, lexer->buffer,
                                    new_buffer_size, WASM_DEFAULT_ALIGN);
    if (new_buffer == NULL) {
      wasm_ast_parser_error(loc, lexer, parser,
                            "unable to reallocate lexer buffer.");
      return WASM_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;
  } 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 == WASM_LEXER_SOURCE_TYPE_FILE) {
    lexer->limit += fread(lexer->limit, 1, free, lexer->source.file);
  } else {
    /* TODO(binji): could lex directly from buffer */
    assert(lexer->source.type == WASM_LEXER_SOURCE_TYPE_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->buffer, (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 = WASM_TRUE;
    memset(lexer->limit, 0, YYMAXFILL);
    lexer->limit += YYMAXFILL;
  }
  return WASM_OK;
}

int wasm_ast_lexer_lex(WASM_AST_PARSER_STYPE* lval,
                       WASM_AST_PARSER_LTYPE* loc,
                       WasmAstLexer* lexer,
                       WasmAstParser* 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 187 "src/prebuilt/ast-lexer-gen.c"
{
	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 235 "src/ast-lexer.c"
	{ ERROR("unexpected EOF"); RETURN(EOF); }
#line 228 "src/prebuilt/ast-lexer-gen.c"
yy5:
	++lexer->cursor;
yy6:
#line 236 "src/ast-lexer.c"
	{ ERROR("illegal character in string"); continue; }
#line 234 "src/prebuilt/ast-lexer-gen.c"
yy7:
	++lexer->cursor;
	BEGIN(YYCOND_i);
#line 231 "src/ast-lexer.c"
	{ ERROR("newline in string"); NEWLINE; continue; }
#line 240 "src/prebuilt/ast-lexer-gen.c"
yy9:
	++lexer->cursor;
#line 230 "src/ast-lexer.c"
	{ continue; }
#line 245 "src/prebuilt/ast-lexer-gen.c"
yy11:
	++lexer->cursor;
	BEGIN(YYCOND_i);
#line 234 "src/ast-lexer.c"
	{ TEXT; RETURN(TEXT); }
#line 251 "src/prebuilt/ast-lexer-gen.c"
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 232 "src/ast-lexer.c"
	{ ERROR("bad escape \"%.*s\"", (int)yyleng, yytext);
                                continue; }
#line 288 "src/prebuilt/ast-lexer-gen.c"
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 457 "src/ast-lexer.c"
	{ ERROR("unexpected EOF"); RETURN(EOF); }
#line 318 "src/prebuilt/ast-lexer-gen.c"
yy21:
	++lexer->cursor;
yy22:
#line 458 "src/ast-lexer.c"
	{ continue; }
#line 324 "src/prebuilt/ast-lexer-gen.c"
yy23:
	++lexer->cursor;
#line 456 "src/ast-lexer.c"
	{ NEWLINE; continue; }
#line 329 "src/prebuilt/ast-lexer-gen.c"
yy25:
	yych = *++lexer->cursor;
	if (yych == ';') goto yy27;
	goto yy22;
yy26:
	yych = *++lexer->cursor;
	if (yych == ')') goto yy29;
	goto yy22;
yy27:
	++lexer->cursor;
#line 452 "src/ast-lexer.c"
	{ COMMENT_NESTING++; continue; }
#line 342 "src/prebuilt/ast-lexer-gen.c"
yy29:
	++lexer->cursor;
#line 453 "src/ast-lexer.c"
	{ if (--COMMENT_NESTING == 0)
                                  BEGIN(YYCOND_INIT);
                                continue; }
#line 349 "src/prebuilt/ast-lexer-gen.c"
/* *********************************** */
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 450 "src/ast-lexer.c"
		{ continue; }
#line 396 "src/prebuilt/ast-lexer-gen.c"
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 449 "src/ast-lexer.c"
		{ NEWLINE; continue; }
#line 410 "src/prebuilt/ast-lexer-gen.c"
	}
/* *********************************** */
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) < 20) FILL(20);
		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 464 "src/ast-lexer.c"
		{ RETURN(EOF); }
#line 554 "src/prebuilt/ast-lexer-gen.c"
yy42:
		++lexer->cursor;
yy43:
#line 465 "src/ast-lexer.c"
		{ ERROR("unexpected char"); continue; }
#line 560 "src/prebuilt/ast-lexer-gen.c"
yy44:
		++lexer->cursor;
		if (lexer->limit <= lexer->cursor) FILL(1);
		yych = *lexer->cursor;
		if (yybm[0+yych] & 8) {
			goto yy44;
		}
#line 460 "src/ast-lexer.c"
		{ continue; }
#line 570 "src/prebuilt/ast-lexer-gen.c"
yy47:
		++lexer->cursor;
#line 459 "src/ast-lexer.c"
		{ NEWLINE; continue; }
#line 575 "src/prebuilt/ast-lexer-gen.c"
yy49:
		++lexer->cursor;
		if (lexer->limit <= lexer->cursor) FILL(1);
		yych = *lexer->cursor;
yy50:
		if (yybm[0+yych] & 16) {
			goto yy49;
		}
yy51:
#line 461 "src/ast-lexer.c"
		{ ERROR("unexpected token \"%.*s\"",
                                      (int)yyleng, yytext);
                                continue; }
#line 589 "src/prebuilt/ast-lexer-gen.c"
yy52:
		yych = *(lexer->marker = ++lexer->cursor);
		if (yych <= 0x1F) goto yy53;
		if (yych != 0x7F) goto yy83;
yy53:
		BEGIN(YYCOND_BAD_TEXT);
#line 229 "src/ast-lexer.c"
		{ continue; }
#line 598 "src/prebuilt/ast-lexer-gen.c"
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 220 "src/ast-lexer.c"
		{ RETURN(LPAR); }
#line 640 "src/prebuilt/ast-lexer-gen.c"
yy57:
		++lexer->cursor;
#line 221 "src/ast-lexer.c"
		{ RETURN(RPAR); }
#line 645 "src/prebuilt/ast-lexer-gen.c"
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 222 "src/ast-lexer.c"
		{ LITERAL(INT); RETURN(NAT); }
#line 704 "src/prebuilt/ast-lexer-gen.c"
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 228 "src/ast-lexer.c"
		{ TEXT; RETURN(TEXT); }
#line 907 "src/prebuilt/ast-lexer-gen.c"
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 446 "src/ast-lexer.c"
		{ TEXT; RETURN(VAR); }
#line 972 "src/prebuilt/ast-lexer-gen.c"
yy91:
		++lexer->cursor;
		BEGIN(YYCOND_BLOCK_COMMENT);
#line 451 "src/ast-lexer.c"
		{ COMMENT_NESTING = 1; continue; }
#line 978 "src/prebuilt/ast-lexer-gen.c"
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 223 "src/ast-lexer.c"
		{ LITERAL(INT); RETURN(INT); }
#line 1022 "src/prebuilt/ast-lexer-gen.c"
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 224 "src/ast-lexer.c"
		{ LITERAL(FLOAT); RETURN(FLOAT); }
#line 1121 "src/prebuilt/ast-lexer-gen.c"
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 448 "src/ast-lexer.c"
		{ continue; }
#line 1144 "src/prebuilt/ast-lexer-gen.c"
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 250 "src/ast-lexer.c"
		{ RETURN(BR); }
#line 1198 "src/prebuilt/ast-lexer-gen.c"
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 245 "src/ast-lexer.c"
		{ RETURN(IF); }
#line 1297 "src/prebuilt/ast-lexer-gen.c"
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 257 "src/ast-lexer.c"
		{ RETURN(END); }
#line 1564 "src/prebuilt/ast-lexer-gen.c"
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 239 "src/ast-lexer.c"
		{ TYPE(F32); RETURN(VALUE_TYPE); }
#line 1605 "src/prebuilt/ast-lexer-gen.c"
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 240 "src/ast-lexer.c"
		{ TYPE(F64); RETURN(VALUE_TYPE); }
#line 1642 "src/prebuilt/ast-lexer-gen.c"
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 437 "src/ast-lexer.c"
		{ RETURN(GET); }
#line 1684 "src/prebuilt/ast-lexer-gen.c"
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 237 "src/ast-lexer.c"
		{ TYPE(I32); RETURN(VALUE_TYPE); }
#line 1729 "src/prebuilt/ast-lexer-gen.c"
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 238 "src/ast-lexer.c"
		{ TYPE(I64); RETURN(VALUE_TYPE); }
#line 1766 "src/prebuilt/ast-lexer-gen.c"
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 226 "src/ast-lexer.c"
		{ LITERAL(INFINITY); RETURN(FLOAT); }
#line 1812 "src/prebuilt/ast-lexer-gen.c"
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 242 "src/ast-lexer.c"
		{ RETURN(MUT); }
#line 1844 "src/prebuilt/ast-lexer-gen.c"
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 227 "src/ast-lexer.c"
		{ LITERAL(NAN); RETURN(FLOAT); }
#line 1881 "src/prebuilt/ast-lexer-gen.c"
yy197:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 243 "src/ast-lexer.c"
		{ RETURN(NOP); }
#line 1889 "src/prebuilt/ast-lexer-gen.c"
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 253 "src/ast-lexer.c"
		{ RETURN(CALL); }
#line 2113 "src/prebuilt/ast-lexer-gen.c"
yy226:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy285;
		goto yy50;
yy227:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 431 "src/ast-lexer.c"
		{ RETURN(DATA); }
#line 2125 "src/prebuilt/ast-lexer-gen.c"
yy229:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 256 "src/ast-lexer.c"
		{ RETURN(DROP); }
#line 2133 "src/prebuilt/ast-lexer-gen.c"
yy231:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 430 "src/ast-lexer.c"
		{ RETURN(ELEM); }
#line 2141 "src/prebuilt/ast-lexer-gen.c"
yy233:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 248 "src/ast-lexer.c"
		{ RETURN(ELSE); }
#line 2149 "src/prebuilt/ast-lexer-gen.c"
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 421 "src/ast-lexer.c"
		{ RETURN(FUNC); }
#line 2196 "src/prebuilt/ast-lexer-gen.c"
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 249 "src/ast-lexer.c"
		{ RETURN(LOOP); }
#line 2280 "src/prebuilt/ast-lexer-gen.c"
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 247 "src/ast-lexer.c"
		{ RETURN(THEN); }
#line 2345 "src/prebuilt/ast-lexer-gen.c"
yy269:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 420 "src/ast-lexer.c"
		{ RETURN(TYPE); }
#line 2353 "src/prebuilt/ast-lexer-gen.c"
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 225 "src/ast-lexer.c"
		{ LITERAL(HEXFLOAT); RETURN(FLOAT); }
#line 2401 "src/prebuilt/ast-lexer-gen.c"
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 244 "src/ast-lexer.c"
		{ RETURN(BLOCK); }
#line 2421 "src/prebuilt/ast-lexer-gen.c"
yy281:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 251 "src/ast-lexer.c"
		{ RETURN(BR_IF); }
#line 2429 "src/prebuilt/ast-lexer-gen.c"
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 444 "src/ast-lexer.c"
		{ RETURN(INPUT); }
#line 2783 "src/prebuilt/ast-lexer-gen.c"
yy350:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy499;
		goto yy50;
yy351:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 424 "src/ast-lexer.c"
		{ RETURN(LOCAL); }
#line 2795 "src/prebuilt/ast-lexer-gen.c"
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 422 "src/ast-lexer.c"
		{ RETURN(PARAM); }
#line 2823 "src/prebuilt/ast-lexer-gen.c"
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 429 "src/ast-lexer.c"
		{ RETURN(START); }
#line 2855 "src/prebuilt/ast-lexer-gen.c"
yy368:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 427 "src/ast-lexer.c"
		{ RETURN(TABLE); }
#line 2863 "src/prebuilt/ast-lexer-gen.c"
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 434 "src/ast-lexer.c"
		{ RETURN(EXPORT); }
#line 2907 "src/prebuilt/ast-lexer-gen.c"
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 379 "src/ast-lexer.c"
		{ OPCODE(F32_EQ); RETURN(COMPARE); }
#line 2940 "src/prebuilt/ast-lexer-gen.c"
yy388:
		yych = *++lexer->cursor;
		if (yych == 'o') goto yy542;
		goto yy50;
yy389:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 389 "src/ast-lexer.c"
		{ OPCODE(F32_GE); RETURN(COMPARE); }
#line 2952 "src/prebuilt/ast-lexer-gen.c"
yy391:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 387 "src/ast-lexer.c"
		{ OPCODE(F32_GT); RETURN(COMPARE); }
#line 2960 "src/prebuilt/ast-lexer-gen.c"
yy393:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 385 "src/ast-lexer.c"
		{ OPCODE(F32_LE); RETURN(COMPARE); }
#line 2968 "src/prebuilt/ast-lexer-gen.c"
yy395:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy543;
		goto yy50;
yy396:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 383 "src/ast-lexer.c"
		{ OPCODE(F32_LT); RETURN(COMPARE); }
#line 2980 "src/prebuilt/ast-lexer-gen.c"
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 381 "src/ast-lexer.c"
		{ OPCODE(F32_NE); RETURN(COMPARE); }
#line 3031 "src/prebuilt/ast-lexer-gen.c"
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 380 "src/ast-lexer.c"
		{ OPCODE(F64_EQ); RETURN(COMPARE); }
#line 3080 "src/prebuilt/ast-lexer-gen.c"
yy415:
		yych = *++lexer->cursor;
		if (yych == 'o') goto yy568;
		goto yy50;
yy416:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 390 "src/ast-lexer.c"
		{ OPCODE(F64_GE); RETURN(COMPARE); }
#line 3092 "src/prebuilt/ast-lexer-gen.c"
yy418:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 388 "src/ast-lexer.c"
		{ OPCODE(F64_GT); RETURN(COMPARE); }
#line 3100 "src/prebuilt/ast-lexer-gen.c"
yy420:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 386 "src/ast-lexer.c"
		{ OPCODE(F64_LE); RETURN(COMPARE); }
#line 3108 "src/prebuilt/ast-lexer-gen.c"
yy422:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy569;
		goto yy50;
yy423:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 384 "src/ast-lexer.c"
		{ OPCODE(F64_LT); RETURN(COMPARE); }
#line 3120 "src/prebuilt/ast-lexer-gen.c"
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 382 "src/ast-lexer.c"
		{ OPCODE(F64_NE); RETURN(COMPARE); }
#line 3171 "src/prebuilt/ast-lexer-gen.c"
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 425 "src/ast-lexer.c"
		{ RETURN(GLOBAL); }
#line 3211 "src/prebuilt/ast-lexer-gen.c"
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 359 "src/ast-lexer.c"
		{ OPCODE(I32_EQ); RETURN(COMPARE); }
#line 3277 "src/prebuilt/ast-lexer-gen.c"
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 361 "src/ast-lexer.c"
		{ OPCODE(I32_NE); RETURN(COMPARE); }
#line 3309 "src/prebuilt/ast-lexer-gen.c"
yy457:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 331 "src/ast-lexer.c"
		{ OPCODE(I32_OR); RETURN(BINARY); }
#line 3317 "src/prebuilt/ast-lexer-gen.c"
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 360 "src/ast-lexer.c"
		{ OPCODE(I64_EQ); RETURN(COMPARE); }
#line 3417 "src/prebuilt/ast-lexer-gen.c"
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 362 "src/ast-lexer.c"
		{ OPCODE(I64_NE); RETURN(COMPARE); }
#line 3453 "src/prebuilt/ast-lexer-gen.c"
yy485:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 332 "src/ast-lexer.c"
		{ OPCODE(I64_OR); RETURN(BINARY); }
#line 3461 "src/prebuilt/ast-lexer-gen.c"
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 433 "src/ast-lexer.c"
		{ RETURN(IMPORT); }
#line 3507 "src/prebuilt/ast-lexer-gen.c"
yy498:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy657;
		goto yy50;
yy499:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 436 "src/ast-lexer.c"
		{ RETURN(INVOKE); }
#line 3519 "src/prebuilt/ast-lexer-gen.c"
yy501:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 428 "src/ast-lexer.c"
		{ RETURN(MEMORY); }
#line 3527 "src/prebuilt/ast-lexer-gen.c"
yy503:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 426 "src/ast-lexer.c"
		{ RETURN(MODULE); }
#line 3535 "src/prebuilt/ast-lexer-gen.c"
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 432 "src/ast-lexer.c"
		{ RETURN(OFFSET); }
#line 3584 "src/prebuilt/ast-lexer-gen.c"
yy508:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 445 "src/ast-lexer.c"
		{ RETURN(OUTPUT); }
#line 3592 "src/prebuilt/ast-lexer-gen.c"
yy510:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy661;
		goto yy50;
yy511:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 423 "src/ast-lexer.c"
		{ RETURN(RESULT); }
#line 3604 "src/prebuilt/ast-lexer-gen.c"
yy513:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 258 "src/ast-lexer.c"
		{ RETURN(RETURN); }
#line 3612 "src/prebuilt/ast-lexer-gen.c"
yy515:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 416 "src/ast-lexer.c"
		{ RETURN(SELECT); }
#line 3620 "src/prebuilt/ast-lexer-gen.c"
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 288 "src/ast-lexer.c"
		{ TEXT_AT(6); RETURN(ALIGN_EQ_NAT); }
#line 3675 "src/prebuilt/ast-lexer-gen.c"
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 241 "src/ast-lexer.c"
		{ RETURN(ANYFUNC); }
#line 3726 "src/prebuilt/ast-lexer-gen.c"
yy527:
		yych = *++lexer->cursor;
		switch (yych) {
		case 'i':	goto yy667;
		case 'm':	goto yy668;
		case 'r':	goto yy669;
		case 't':	goto yy670;
		case 'u':	goto yy671;
		default:	goto yy50;
		}
yy528:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy672;
		goto yy50;
yy529:
		yych = *++lexer->cursor;
		if (yych == 'p') goto yy674;
		goto yy50;
yy530:
		yych = *++lexer->cursor;
		if (yych == 'd') goto yy675;
		goto yy50;
yy531:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy676;
		goto yy50;
yy532:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 303 "src/ast-lexer.c"
		{ OPCODE(F32_ABS); RETURN(UNARY); }
#line 3760 "src/prebuilt/ast-lexer-gen.c"
yy534:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 345 "src/ast-lexer.c"
		{ OPCODE(F32_ADD); RETURN(BINARY); }
#line 3768 "src/prebuilt/ast-lexer-gen.c"
yy536:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy677;
		goto yy50;
yy537:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy679;
		if (yych == 'v') goto yy680;
		goto yy50;
yy538:
		yych = *++lexer->cursor;
		if (yych == 'y') goto yy681;
		goto yy50;
yy539:
		yych = *++lexer->cursor;
		if (yych == 'o') goto yy682;
		goto yy50;
yy540:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 351 "src/ast-lexer.c"
		{ OPCODE(F32_DIV); RETURN(BINARY); }
#line 3793 "src/prebuilt/ast-lexer-gen.c"
yy542:
		yych = *++lexer->cursor;
		if (yych == 'o') goto yy683;
		goto yy50;
yy543:
		yych = *++lexer->cursor;
		if (yych == 'd') goto yy684;
		goto yy50;
yy544:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 355 "src/ast-lexer.c"
		{ OPCODE(F32_MAX); RETURN(BINARY); }
#line 3809 "src/prebuilt/ast-lexer-gen.c"
yy546:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 353 "src/ast-lexer.c"
		{ OPCODE(F32_MIN); RETURN(BINARY); }
#line 3817 "src/prebuilt/ast-lexer-gen.c"
yy548:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 349 "src/ast-lexer.c"
		{ OPCODE(F32_MUL); RETURN(BINARY); }
#line 3825 "src/prebuilt/ast-lexer-gen.c"
yy550:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy686;
		goto yy50;
yy551:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 301 "src/ast-lexer.c"
		{ OPCODE(F32_NEG); RETURN(UNARY); }
#line 3837 "src/prebuilt/ast-lexer-gen.c"
yy553:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy687;
		goto yy50;
yy554:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy688;
		goto yy50;
yy555:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy690;
		goto yy50;
yy556:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 347 "src/ast-lexer.c"
		{ OPCODE(F32_SUB); RETURN(BINARY); }
#line 3857 "src/prebuilt/ast-lexer-gen.c"
yy558:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy691;
		goto yy50;
yy559:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 304 "src/ast-lexer.c"
		{ OPCODE(F64_ABS); RETURN(UNARY); }
#line 3869 "src/prebuilt/ast-lexer-gen.c"
yy561:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 346 "src/ast-lexer.c"
		{ OPCODE(F64_ADD); RETURN(BINARY); }
#line 3877 "src/prebuilt/ast-lexer-gen.c"
yy563:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy692;
		goto yy50;
yy564:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy694;
		if (yych == 'v') goto yy695;
		goto yy50;
yy565:
		yych = *++lexer->cursor;
		if (yych == 'y') goto yy696;
		goto yy50;
yy566:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 352 "src/ast-lexer.c"
		{ OPCODE(F64_DIV); RETURN(BINARY); }
#line 3898 "src/prebuilt/ast-lexer-gen.c"
yy568:
		yych = *++lexer->cursor;
		if (yych == 'o') goto yy697;
		goto yy50;
yy569:
		yych = *++lexer->cursor;
		if (yych == 'd') goto yy698;
		goto yy50;
yy570:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 356 "src/ast-lexer.c"
		{ OPCODE(F64_MAX); RETURN(BINARY); }
#line 3914 "src/prebuilt/ast-lexer-gen.c"
yy572:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 354 "src/ast-lexer.c"
		{ OPCODE(F64_MIN); RETURN(BINARY); }
#line 3922 "src/prebuilt/ast-lexer-gen.c"
yy574:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 350 "src/ast-lexer.c"
		{ OPCODE(F64_MUL); RETURN(BINARY); }
#line 3930 "src/prebuilt/ast-lexer-gen.c"
yy576:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy700;
		goto yy50;
yy577:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 302 "src/ast-lexer.c"
		{ OPCODE(F64_NEG); RETURN(UNARY); }
#line 3942 "src/prebuilt/ast-lexer-gen.c"
yy579:
		yych = *++lexer->cursor;
		if (yych == 'm') goto yy701;
		goto yy50;
yy580:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy702;
		goto yy50;
yy581:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy703;
		goto yy50;
yy582:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy705;
		goto yy50;
yy583:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 348 "src/ast-lexer.c"
		{ OPCODE(F64_SUB); RETURN(BINARY); }
#line 3966 "src/prebuilt/ast-lexer-gen.c"
yy585:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy706;
		goto yy50;
yy586:
		yych = *++lexer->cursor;
		if (yych == 'b') goto yy707;
		goto yy50;
yy587:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy708;
		goto yy50;
yy588:
		yych = *++lexer->cursor;
		if (yych == 'm') goto yy709;
		goto yy50;
yy589:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 315 "src/ast-lexer.c"
		{ OPCODE(I32_ADD); RETURN(BINARY); }
#line 3990 "src/prebuilt/ast-lexer-gen.c"
yy591:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 329 "src/ast-lexer.c"
		{ OPCODE(I32_AND); RETURN(BINARY); }
#line 3998 "src/prebuilt/ast-lexer-gen.c"
yy593:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 295 "src/ast-lexer.c"
		{ OPCODE(I32_CLZ); RETURN(UNARY); }
#line 4006 "src/prebuilt/ast-lexer-gen.c"
yy595:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy710;
		goto yy50;
yy596:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 297 "src/ast-lexer.c"
		{ OPCODE(I32_CTZ); RETURN(UNARY); }
#line 4018 "src/prebuilt/ast-lexer-gen.c"
yy598:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy711;
		goto yy50;
yy599:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 293 "src/ast-lexer.c"
		{ OPCODE(I32_EQZ); RETURN(CONVERT); }
#line 4030 "src/prebuilt/ast-lexer-gen.c"
yy601:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy712;
		if (yych == 'u') goto yy714;
		goto yy50;
yy602:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy716;
		if (yych == 'u') goto yy718;
		goto yy50;
yy603:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy720;
		if (yych == 'u') goto yy722;
		goto yy50;
yy604:
		yych = *++lexer->cursor;
		if (yych == 'd') goto yy724;
		goto yy50;
yy605:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy726;
		if (yych == 'u') goto yy728;
		goto yy50;
yy606:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 319 "src/ast-lexer.c"
		{ OPCODE(I32_MUL); RETURN(BINARY); }
#line 4062 "src/prebuilt/ast-lexer-gen.c"
yy608:
		yych = *++lexer->cursor;
		if (yych == 'c') goto yy730;
		goto yy50;
yy609:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy731;
		goto yy50;
yy610:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy732;
		goto yy50;
yy611:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy733;
		if (yych == 'r') goto yy735;
		goto yy50;
yy612:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 335 "src/ast-lexer.c"
		{ OPCODE(I32_SHL); RETURN(BINARY); }
#line 4087 "src/prebuilt/ast-lexer-gen.c"
yy614:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy737;
		goto yy50;
yy615:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy738;
		goto yy50;
yy616:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 317 "src/ast-lexer.c"
		{ OPCODE(I32_SUB); RETURN(BINARY); }
#line 4103 "src/prebuilt/ast-lexer-gen.c"
yy618:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy739;
		goto yy50;
yy619:
		yych = *++lexer->cursor;
		if (yych == 'p') goto yy740;
		goto yy50;
yy620:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 333 "src/ast-lexer.c"
		{ OPCODE(I32_XOR); RETURN(BINARY); }
#line 4119 "src/prebuilt/ast-lexer-gen.c"
yy622:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 316 "src/ast-lexer.c"
		{ OPCODE(I64_ADD); RETURN(BINARY); }
#line 4127 "src/prebuilt/ast-lexer-gen.c"
yy624:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 330 "src/ast-lexer.c"
		{ OPCODE(I64_AND); RETURN(BINARY); }
#line 4135 "src/prebuilt/ast-lexer-gen.c"
yy626:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 296 "src/ast-lexer.c"
		{ OPCODE(I64_CLZ); RETURN(UNARY); }
#line 4143 "src/prebuilt/ast-lexer-gen.c"
yy628:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy741;
		goto yy50;
yy629:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 298 "src/ast-lexer.c"
		{ OPCODE(I64_CTZ); RETURN(UNARY); }
#line 4155 "src/prebuilt/ast-lexer-gen.c"
yy631:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy742;
		goto yy50;
yy632:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 294 "src/ast-lexer.c"
		{ OPCODE(I64_EQZ); RETURN(CONVERT); }
#line 4167 "src/prebuilt/ast-lexer-gen.c"
yy634:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy743;
		goto yy50;
yy635:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy744;
		if (yych == 'u') goto yy746;
		goto yy50;
yy636:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy748;
		if (yych == 'u') goto yy750;
		goto yy50;
yy637:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy752;
		if (yych == 'u') goto yy754;
		goto yy50;
yy638:
		yych = *++lexer->cursor;
		if (yych == 'd') goto yy756;
		goto yy50;
yy639:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy758;
		if (yych == 'u') goto yy760;
		goto yy50;
yy640:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 320 "src/ast-lexer.c"
		{ OPCODE(I64_MUL); RETURN(BINARY); }
#line 4203 "src/prebuilt/ast-lexer-gen.c"
yy642:
		yych = *++lexer->cursor;
		if (yych == 'c') goto yy762;
		goto yy50;
yy643:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy763;
		goto yy50;
yy644:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy764;
		goto yy50;
yy645:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy765;
		if (yych == 'r') goto yy767;
		goto yy50;
yy646:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 336 "src/ast-lexer.c"
		{ OPCODE(I64_SHL); RETURN(BINARY); }
#line 4228 "src/prebuilt/ast-lexer-gen.c"
yy648:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy769;
		goto yy50;
yy649:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy770;
		goto yy50;
yy650:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 318 "src/ast-lexer.c"
		{ OPCODE(I64_SUB); RETURN(BINARY); }
#line 4244 "src/prebuilt/ast-lexer-gen.c"
yy652:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy771;
		goto yy50;
yy653:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 334 "src/ast-lexer.c"
		{ OPCODE(I64_XOR); RETURN(BINARY); }
#line 4256 "src/prebuilt/ast-lexer-gen.c"
yy655:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 246 "src/ast-lexer.c"
		{ RETURN(IF); }
#line 4264 "src/prebuilt/ast-lexer-gen.c"
yy657:
		yych = *++lexer->cursor;
		if (yych == 'y') goto yy772;
		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 yy773;
		if (yych <= '9') goto yy775;
		goto yy50;
yy661:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy777;
		goto yy50;
yy662:
		yych = *++lexer->cursor;
		if (yych == 'b') goto yy779;
		goto yy50;
yy663:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy780;
		goto yy50;
yy664:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy781;
		goto yy50;
yy665:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy782;
		goto yy50;
yy666:
		yych = *++lexer->cursor;
		if (yych <= '@') {
			if (yych <= '/') goto yy50;
			if (yych <= '9') goto yy783;
			goto yy50;
		} else {
			if (yych <= 'F') goto yy783;
			if (yych <= '`') goto yy50;
			if (yych <= 'f') goto yy783;
			goto yy50;
		}
yy667:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy785;
		goto yy50;
yy668:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy786;
		goto yy50;
yy669:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy787;
		goto yy50;
yy670:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy788;
		goto yy50;
yy671:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy789;
		goto yy50;
yy672:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 252 "src/ast-lexer.c"
		{ RETURN(BR_TABLE); }
#line 4380 "src/prebuilt/ast-lexer-gen.c"
yy674:
		yych = *++lexer->cursor;
		if (yych == 'o') goto yy790;
		goto yy50;
yy675:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy791;
		goto yy50;
yy676:
		yych = *++lexer->cursor;
		if (yych == 'm') goto yy792;
		goto yy50;
yy677:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 307 "src/ast-lexer.c"
		{ OPCODE(F32_CEIL); RETURN(UNARY); }
#line 4400 "src/prebuilt/ast-lexer-gen.c"
yy679:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy793;
		goto yy50;
yy680:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy795;
		goto yy50;
yy681:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy796;
		goto yy50;
yy682:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy797;
		goto yy50;
yy683:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy798;
		goto yy50;
yy684:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 266 "src/ast-lexer.c"
		{ OPCODE(F32_LOAD); RETURN(LOAD); }
#line 4428 "src/prebuilt/ast-lexer-gen.c"
yy686:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy800;
		goto yy50;
yy687:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy801;
		goto yy50;
yy688:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 305 "src/ast-lexer.c"
		{ OPCODE(F32_SQRT); RETURN(UNARY); }
#line 4444 "src/prebuilt/ast-lexer-gen.c"
yy690:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy802;
		goto yy50;
yy691:
		yych = *++lexer->cursor;
		if (yych == 'c') goto yy804;
		goto yy50;
yy692:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 308 "src/ast-lexer.c"
		{ OPCODE(F64_CEIL); RETURN(UNARY); }
#line 4460 "src/prebuilt/ast-lexer-gen.c"
yy694:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy806;
		goto yy50;
yy695:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy808;
		goto yy50;
yy696:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy809;
		goto yy50;
yy697:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy810;
		goto yy50;
yy698:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 267 "src/ast-lexer.c"
		{ OPCODE(F64_LOAD); RETURN(LOAD); }
#line 4484 "src/prebuilt/ast-lexer-gen.c"
yy700:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy812;
		goto yy50;
yy701:
		yych = *++lexer->cursor;
		if (yych == 'o') goto yy813;
		goto yy50;
yy702:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy814;
		goto yy50;
yy703:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 306 "src/ast-lexer.c"
		{ OPCODE(F64_SQRT); RETURN(UNARY); }
#line 4504 "src/prebuilt/ast-lexer-gen.c"
yy705:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy815;
		goto yy50;
yy706:
		yych = *++lexer->cursor;
		if (yych == 'c') goto yy817;
		goto yy50;
yy707:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy819;
		goto yy50;
yy708:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy820;
		goto yy50;
yy709:
		yych = *++lexer->cursor;
		if (yych == 'o') goto yy822;
		goto yy50;
yy710:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy823;
		goto yy50;
yy711:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy825;
		if (yych == 'u') goto yy827;
		goto yy50;
yy712:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 375 "src/ast-lexer.c"
		{ OPCODE(I32_GE_S); RETURN(COMPARE); }
#line 4541 "src/prebuilt/ast-lexer-gen.c"
yy714:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 377 "src/ast-lexer.c"
		{ OPCODE(I32_GE_U); RETURN(COMPARE); }
#line 4549 "src/prebuilt/ast-lexer-gen.c"
yy716:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 371 "src/ast-lexer.c"
		{ OPCODE(I32_GT_S); RETURN(COMPARE); }
#line 4557 "src/prebuilt/ast-lexer-gen.c"
yy718:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 373 "src/ast-lexer.c"
		{ OPCODE(I32_GT_U); RETURN(COMPARE); }
#line 4565 "src/prebuilt/ast-lexer-gen.c"
yy720:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 367 "src/ast-lexer.c"
		{ OPCODE(I32_LE_S); RETURN(COMPARE); }
#line 4573 "src/prebuilt/ast-lexer-gen.c"
yy722:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 369 "src/ast-lexer.c"
		{ OPCODE(I32_LE_U); RETURN(COMPARE); }
#line 4581 "src/prebuilt/ast-lexer-gen.c"
yy724:
		++lexer->cursor;
		if ((yych = *lexer->cursor) <= '8') {
			if (yych <= ')') {
				if (yych <= '!') {
					if (yych >= '!') goto yy49;
				} else {
					if (yych <= '"') goto yy725;
					if (yych <= '\'') goto yy49;
				}
			} else {
				if (yych <= '0') {
					if (yych != ',') goto yy49;
				} else {
					if (yych <= '1') goto yy829;
					if (yych <= '7') goto yy49;
					goto yy830;
				}
			}
		} 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;
				}
			}
		}
yy725:
#line 264 "src/ast-lexer.c"
		{ OPCODE(I32_LOAD); RETURN(LOAD); }
#line 4619 "src/prebuilt/ast-lexer-gen.c"
yy726:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 363 "src/ast-lexer.c"
		{ OPCODE(I32_LT_S); RETURN(COMPARE); }
#line 4627 "src/prebuilt/ast-lexer-gen.c"
yy728:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 365 "src/ast-lexer.c"
		{ OPCODE(I32_LT_U); RETURN(COMPARE); }
#line 4635 "src/prebuilt/ast-lexer-gen.c"
yy730:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy831;
		goto yy50;
yy731:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy832;
		goto yy50;
yy732:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy833;
		if (yych == 'u') goto yy835;
		goto yy50;
yy733:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 341 "src/ast-lexer.c"
		{ OPCODE(I32_ROTL); RETURN(BINARY); }
#line 4656 "src/prebuilt/ast-lexer-gen.c"
yy735:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 343 "src/ast-lexer.c"
		{ OPCODE(I32_ROTR); RETURN(BINARY); }
#line 4664 "src/prebuilt/ast-lexer-gen.c"
yy737:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy837;
		if (yych == 'u') goto yy839;
		goto yy50;
yy738:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy841;
		goto yy50;
yy739:
		yych = *++lexer->cursor;
		if (yych == 'c') goto yy843;
		goto yy50;
yy740:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy844;
		goto yy50;
yy741:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy845;
		goto yy50;
yy742:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy847;
		if (yych == 'u') goto yy849;
		goto yy50;
yy743:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy851;
		goto yy50;
yy744:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 376 "src/ast-lexer.c"
		{ OPCODE(I64_GE_S); RETURN(COMPARE); }
#line 4702 "src/prebuilt/ast-lexer-gen.c"
yy746:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 378 "src/ast-lexer.c"
		{ OPCODE(I64_GE_U); RETURN(COMPARE); }
#line 4710 "src/prebuilt/ast-lexer-gen.c"
yy748:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 372 "src/ast-lexer.c"
		{ OPCODE(I64_GT_S); RETURN(COMPARE); }
#line 4718 "src/prebuilt/ast-lexer-gen.c"
yy750:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 374 "src/ast-lexer.c"
		{ OPCODE(I64_GT_U); RETURN(COMPARE); }
#line 4726 "src/prebuilt/ast-lexer-gen.c"
yy752:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 368 "src/ast-lexer.c"
		{ OPCODE(I64_LE_S); RETURN(COMPARE); }
#line 4734 "src/prebuilt/ast-lexer-gen.c"
yy754:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 370 "src/ast-lexer.c"
		{ OPCODE(I64_LE_U); RETURN(COMPARE); }
#line 4742 "src/prebuilt/ast-lexer-gen.c"
yy756:
		++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 yy757;
					if (yych <= '0') goto yy49;
					goto yy852;
				} else {
					if (yych == '3') goto yy853;
					goto yy49;
				}
			}
		} else {
			if (yych <= '\\') {
				if (yych <= ';') {
					if (yych <= '8') goto yy854;
					if (yych <= ':') goto yy49;
				} else {
					if (yych != '[') goto yy49;
				}
			} else {
				if (yych <= '{') {
					if (yych <= ']') goto yy757;
					if (yych <= 'z') goto yy49;
				} else {
					if (yych == '}') goto yy757;
					if (yych <= '~') goto yy49;
				}
			}
		}
yy757:
#line 265 "src/ast-lexer.c"
		{ OPCODE(I64_LOAD); RETURN(LOAD); }
#line 4784 "src/prebuilt/ast-lexer-gen.c"
yy758:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 364 "src/ast-lexer.c"
		{ OPCODE(I64_LT_S); RETURN(COMPARE); }
#line 4792 "src/prebuilt/ast-lexer-gen.c"
yy760:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 366 "src/ast-lexer.c"
		{ OPCODE(I64_LT_U); RETURN(COMPARE); }
#line 4800 "src/prebuilt/ast-lexer-gen.c"
yy762:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy855;
		goto yy50;
yy763:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy856;
		goto yy50;
yy764:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy857;
		if (yych == 'u') goto yy859;
		goto yy50;
yy765:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 342 "src/ast-lexer.c"
		{ OPCODE(I64_ROTL); RETURN(BINARY); }
#line 4821 "src/prebuilt/ast-lexer-gen.c"
yy767:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 344 "src/ast-lexer.c"
		{ OPCODE(I64_ROTR); RETURN(BINARY); }
#line 4829 "src/prebuilt/ast-lexer-gen.c"
yy769:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy861;
		if (yych == 'u') goto yy863;
		goto yy50;
yy770:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy865;
		goto yy50;
yy771:
		yych = *++lexer->cursor;
		if (yych == 'c') goto yy867;
		goto yy50;
yy772:
		yych = *++lexer->cursor;
		if (yybm[0+yych] & 16) {
			goto yy49;
		}
		goto yy186;
yy773:
		++lexer->cursor;
		if ((yych = *lexer->cursor) <= ';') {
			if (yych <= ')') {
				if (yych <= '!') {
					if (yych >= '!') goto yy49;
				} else {
					if (yych <= '"') goto yy774;
					if (yych <= '\'') goto yy49;
				}
			} else {
				if (yych <= '/') {
					if (yych != ',') goto yy49;
				} else {
					if (yych <= '9') goto yy775;
					if (yych <= ':') goto yy49;
				}
			}
		} else {
			if (yych <= 'x') {
				if (yych <= '\\') {
					if (yych != '[') goto yy49;
				} else {
					if (yych <= ']') goto yy774;
					if (yych <= 'w') goto yy49;
					goto yy868;
				}
			} else {
				if (yych <= '|') {
					if (yych != '{') goto yy49;
				} else {
					if (yych == '~') goto yy49;
				}
			}
		}
yy774:
#line 287 "src/ast-lexer.c"
		{ TEXT_AT(7); RETURN(OFFSET_EQ_NAT); }
#line 4887 "src/prebuilt/ast-lexer-gen.c"
yy775:
		++lexer->cursor;
		if (lexer->limit <= lexer->cursor) FILL(1);
		yych = *lexer->cursor;
		if (yych <= ':') {
			if (yych <= ')') {
				if (yych <= '!') {
					if (yych <= ' ') goto yy774;
					goto yy49;
				} else {
					if (yych <= '"') goto yy774;
					if (yych <= '\'') goto yy49;
					goto yy774;
				}
			} else {
				if (yych <= ',') {
					if (yych <= '+') goto yy49;
					goto yy774;
				} else {
					if (yych <= '/') goto yy49;
					if (yych <= '9') goto yy775;
					goto yy49;
				}
			}
		} else {
			if (yych <= ']') {
				if (yych <= 'Z') {
					if (yych <= ';') goto yy774;
					goto yy49;
				} else {
					if (yych == '\\') goto yy49;
					goto yy774;
				}
			} else {
				if (yych <= '|') {
					if (yych == '{') goto yy774;
					goto yy49;
				} else {
					if (yych == '~') goto yy49;
					goto yy774;
				}
			}
		}
yy777:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 435 "src/ast-lexer.c"
		{ RETURN(REGISTER); }
#line 4938 "src/prebuilt/ast-lexer-gen.c"
yy779:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy869;
		goto yy50;
yy780:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy870;
		goto yy50;
yy781:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy872;
		goto yy50;
yy782:
		yych = *++lexer->cursor;
		if (yych == 'b') goto yy874;
		goto yy50;
yy783:
		++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 yy783;
				} else {
					if (yych == ';') goto yy522;
					goto yy49;
				}
			}
		} else {
			if (yych <= '`') {
				if (yych <= '[') {
					if (yych <= 'F') goto yy783;
					if (yych <= 'Z') goto yy49;
					goto yy522;
				} else {
					if (yych == ']') goto yy522;
					goto yy49;
				}
			} else {
				if (yych <= '{') {
					if (yych <= 'f') goto yy783;
					if (yych <= 'z') goto yy49;
					goto yy522;
				} else {
					if (yych == '}') goto yy522;
					if (yych <= '~') goto yy49;
					goto yy522;
				}
			}
		}
yy785:
		yych = *++lexer->cursor;
		if (yych == 'v') goto yy875;
		goto yy50;
yy786:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy876;
		goto yy50;
yy787:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy877;
		goto yy50;
yy788:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy878;
		goto yy50;
yy789:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy879;
		goto yy50;
yy790:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy880;
		goto yy50;
yy791:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy881;
		goto yy50;
yy792:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy882;
		goto yy50;
yy793:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 291 "src/ast-lexer.c"
		{ TYPE(F32); RETURN(CONST); }
#line 5040 "src/prebuilt/ast-lexer-gen.c"
yy795:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy883;
		goto yy50;
yy796:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy884;
		goto yy50;
yy797:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy885;
		goto yy50;
yy798:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 309 "src/ast-lexer.c"
		{ OPCODE(F32_FLOOR); RETURN(UNARY); }
#line 5060 "src/prebuilt/ast-lexer-gen.c"
yy800:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy886;
		goto yy50;
yy801:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy887;
		goto yy50;
yy802:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 270 "src/ast-lexer.c"
		{ OPCODE(F32_STORE); RETURN(STORE); }
#line 5076 "src/prebuilt/ast-lexer-gen.c"
yy804:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 311 "src/ast-lexer.c"
		{ OPCODE(F32_TRUNC); RETURN(UNARY); }
#line 5084 "src/prebuilt/ast-lexer-gen.c"
yy806:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 292 "src/ast-lexer.c"
		{ TYPE(F64); RETURN(CONST); }
#line 5092 "src/prebuilt/ast-lexer-gen.c"
yy808:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy888;
		goto yy50;
yy809:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy889;
		goto yy50;
yy810:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 310 "src/ast-lexer.c"
		{ OPCODE(F64_FLOOR); RETURN(UNARY); }
#line 5108 "src/prebuilt/ast-lexer-gen.c"
yy812:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy890;
		goto yy50;
yy813:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy891;
		goto yy50;
yy814:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy892;
		goto yy50;
yy815:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 271 "src/ast-lexer.c"
		{ OPCODE(F64_STORE); RETURN(STORE); }
#line 5128 "src/prebuilt/ast-lexer-gen.c"
yy817:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 312 "src/ast-lexer.c"
		{ OPCODE(F64_TRUNC); RETURN(UNARY); }
#line 5136 "src/prebuilt/ast-lexer-gen.c"
yy819:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy893;
		goto yy50;
yy820:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 259 "src/ast-lexer.c"
		{ RETURN(GET_LOCAL); }
#line 5148 "src/prebuilt/ast-lexer-gen.c"
yy822:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy895;
		goto yy50;
yy823:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 289 "src/ast-lexer.c"
		{ TYPE(I32); RETURN(CONST); }
#line 5160 "src/prebuilt/ast-lexer-gen.c"
yy825:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 321 "src/ast-lexer.c"
		{ OPCODE(I32_DIV_S); RETURN(BINARY); }
#line 5168 "src/prebuilt/ast-lexer-gen.c"
yy827:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 323 "src/ast-lexer.c"
		{ OPCODE(I32_DIV_U); RETURN(BINARY); }
#line 5176 "src/prebuilt/ast-lexer-gen.c"
yy829:
		yych = *++lexer->cursor;
		if (yych == '6') goto yy896;
		goto yy50;
yy830:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy897;
		goto yy50;
yy831:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy898;
		goto yy50;
yy832:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy900;
		goto yy50;
yy833:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 325 "src/ast-lexer.c"
		{ OPCODE(I32_REM_S); RETURN(BINARY); }
#line 5200 "src/prebuilt/ast-lexer-gen.c"
yy835:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 327 "src/ast-lexer.c"
		{ OPCODE(I32_REM_U); RETURN(BINARY); }
#line 5208 "src/prebuilt/ast-lexer-gen.c"
yy837:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 337 "src/ast-lexer.c"
		{ OPCODE(I32_SHR_S); RETURN(BINARY); }
#line 5216 "src/prebuilt/ast-lexer-gen.c"
yy839:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 339 "src/ast-lexer.c"
		{ OPCODE(I32_SHR_U); RETURN(BINARY); }
#line 5224 "src/prebuilt/ast-lexer-gen.c"
yy841:
		++lexer->cursor;
		if ((yych = *lexer->cursor) <= '8') {
			if (yych <= ')') {
				if (yych <= '!') {
					if (yych >= '!') goto yy49;
				} else {
					if (yych <= '"') goto yy842;
					if (yych <= '\'') goto yy49;
				}
			} else {
				if (yych <= '0') {
					if (yych != ',') goto yy49;
				} else {
					if (yych <= '1') goto yy901;
					if (yych <= '7') goto yy49;
					goto yy902;
				}
			}
		} 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;
				}
			}
		}
yy842:
#line 268 "src/ast-lexer.c"
		{ OPCODE(I32_STORE); RETURN(STORE); }
#line 5262 "src/prebuilt/ast-lexer-gen.c"
yy843:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy904;
		goto yy50;
yy844:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy905;
		goto yy50;
yy845:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 290 "src/ast-lexer.c"
		{ TYPE(I64); RETURN(CONST); }
#line 5278 "src/prebuilt/ast-lexer-gen.c"
yy847:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 322 "src/ast-lexer.c"
		{ OPCODE(I64_DIV_S); RETURN(BINARY); }
#line 5286 "src/prebuilt/ast-lexer-gen.c"
yy849:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 324 "src/ast-lexer.c"
		{ OPCODE(I64_DIV_U); RETURN(BINARY); }
#line 5294 "src/prebuilt/ast-lexer-gen.c"
yy851:
		yych = *++lexer->cursor;
		if (yych == 'd') goto yy906;
		goto yy50;
yy852:
		yych = *++lexer->cursor;
		if (yych == '6') goto yy907;
		goto yy50;
yy853:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy908;
		goto yy50;
yy854:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy909;
		goto yy50;
yy855:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy910;
		goto yy50;
yy856:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy912;
		goto yy50;
yy857:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 326 "src/ast-lexer.c"
		{ OPCODE(I64_REM_S); RETURN(BINARY); }
#line 5326 "src/prebuilt/ast-lexer-gen.c"
yy859:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 328 "src/ast-lexer.c"
		{ OPCODE(I64_REM_U); RETURN(BINARY); }
#line 5334 "src/prebuilt/ast-lexer-gen.c"
yy861:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 338 "src/ast-lexer.c"
		{ OPCODE(I64_SHR_S); RETURN(BINARY); }
#line 5342 "src/prebuilt/ast-lexer-gen.c"
yy863:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 340 "src/ast-lexer.c"
		{ OPCODE(I64_SHR_U); RETURN(BINARY); }
#line 5350 "src/prebuilt/ast-lexer-gen.c"
yy865:
		++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 yy866;
					if (yych <= '0') goto yy49;
					goto yy913;
				} else {
					if (yych == '3') goto yy914;
					goto yy49;
				}
			}
		} else {
			if (yych <= '\\') {
				if (yych <= ';') {
					if (yych <= '8') goto yy915;
					if (yych <= ':') goto yy49;
				} else {
					if (yych != '[') goto yy49;
				}
			} else {
				if (yych <= '{') {
					if (yych <= ']') goto yy866;
					if (yych <= 'z') goto yy49;
				} else {
					if (yych == '}') goto yy866;
					if (yych <= '~') goto yy49;
				}
			}
		}
yy866:
#line 269 "src/ast-lexer.c"
		{ OPCODE(I64_STORE); RETURN(STORE); }
#line 5392 "src/prebuilt/ast-lexer-gen.c"
yy867:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy917;
		goto yy50;
yy868:
		yych = *++lexer->cursor;
		if (yych <= '@') {
			if (yych <= '/') goto yy50;
			if (yych <= '9') goto yy918;
			goto yy50;
		} else {
			if (yych <= 'F') goto yy918;
			if (yych <= '`') goto yy50;
			if (yych <= 'f') goto yy918;
			goto yy50;
		}
yy869:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy920;
		goto yy50;
yy870:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 260 "src/ast-lexer.c"
		{ RETURN(SET_LOCAL); }
#line 5420 "src/prebuilt/ast-lexer-gen.c"
yy872:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 261 "src/ast-lexer.c"
		{ RETURN(TEE_LOCAL); }
#line 5428 "src/prebuilt/ast-lexer-gen.c"
yy874:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy922;
		goto yy50;
yy875:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy923;
		goto yy50;
yy876:
		yych = *++lexer->cursor;
		if (yych == 'f') goto yy924;
		goto yy50;
yy877:
		yych = *++lexer->cursor;
		if (yych == 'u') goto yy925;
		goto yy50;
yy878:
		yych = *++lexer->cursor;
		if (yych == 'p') goto yy926;
		goto yy50;
yy879:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy928;
		goto yy50;
yy880:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy929;
		goto yy50;
yy881:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy931;
		goto yy50;
yy882:
		yych = *++lexer->cursor;
		if (yych == 'm') goto yy932;
		goto yy50;
yy883:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy933;
		goto yy50;
yy884:
		yych = *++lexer->cursor;
		if (yych == 'g') goto yy934;
		goto yy50;
yy885:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy935;
		goto yy50;
yy886:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy936;
		goto yy50;
yy887:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy938;
		goto yy50;
yy888:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy939;
		goto yy50;
yy889:
		yych = *++lexer->cursor;
		if (yych == 'g') goto yy940;
		goto yy50;
yy890:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy941;
		goto yy50;
yy891:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy943;
		goto yy50;
yy892:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy944;
		goto yy50;
yy893:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 262 "src/ast-lexer.c"
		{ RETURN(GET_GLOBAL); }
#line 5512 "src/prebuilt/ast-lexer-gen.c"
yy895:
		yych = *++lexer->cursor;
		if (yych == 'y') goto yy945;
		goto yy50;
yy896:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy947;
		goto yy50;
yy897:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy948;
		if (yych == 'u') goto yy950;
		goto yy50;
yy898:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 299 "src/ast-lexer.c"
		{ OPCODE(I32_POPCNT); RETURN(UNARY); }
#line 5533 "src/prebuilt/ast-lexer-gen.c"
yy900:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy952;
		goto yy50;
yy901:
		yych = *++lexer->cursor;
		if (yych == '6') goto yy953;
		goto yy50;
yy902:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 282 "src/ast-lexer.c"
		{ OPCODE(I32_STORE8); RETURN(STORE); }
#line 5549 "src/prebuilt/ast-lexer-gen.c"
yy904:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy955;
		if (yych == 'u') goto yy956;
		goto yy50;
yy905:
		yych = *++lexer->cursor;
		if (yych == '6') goto yy957;
		goto yy50;
yy906:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy958;
		goto yy50;
yy907:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy959;
		goto yy50;
yy908:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy960;
		goto yy50;
yy909:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy961;
		if (yych == 'u') goto yy963;
		goto yy50;
yy910:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 300 "src/ast-lexer.c"
		{ OPCODE(I64_POPCNT); RETURN(UNARY); }
#line 5583 "src/prebuilt/ast-lexer-gen.c"
yy912:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy965;
		goto yy50;
yy913:
		yych = *++lexer->cursor;
		if (yych == '6') goto yy966;
		goto yy50;
yy914:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy968;
		goto yy50;
yy915:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 283 "src/ast-lexer.c"
		{ OPCODE(I64_STORE8); RETURN(STORE); }
#line 5603 "src/prebuilt/ast-lexer-gen.c"
yy917:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy970;
		if (yych == 'u') goto yy971;
		goto yy50;
yy918:
		++lexer->cursor;
		if (lexer->limit <= lexer->cursor) FILL(1);
		yych = *lexer->cursor;
		if (yych <= '@') {
			if (yych <= '+') {
				if (yych <= '"') {
					if (yych == '!') goto yy49;
					goto yy774;
				} else {
					if (yych <= '\'') goto yy49;
					if (yych <= ')') goto yy774;
					goto yy49;
				}
			} else {
				if (yych <= '9') {
					if (yych <= ',') goto yy774;
					if (yych <= '/') goto yy49;
					goto yy918;
				} else {
					if (yych == ';') goto yy774;
					goto yy49;
				}
			}
		} else {
			if (yych <= '`') {
				if (yych <= '[') {
					if (yych <= 'F') goto yy918;
					if (yych <= 'Z') goto yy49;
					goto yy774;
				} else {
					if (yych == ']') goto yy774;
					goto yy49;
				}
			} else {
				if (yych <= '{') {
					if (yych <= 'f') goto yy918;
					if (yych <= 'z') goto yy49;
					goto yy774;
				} else {
					if (yych == '}') goto yy774;
					if (yych <= '~') goto yy49;
					goto yy774;
				}
			}
		}
yy920:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 263 "src/ast-lexer.c"
		{ RETURN(SET_GLOBAL); }
#line 5662 "src/prebuilt/ast-lexer-gen.c"
yy922:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy972;
		goto yy50;
yy923:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy974;
		goto yy50;
yy924:
		yych = *++lexer->cursor;
		if (yych == 'o') goto yy975;
		goto yy50;
yy925:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy976;
		goto yy50;
yy926:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 443 "src/ast-lexer.c"
		{ RETURN(ASSERT_TRAP); }
#line 5686 "src/prebuilt/ast-lexer-gen.c"
yy928:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy977;
		goto yy50;
yy929:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 254 "src/ast-lexer.c"
		{ RETURN(CALL_IMPORT); }
#line 5698 "src/prebuilt/ast-lexer-gen.c"
yy931:
		yych = *++lexer->cursor;
		if (yych == 'c') goto yy978;
		goto yy50;
yy932:
		yych = *++lexer->cursor;
		if (yych == 'o') goto yy979;
		goto yy50;
yy933:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy980;
		goto yy50;
yy934:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy981;
		goto yy50;
yy935:
		yych = *++lexer->cursor;
		if (yych == 'f') goto yy983;
		goto yy50;
yy936:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 313 "src/ast-lexer.c"
		{ OPCODE(F32_NEAREST); RETURN(UNARY); }
#line 5726 "src/prebuilt/ast-lexer-gen.c"
yy938:
		yych = *++lexer->cursor;
		if (yych == 'p') goto yy984;
		goto yy50;
yy939:
		yych = *++lexer->cursor;
		if (yych == '_') goto yy985;
		goto yy50;
yy940:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy986;
		goto yy50;
yy941:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 314 "src/ast-lexer.c"
		{ OPCODE(F64_NEAREST); RETURN(UNARY); }
#line 5746 "src/prebuilt/ast-lexer-gen.c"
yy943:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy988;
		goto yy50;
yy944:
		yych = *++lexer->cursor;
		if (yych == 'p') goto yy989;
		goto yy50;
yy945:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 419 "src/ast-lexer.c"
		{ RETURN(GROW_MEMORY); }
#line 5762 "src/prebuilt/ast-lexer-gen.c"
yy947:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy990;
		if (yych == 'u') goto yy992;
		goto yy50;
yy948:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 272 "src/ast-lexer.c"
		{ OPCODE(I32_LOAD8_S); RETURN(LOAD); }
#line 5775 "src/prebuilt/ast-lexer-gen.c"
yy950:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 274 "src/ast-lexer.c"
		{ OPCODE(I32_LOAD8_U); RETURN(LOAD); }
#line 5783 "src/prebuilt/ast-lexer-gen.c"
yy952:
		yych = *++lexer->cursor;
		if (yych == 'p') goto yy994;
		goto yy50;
yy953:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 284 "src/ast-lexer.c"
		{ OPCODE(I32_STORE16); RETURN(STORE); }
#line 5795 "src/prebuilt/ast-lexer-gen.c"
yy955:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy995;
		goto yy50;
yy956:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy996;
		goto yy50;
yy957:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy997;
		goto yy50;
yy958:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy999;
		if (yych == 'u') goto yy1000;
		goto yy50;
yy959:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy1001;
		if (yych == 'u') goto yy1003;
		goto yy50;
yy960:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy1005;
		if (yych == 'u') goto yy1007;
		goto yy50;
yy961:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 273 "src/ast-lexer.c"
		{ OPCODE(I64_LOAD8_S); RETURN(LOAD); }
#line 5830 "src/prebuilt/ast-lexer-gen.c"
yy963:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 275 "src/ast-lexer.c"
		{ OPCODE(I64_LOAD8_U); RETURN(LOAD); }
#line 5838 "src/prebuilt/ast-lexer-gen.c"
yy965:
		yych = *++lexer->cursor;
		if (yych == 'p') goto yy1009;
		goto yy50;
yy966:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 285 "src/ast-lexer.c"
		{ OPCODE(I64_STORE16); RETURN(STORE); }
#line 5850 "src/prebuilt/ast-lexer-gen.c"
yy968:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 286 "src/ast-lexer.c"
		{ OPCODE(I64_STORE32); RETURN(STORE); }
#line 5858 "src/prebuilt/ast-lexer-gen.c"
yy970:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1010;
		goto yy50;
yy971:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1011;
		goto yy50;
yy972:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 417 "src/ast-lexer.c"
		{ RETURN(UNREACHABLE); }
#line 5874 "src/prebuilt/ast-lexer-gen.c"
yy974:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy1012;
		goto yy50;
yy975:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy1013;
		goto yy50;
yy976:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy1014;
		goto yy50;
yy977:
		yych = *++lexer->cursor;
		if (yych == 'k') goto yy1016;
		goto yy50;
yy978:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy1017;
		goto yy50;
yy979:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy1019;
		goto yy50;
yy980:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy1020;
		if (yych == 'u') goto yy1021;
		goto yy50;
yy981:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 357 "src/ast-lexer.c"
		{ OPCODE(F32_COPYSIGN); RETURN(BINARY); }
#line 5911 "src/prebuilt/ast-lexer-gen.c"
yy983:
		yych = *++lexer->cursor;
		if (yych == '6') goto yy1022;
		goto yy50;
yy984:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy1023;
		goto yy50;
yy985:
		yych = *++lexer->cursor;
		if (yych == 's') goto yy1024;
		if (yych == 'u') goto yy1025;
		goto yy50;
yy986:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 358 "src/ast-lexer.c"
		{ OPCODE(F64_COPYSIGN); RETURN(BINARY); }
#line 5932 "src/prebuilt/ast-lexer-gen.c"
yy988:
		yych = *++lexer->cursor;
		if (yych == 'f') goto yy1026;
		goto yy50;
yy989:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy1027;
		goto yy50;
yy990:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 276 "src/ast-lexer.c"
		{ OPCODE(I32_LOAD16_S); RETURN(LOAD); }
#line 5948 "src/prebuilt/ast-lexer-gen.c"
yy992:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 278 "src/ast-lexer.c"
		{ OPCODE(I32_LOAD16_U); RETURN(LOAD); }
#line 5956 "src/prebuilt/ast-lexer-gen.c"
yy994:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy1028;
		goto yy50;
yy995:
		yych = *++lexer->cursor;
		if (yych == 'f') goto yy1029;
		goto yy50;
yy996:
		yych = *++lexer->cursor;
		if (yych == 'f') goto yy1030;
		goto yy50;
yy997:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 393 "src/ast-lexer.c"
		{ OPCODE(I32_WRAP_I64); RETURN(CONVERT); }
#line 5976 "src/prebuilt/ast-lexer-gen.c"
yy999:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1031;
		goto yy50;
yy1000:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1032;
		goto yy50;
yy1001:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 277 "src/ast-lexer.c"
		{ OPCODE(I64_LOAD16_S); RETURN(LOAD); }
#line 5992 "src/prebuilt/ast-lexer-gen.c"
yy1003:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 279 "src/ast-lexer.c"
		{ OPCODE(I64_LOAD16_U); RETURN(LOAD); }
#line 6000 "src/prebuilt/ast-lexer-gen.c"
yy1005:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 280 "src/ast-lexer.c"
		{ OPCODE(I64_LOAD32_S); RETURN(LOAD); }
#line 6008 "src/prebuilt/ast-lexer-gen.c"
yy1007:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 281 "src/ast-lexer.c"
		{ OPCODE(I64_LOAD32_U); RETURN(LOAD); }
#line 6016 "src/prebuilt/ast-lexer-gen.c"
yy1009:
		yych = *++lexer->cursor;
		if (yych == 'r') goto yy1033;
		goto yy50;
yy1010:
		yych = *++lexer->cursor;
		if (yych == 'f') goto yy1034;
		goto yy50;
yy1011:
		yych = *++lexer->cursor;
		if (yych == 'f') goto yy1035;
		goto yy50;
yy1012:
		yych = *++lexer->cursor;
		if (yych == 'd') goto yy1036;
		goto yy50;
yy1013:
		yych = *++lexer->cursor;
		if (yych == 'm') goto yy1038;
		goto yy50;
yy1014:
		++lexer->cursor;
		if ((yych = *lexer->cursor) <= 'Z') {
			if (yych <= ')') {
				if (yych <= '!') {
					if (yych >= '!') goto yy49;
				} else {
					if (yych <= '"') goto yy1015;
					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 yy1015;
					if (yych <= '^') goto yy49;
					goto yy1039;
				}
			} else {
				if (yych <= '|') {
					if (yych != '{') goto yy49;
				} else {
					if (yych == '~') goto yy49;
				}
			}
		}
yy1015:
#line 441 "src/ast-lexer.c"
		{ RETURN(ASSERT_RETURN); }
#line 6074 "src/prebuilt/ast-lexer-gen.c"
yy1016:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy1040;
		goto yy50;
yy1017:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 255 "src/ast-lexer.c"
		{ RETURN(CALL_INDIRECT); }
#line 6086 "src/prebuilt/ast-lexer-gen.c"
yy1019:
		yych = *++lexer->cursor;
		if (yych == 'y') goto yy1041;
		goto yy50;
yy1020:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1043;
		goto yy50;
yy1021:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1044;
		goto yy50;
yy1022:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1045;
		goto yy50;
yy1023:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy1047;
		goto yy50;
yy1024:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1048;
		goto yy50;
yy1025:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1049;
		goto yy50;
yy1026:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1050;
		goto yy50;
yy1027:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy1051;
		goto yy50;
yy1028:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy1052;
		goto yy50;
yy1029:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1053;
		if (yych == '6') goto yy1054;
		goto yy50;
yy1030:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1055;
		if (yych == '6') goto yy1056;
		goto yy50;
yy1031:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy1057;
		goto yy50;
yy1032:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy1058;
		goto yy50;
yy1033:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy1059;
		goto yy50;
yy1034:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1060;
		if (yych == '6') goto yy1061;
		goto yy50;
yy1035:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1062;
		if (yych == '6') goto yy1063;
		goto yy50;
yy1036:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 439 "src/ast-lexer.c"
		{ RETURN(ASSERT_INVALID); }
#line 6166 "src/prebuilt/ast-lexer-gen.c"
yy1038:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy1064;
		goto yy50;
yy1039:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy1065;
		goto yy50;
yy1040:
		yych = *++lexer->cursor;
		if (yych == 'b') goto yy1066;
		goto yy50;
yy1041:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 418 "src/ast-lexer.c"
		{ RETURN(CURRENT_MEMORY); }
#line 6186 "src/prebuilt/ast-lexer-gen.c"
yy1043:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy1067;
		goto yy50;
yy1044:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy1068;
		goto yy50;
yy1045:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 411 "src/ast-lexer.c"
		{ OPCODE(F32_DEMOTE_F64); RETURN(CONVERT); }
#line 6202 "src/prebuilt/ast-lexer-gen.c"
yy1047:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy1069;
		goto yy50;
yy1048:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy1070;
		goto yy50;
yy1049:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy1071;
		goto yy50;
yy1050:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1072;
		goto yy50;
yy1051:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy1074;
		goto yy50;
yy1052:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy1075;
		goto yy50;
yy1053:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1076;
		goto yy50;
yy1054:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1078;
		goto yy50;
yy1055:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1080;
		goto yy50;
yy1056:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1082;
		goto yy50;
yy1057:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1084;
		goto yy50;
yy1058:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1085;
		goto yy50;
yy1059:
		yych = *++lexer->cursor;
		if (yych == 't') goto yy1086;
		goto yy50;
yy1060:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1087;
		goto yy50;
yy1061:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1089;
		goto yy50;
yy1062:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1091;
		goto yy50;
yy1063:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1093;
		goto yy50;
yy1064:
		yych = *++lexer->cursor;
		if (yych == 'd') goto yy1095;
		goto yy50;
yy1065:
		yych = *++lexer->cursor;
		if (yych == 'a') goto yy1097;
		goto yy50;
yy1066:
		yych = *++lexer->cursor;
		if (yych == 'l') goto yy1098;
		goto yy50;
yy1067:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1099;
		if (yych == '6') goto yy1100;
		goto yy50;
yy1068:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1101;
		if (yych == '6') goto yy1102;
		goto yy50;
yy1069:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1103;
		goto yy50;
yy1070:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1104;
		if (yych == '6') goto yy1105;
		goto yy50;
yy1071:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1106;
		if (yych == '6') goto yy1107;
		goto yy50;
yy1072:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 410 "src/ast-lexer.c"
		{ OPCODE(F64_PROMOTE_F32); RETURN(CONVERT); }
#line 6314 "src/prebuilt/ast-lexer-gen.c"
yy1074:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1108;
		goto yy50;
yy1075:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1109;
		goto yy50;
yy1076:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 394 "src/ast-lexer.c"
		{ OPCODE(I32_TRUNC_S_F32); RETURN(CONVERT); }
#line 6330 "src/prebuilt/ast-lexer-gen.c"
yy1078:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 396 "src/ast-lexer.c"
		{ OPCODE(I32_TRUNC_S_F64); RETURN(CONVERT); }
#line 6338 "src/prebuilt/ast-lexer-gen.c"
yy1080:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 398 "src/ast-lexer.c"
		{ OPCODE(I32_TRUNC_U_F32); RETURN(CONVERT); }
#line 6346 "src/prebuilt/ast-lexer-gen.c"
yy1082:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 400 "src/ast-lexer.c"
		{ OPCODE(I32_TRUNC_U_F64); RETURN(CONVERT); }
#line 6354 "src/prebuilt/ast-lexer-gen.c"
yy1084:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1110;
		goto yy50;
yy1085:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1112;
		goto yy50;
yy1086:
		yych = *++lexer->cursor;
		if (yych == '/') goto yy1114;
		goto yy50;
yy1087:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 395 "src/ast-lexer.c"
		{ OPCODE(I64_TRUNC_S_F32); RETURN(CONVERT); }
#line 6374 "src/prebuilt/ast-lexer-gen.c"
yy1089:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 397 "src/ast-lexer.c"
		{ OPCODE(I64_TRUNC_S_F64); RETURN(CONVERT); }
#line 6382 "src/prebuilt/ast-lexer-gen.c"
yy1091:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 399 "src/ast-lexer.c"
		{ OPCODE(I64_TRUNC_U_F32); RETURN(CONVERT); }
#line 6390 "src/prebuilt/ast-lexer-gen.c"
yy1093:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 401 "src/ast-lexer.c"
		{ OPCODE(I64_TRUNC_U_F64); RETURN(CONVERT); }
#line 6398 "src/prebuilt/ast-lexer-gen.c"
yy1095:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 438 "src/ast-lexer.c"
		{ RETURN(ASSERT_MALFORMED); }
#line 6406 "src/prebuilt/ast-lexer-gen.c"
yy1097:
		yych = *++lexer->cursor;
		if (yych == 'n') goto yy1115;
		goto yy50;
yy1098:
		yych = *++lexer->cursor;
		if (yych == 'e') goto yy1117;
		goto yy50;
yy1099:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1119;
		goto yy50;
yy1100:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1121;
		goto yy50;
yy1101:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1123;
		goto yy50;
yy1102:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1125;
		goto yy50;
yy1103:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy1127;
		goto yy50;
yy1104:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1128;
		goto yy50;
yy1105:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1130;
		goto yy50;
yy1106:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1132;
		goto yy50;
yy1107:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1134;
		goto yy50;
yy1108:
		yych = *++lexer->cursor;
		if (yych == 'i') goto yy1136;
		goto yy50;
yy1109:
		yych = *++lexer->cursor;
		if (yych == 'f') goto yy1137;
		goto yy50;
yy1110:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 391 "src/ast-lexer.c"
		{ OPCODE(I64_EXTEND_S_I32); RETURN(CONVERT); }
#line 6466 "src/prebuilt/ast-lexer-gen.c"
yy1112:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 392 "src/ast-lexer.c"
		{ OPCODE(I64_EXTEND_U_I32); RETURN(CONVERT); }
#line 6474 "src/prebuilt/ast-lexer-gen.c"
yy1114:
		yych = *++lexer->cursor;
		if (yych == 'f') goto yy1138;
		goto yy50;
yy1115:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 442 "src/ast-lexer.c"
		{ RETURN(ASSERT_RETURN_NAN); }
#line 6486 "src/prebuilt/ast-lexer-gen.c"
yy1117:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 440 "src/ast-lexer.c"
		{ RETURN(ASSERT_UNLINKABLE); }
#line 6494 "src/prebuilt/ast-lexer-gen.c"
yy1119:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 402 "src/ast-lexer.c"
		{ OPCODE(F32_CONVERT_S_I32); RETURN(CONVERT); }
#line 6502 "src/prebuilt/ast-lexer-gen.c"
yy1121:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 404 "src/ast-lexer.c"
		{ OPCODE(F32_CONVERT_S_I64); RETURN(CONVERT); }
#line 6510 "src/prebuilt/ast-lexer-gen.c"
yy1123:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 406 "src/ast-lexer.c"
		{ OPCODE(F32_CONVERT_U_I32); RETURN(CONVERT); }
#line 6518 "src/prebuilt/ast-lexer-gen.c"
yy1125:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 408 "src/ast-lexer.c"
		{ OPCODE(F32_CONVERT_U_I64); RETURN(CONVERT); }
#line 6526 "src/prebuilt/ast-lexer-gen.c"
yy1127:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1139;
		goto yy50;
yy1128:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 403 "src/ast-lexer.c"
		{ OPCODE(F64_CONVERT_S_I32); RETURN(CONVERT); }
#line 6538 "src/prebuilt/ast-lexer-gen.c"
yy1130:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 405 "src/ast-lexer.c"
		{ OPCODE(F64_CONVERT_S_I64); RETURN(CONVERT); }
#line 6546 "src/prebuilt/ast-lexer-gen.c"
yy1132:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 407 "src/ast-lexer.c"
		{ OPCODE(F64_CONVERT_U_I32); RETURN(CONVERT); }
#line 6554 "src/prebuilt/ast-lexer-gen.c"
yy1134:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 409 "src/ast-lexer.c"
		{ OPCODE(F64_CONVERT_U_I64); RETURN(CONVERT); }
#line 6562 "src/prebuilt/ast-lexer-gen.c"
yy1136:
		yych = *++lexer->cursor;
		if (yych == '6') goto yy1140;
		goto yy50;
yy1137:
		yych = *++lexer->cursor;
		if (yych == '3') goto yy1141;
		goto yy50;
yy1138:
		yych = *++lexer->cursor;
		if (yych == '6') goto yy1142;
		goto yy50;
yy1139:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1143;
		goto yy50;
yy1140:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1145;
		goto yy50;
yy1141:
		yych = *++lexer->cursor;
		if (yych == '2') goto yy1147;
		goto yy50;
yy1142:
		yych = *++lexer->cursor;
		if (yych == '4') goto yy1149;
		goto yy50;
yy1143:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 412 "src/ast-lexer.c"
		{ OPCODE(F32_REINTERPRET_I32); RETURN(CONVERT); }
#line 6598 "src/prebuilt/ast-lexer-gen.c"
yy1145:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 414 "src/ast-lexer.c"
		{ OPCODE(F64_REINTERPRET_I64); RETURN(CONVERT); }
#line 6606 "src/prebuilt/ast-lexer-gen.c"
yy1147:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 413 "src/ast-lexer.c"
		{ OPCODE(I32_REINTERPRET_F32); RETURN(CONVERT); }
#line 6614 "src/prebuilt/ast-lexer-gen.c"
yy1149:
		++lexer->cursor;
		if (yybm[0+(yych = *lexer->cursor)] & 16) {
			goto yy49;
		}
#line 415 "src/ast-lexer.c"
		{ OPCODE(I64_REINTERPRET_F64); RETURN(CONVERT); }
#line 6622 "src/prebuilt/ast-lexer-gen.c"
	}
}
#line 466 "src/ast-lexer.c"

  }
}

static WasmAstLexer* wasm_new_lexer(WasmAllocator* allocator,
                                    WasmAstLexerSourceType type,
                                    const char* filename) {
  WasmAstLexer* lexer =
      wasm_alloc_zero(allocator, sizeof(WasmAstLexer), WASM_DEFAULT_ALIGN);
  lexer->allocator = allocator;
  lexer->line = 1;
  lexer->filename = filename;
  lexer->source.type = type;
  return lexer;
}

WasmAstLexer* wasm_new_ast_file_lexer(WasmAllocator* allocator,
                                      const char* filename) {
  WasmAstLexer* lexer =
      wasm_new_lexer(allocator, WASM_LEXER_SOURCE_TYPE_FILE, filename);
  lexer->source.file = fopen(filename, "rb");
  if (!lexer->source.file) {
    wasm_destroy_ast_lexer(lexer);
    return NULL;
  }
  return lexer;
}

WasmAstLexer* wasm_new_ast_buffer_lexer(WasmAllocator* allocator,
                                        const char* filename,
                                        const void* data,
                                        size_t size) {
  WasmAstLexer* lexer =
      wasm_new_lexer(allocator, WASM_LEXER_SOURCE_TYPE_BUFFER, filename);
  lexer->source.buffer.data = data;
  lexer->source.buffer.size = size;
  lexer->source.buffer.read_offset = 0;
  return lexer;
}

void wasm_destroy_ast_lexer(WasmAstLexer* lexer) {
  if (lexer->source.type == WASM_LEXER_SOURCE_TYPE_FILE && lexer->source.file)
    fclose(lexer->source.file);
  wasm_free(lexer->allocator, lexer->buffer);
  wasm_free(lexer->allocator, lexer);
}

WasmAllocator* wasm_ast_lexer_get_allocator(WasmAstLexer* lexer) {
  return lexer->allocator;
}

typedef enum WasmLineOffsetPosition {
  WASM_LINE_OFFSET_POSITION_START,
  WASM_LINE_OFFSET_POSITION_END,
} WasmLineOffsetPosition;

static WasmResult scan_forward_for_line_offset_in_buffer(
    const char* buffer_start,
    const char* buffer_end,
    int buffer_line,
    size_t buffer_file_offset,
    WasmLineOffsetPosition find_position,
    int find_line,
    int* out_line,
    size_t* out_line_offset) {
  int line = buffer_line;
  int line_offset = 0;
  const char* p;
  WasmBool is_previous_carriage = 0;
  for (p = buffer_start; p < buffer_end; ++p) {
    if (*p == '\n') {
      if (find_position == WASM_LINE_OFFSET_POSITION_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';
  }

  WasmResult result = WASM_OK;
  if (p == buffer_end) {
    /* end of buffer */
    if (find_position == WASM_LINE_OFFSET_POSITION_START) {
      result = WASM_ERROR;
    } else {
      line_offset = buffer_file_offset + (buffer_end - buffer_start);
    }
  }

  *out_line = line;
  *out_line_offset = line_offset;
  return result;
}

static WasmResult scan_forward_for_line_offset_in_file(
    WasmAstLexer* lexer,
    int line,
    size_t line_start_offset,
    WasmLineOffsetPosition find_position,
    int find_line,
    size_t* out_line_offset) {
  FILE* lexer_file = lexer->source.file;
  WasmResult result = WASM_ERROR;
  long old_offset = ftell(lexer_file);
  if (old_offset == -1)
    return WASM_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 = WASM_ARRAY_SIZE(buffer);
    size_t read_bytes = fread(buffer, 1, buffer_size, lexer_file);
    if (read_bytes == 0) {
      /* end of buffer */
      if (find_position == WASM_LINE_OFFSET_POSITION_START) {
        result = WASM_ERROR;
      } else {
        *out_line_offset = buffer_file_offset + read_bytes;
        result = WASM_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 == WASM_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 WASM_ERROR;
  return result;
}

static WasmResult scan_forward_for_line_offset(
    WasmAstLexer* lexer,
    int line,
    size_t line_start_offset,
    WasmLineOffsetPosition find_position,
    int find_line,
    size_t* out_line_offset) {
  assert(line <= find_line);
  if (lexer->source.type == WASM_LEXER_SOURCE_TYPE_BUFFER) {
    const char* source_buffer = 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 == WASM_LEXER_SOURCE_TYPE_FILE);
    return scan_forward_for_line_offset_in_file(lexer, line, line_start_offset,
                                                find_position, find_line,
                                                out_line_offset);
  }
}

static WasmResult get_line_start_offset(WasmAstLexer* 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 WASM_OK;
  } else if (line == first_line) {
    *out_offset = first_offset;
    return WASM_OK;
  } else if (line > current_line) {
    return scan_forward_for_line_offset(lexer, current_line, current_offset,
                                        WASM_LINE_OFFSET_POSITION_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,
                                        WASM_LINE_OFFSET_POSITION_START, line,
                                        out_offset);
  }
}

static WasmResult get_offsets_from_line(WasmAstLexer* lexer,
                                        int line,
                                        size_t* out_line_start,
                                        size_t* out_line_end) {
  size_t line_start;
  if (WASM_FAILED(get_line_start_offset(lexer, line, &line_start)))
    return WASM_ERROR;

  size_t line_end;
  if (WASM_FAILED(scan_forward_for_line_offset(lexer, line, line_start,
                                               WASM_LINE_OFFSET_POSITION_END,
                                               line, &line_end)))
    return WASM_ERROR;
  *out_line_start = line_start;
  *out_line_end = line_end;
  return WASM_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;
}

WasmResult wasm_ast_lexer_get_source_line(WasmAstLexer* lexer,
                                          const WasmLocation* loc,
                                          size_t line_max_length,
                                          char* line,
                                          size_t* out_line_length,
                                          int* out_column_offset) {
  WasmResult result;
  size_t line_start; /* inclusive */
  size_t line_end;   /* exclusive */
  result = get_offsets_from_line(lexer, loc->line, &line_start, &line_end);
  if (WASM_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);
  WasmBool has_start_ellipsis = line_start != new_line_start;
  WasmBool 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 == WASM_LEXER_SOURCE_TYPE_BUFFER) {
    char* buffer_read_start = (char*)lexer->source.buffer.data + read_start;
    memcpy(write_start, buffer_read_start, read_length);
  } else {
    assert(lexer->source.type == WASM_LEXER_SOURCE_TYPE_FILE);
    FILE* lexer_file = lexer->source.file;
    long old_offset = ftell(lexer_file);
    if (old_offset == -1)
      return WASM_ERROR;
    if (fseek(lexer_file, read_start, SEEK_SET) == -1)
      return WASM_ERROR;
    if (fread(write_start, 1, read_length, lexer_file) < read_length)
      return WASM_ERROR;
    if (fseek(lexer_file, old_offset, SEEK_SET) == -1)
      return WASM_ERROR;
  }

  line[line_length] = '\0';

  *out_line_length = line_length;
  *out_column_offset = new_line_start - line_start;
  return WASM_OK;
}
