// 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 = 7440; // 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; 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; }