Something went wrong. Try again.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180// GENERATED by scripts/gen/keywords.mjs. Do not edit by hand.// Keyword ids for engine/lex.zena. Ids below K_LET are reserved words.import { Memory } from 'zena:memory';
export let K_NONE: i32 = 0;export let K_BREAK: i32 = 1;export let K_CASE: i32 = 2;export let K_CATCH: i32 = 3;export let K_CLASS: i32 = 4;export let K_CONST: i32 = 5;export let K_CONTINUE: i32 = 6;export let K_DEBUGGER: i32 = 7;export let K_DEFAULT: i32 = 8;export let K_DELETE: i32 = 9;export let K_DO: i32 = 10;export let K_ELSE: i32 = 11;export let K_ENUM: i32 = 12;export let K_EXPORT: i32 = 13;export let K_EXTENDS: i32 = 14;export let K_FALSE: i32 = 15;export let K_FINALLY: i32 = 16;export let K_FOR: i32 = 17;export let K_FUNCTION: i32 = 18;export let K_IF: i32 = 19;export let K_IMPORT: i32 = 20;export let K_IN: i32 = 21;export let K_INSTANCEOF: i32 = 22;export let K_NEW: i32 = 23;export let K_NULL: i32 = 24;export let K_RETURN: i32 = 25;export let K_SUPER: i32 = 26;export let K_SWITCH: i32 = 27;export let K_THIS: i32 = 28;export let K_THROW: i32 = 29;export let K_TRUE: i32 = 30;export let K_TRY: i32 = 31;export let K_TYPEOF: i32 = 32;export let K_VAR: i32 = 33;export let K_VOID: i32 = 34;export let K_WHILE: i32 = 35;export let K_WITH: i32 = 36;export let K_LET: i32 = 37;export let K_STATIC: i32 = 38;export let K_YIELD: i32 = 39;export let K_AWAIT: i32 = 40;export let K_ASYNC: i32 = 41;export let K_OF: i32 = 42;export let K_GET: i32 = 43;export let K_SET: i32 = 44;export let K_AS: i32 = 45;export let K_SATISFIES: i32 = 46;export let K_TYPE: i32 = 47;export let K_INTERFACE: i32 = 48;export let K_DECLARE: i32 = 49;export let K_NAMESPACE: i32 = 50;export let K_MODULE: i32 = 51;export let K_ABSTRACT: i32 = 52;export let K_READONLY: i32 = 53;export let K_PUBLIC: i32 = 54;export let K_PRIVATE: i32 = 55;export let K_PROTECTED: i32 = 56;export let K_OVERRIDE: i32 = 57;export let K_ACCESSOR: i32 = 58;export let K_GLOBAL: i32 = 59;export let K_USING: i32 = 60;export let K_IMPLEMENTS: i32 = 61;export let K_IS: i32 = 62;export let K_KEYOF: i32 = 63;export let K_INFER: i32 = 64;export let K_UNIQUE: i32 = 65;export let K_ASSERTS: i32 = 66;export let K_REQUIRE: i32 = 67;export let K_FROM: i32 = 68;export let K_OUT: i32 = 69;export let K_ANY: i32 = 70;export let K_UNKNOWN: i32 = 71;export let K_STRING: i32 = 72;export let K_NUMBER: i32 = 73;export let K_BIGINT: i32 = 74;export let K_SYMBOL: i32 = 75;export let K_BOOLEAN: i32 = 76;export let K_NEVER: i32 = 77;export let K_OBJECT: i32 = 78;export let K_UNDEFINED: i32 = 79;export let K_CONSTRUCTOR: i32 = 80;export let K_TARGET: i32 = 81;export let K_META: i32 = 82;export let K_ASSERT: i32 = 83;export let K_DEFER: i32 = 84;export let K_FIRST_CONTEXTUAL: i32 = 37;
export let KS_HEAD: i64 = 0x1dff834000103020;export let KS_STMT_MOD: i64 = 0x7f2024000002120;export let KS_MEMBER_MOD: i64 = 0x7f21a4000002000;export let KS_REMOVED: i64 = 0x3f2000000000000;export let KS_EXPR_START: i64 = 0x555948210;export let KS_DECL: i64 = 0x2200041030;export let KS_TYPE_START: i64 = 0x551908000;export let KS_TYPE_MEMBER_MOD: i64 = 0x7e2184000000000;export let KS_STRICT_RESERVED: i64 = 0x21c101e000000000;export let KS_DL_DECL: i64 = 0xc002200040030;export let KS_BINARY_WORD: i64 = 0x600000600000;export let KS_PAREN_HEAD: i64 = 0x1808080000;export let KS_PARAM_PROP: i64 = 0x1e0000000000000;export let KS_NO_DOT_TYPE: i64 = 0x441008000;
// Whether keyword id k is in the set mask s.export function keywordIn(k: i32, s: i64): boolean { return k < 64 && ((s >> (k as i64)) & (1 as i64)) != (0 as i64);}
// Whether keyword id k, 64 or more, is in the set mask s of ids less 64.export function keywordInHi(k: i32, s: i64): boolean { return k >= 64 && ((s >> ((k - 64) as i64)) & (1 as i64)) != (0 as i64);}
// Whether token type t is in the set mask s (lex.zena's tokenIn tests the current token).export function tokenTypeIn(t: i32, s: i64): boolean { return t < 64 && ((s >> (t as i64)) & (1 as i64)) != (0 as i64);}
export let KS_KEYWORD_TYPE: i64 = 0x441008000;export let KS_KEYWORD_TYPE_HI: i64 = 0xffc0;export let TS_EXPR_START: i64 = 0x581001f00563c;export let TS_TYPE_START: i64 = 0x3010a0222543c;export let TS_PROPERTY_NAME: i64 = 0x420e;export let TS_CAN_FOLLOW_MOD: i64 = 0x200000002440e;export let TS_PREFIX_OP: i64 = 0x180001e000000;export let TS_LITERAL: i64 = 0x31c;export let TS_OPERAND_END: i64 = 0x1800021e;export let TS_CLOSE_OR_SEP: i64 = 0xca800;export let TS_OPEN: i64 = 0x5400;export let TS_CLOSE: i64 = 0xa800;export let TS_BINDING_START: i64 = 0x4402;export let TS_PARAM_START: i64 = 0x24402;export let TS_STR_NUM_TPL: i64 = 0x1c;export let TS_JSDOC_NULLABLE_END: i64 = 0x1000020200082800;export let TS_PARAM_FOLLOW: i64 = 0x1000000000380000;export let TS_OPTIONAL_FOLLOW: i64 = 0x1000000000182000;export let TS_MEMBER_NAME: i64 = 0x20e;export let TS_POSTFIX_UPDATE: i64 = 0x1a000000;// The static data below the frame stack: strip.zena starts the stack at DATA_END.export let DATA_END: i32 = 10512;// The lexer's token replay cache: LEXC_MASK + 1 entries of 16 bytes at LEXC.export let LEXC: i32 = 3344;export let LEXC_MASK: i32 = 255;// JSX's HTML entity table (engine/jsx-entities.wat): records [n][name][code point, 3 bytes LE], ended by n = 0.export let JSX_ENT: i32 = 7440;let KW_SLOT: i32 = 1024;let KW_OFF: i32 = 1280;let KW_TEXT: i32 = 1452;let KW_MUL: i64 = 0x3678c5607077029d;export let PUNCT: i32 = 1934;export let PUNCT_ENT: i32 = 2062;
function lowMask64(n: i32): i64 { if (n >= 8) return -1; return ((1 as i64) << ((n * 8) as i64)) - (1 as i64);}
function lowMask32(n: i32): i32 { if (n >= 4) return -1; return (1 << (n * 8)) - 1;}
// The keyword id of the n-byte identifier at memory address p, zero when it is not a keyword. Reads 12 bytes// at p whatever n is, so p needs that much addressable memory after it.export function keywordAt(p: i32, n: i32): i32 { if (n > 11) return 0; let m = lowMask64(n); let w0 = Memory.default.getI64(p) & m; let k = Memory.default.getU8(KW_SLOT + ((((w0 * KW_MUL) >> (56 as i64)) as i32) & 255)); let o = Memory.default.getI32(KW_OFF + k * 2); let s = o & 0xffff; if ((o >> 16) - s != n) return 0; if ((Memory.default.getI64(KW_TEXT + s) & m) != w0) return 0; if (n > 8 && ((Memory.default.getI32(p + 8) ^ Memory.default.getI32(KW_TEXT + s + 8)) & lowMask32(n - 8)) != 0) return 0; return k;}