diff --git a/.github/generated/ast_changes_watch_list.yml b/.github/generated/ast_changes_watch_list.yml index 37e1d61b4bfe6..ac9dab68f3c33 100644 --- a/.github/generated/ast_changes_watch_list.yml +++ b/.github/generated/ast_changes_watch_list.yml @@ -68,10 +68,14 @@ src: - 'crates/oxc_traverse/src/generated/scopes_collector.rs' - 'napi/parser/generated/constants.js' - 'napi/parser/generated/deserialize/js.js' + - 'napi/parser/generated/deserialize/js_parent.js' - 'napi/parser/generated/deserialize/js_range.js' + - 'napi/parser/generated/deserialize/js_range_parent.js' - 'napi/parser/generated/deserialize/ts.js' + - 'napi/parser/generated/deserialize/ts_parent.js' - 'napi/parser/generated/deserialize/ts_range.js' - 'napi/parser/generated/deserialize/ts_range_no_parens.js' + - 'napi/parser/generated/deserialize/ts_range_parent.js' - 'napi/parser/generated/lazy/constructors.js' - 'napi/parser/generated/lazy/types.js' - 'napi/parser/generated/lazy/walk.js' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 428ccd1bfc357..1dd9e7787aa7c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -196,7 +196,7 @@ jobs: - if: steps.filter.outputs.src == 'true' name: Run tests in workspace env: - RUN_RAW_TESTS: "true" + RUN_RAW_RANGE_TESTS: "true" run: | rustup target add wasm32-wasip1-threads pnpm run build-test diff --git a/crates/oxc_ast/src/serialize/js.rs b/crates/oxc_ast/src/serialize/js.rs index f4c02b2761b51..db9ea5b6353e6 100644 --- a/crates/oxc_ast/src/serialize/js.rs +++ b/crates/oxc_ast/src/serialize/js.rs @@ -20,8 +20,11 @@ use super::{EmptyArray, Null}; #[estree(raw_deser = " const pattern = DESER[BindingPatternKind](POS_OFFSET.kind); if (IS_TS) { + const previousParent = parent; + parent = pattern; pattern.optional = DESER[bool](POS_OFFSET.optional); pattern.typeAnnotation = DESER[Option>](POS_OFFSET.type_annotation); + if (PARENT) parent = previousParent; } pattern ")] @@ -119,22 +122,31 @@ impl ESTree for CatchParameterConverter<'_, '_> { const params = DESER[Vec](POS_OFFSET.items); if (uint32[(POS_OFFSET.rest) >> 2] !== 0 && uint32[(POS_OFFSET.rest + 4) >> 2] !== 0) { pos = uint32[(POS_OFFSET.rest) >> 2]; + let start, end; - params.push({ + const previousParent = parent; + const rest = parent = { type: 'RestElement', ...(IS_TS && { decorators: [] }), - argument: DESER[BindingPatternKind]( POS_OFFSET.argument.kind ), + argument: null, ...(IS_TS && { optional: DESER[bool]( POS_OFFSET.argument.optional ), - typeAnnotation: DESER[Option>]( - POS_OFFSET.argument.type_annotation - ), + typeAnnotation: null, value: null, }), start: start = DESER[u32]( POS_OFFSET.span.start ), end: end = DESER[u32]( POS_OFFSET.span.end ), ...(RANGE && { range: [start, end] }), - }); + ...(PARENT && { parent }), + }; + rest.argument = DESER[BindingPatternKind]( POS_OFFSET.argument.kind ); + if (IS_TS) { + rest.typeAnnotation = DESER[Option>]( + POS_OFFSET.argument.type_annotation + ); + } + params.push(rest); + if (PARENT) parent = previousParent; } params " @@ -187,27 +199,32 @@ impl ESTree for FormalParametersRest<'_, '_> { if (IS_TS) { const accessibility = DESER[Option](POS_OFFSET.accessibility), readonly = DESER[bool](POS_OFFSET.readonly), - override = DESER[bool](POS_OFFSET.override); + override = DESER[bool](POS_OFFSET.override), + previousParent = parent; if (accessibility === null && !readonly && !override) { - param = DESER[BindingPatternKind](POS_OFFSET.pattern.kind); + param = parent = DESER[BindingPatternKind](POS_OFFSET.pattern.kind); param.decorators = DESER[Vec](POS_OFFSET.decorators); param.optional = DESER[bool](POS_OFFSET.pattern.optional); param.typeAnnotation = DESER[Option>](POS_OFFSET.pattern.type_annotation); } else { let start, end; - param = { + param = parent = { type: 'TSParameterProperty', accessibility, - decorators: DESER[Vec](POS_OFFSET.decorators), + decorators: null, override, - parameter: DESER[BindingPattern](POS_OFFSET.pattern), + parameter: null, readonly, static: false, start: start = DESER[u32]( POS_OFFSET.span.start ), end: end = DESER[u32]( POS_OFFSET.span.end ), ...(RANGE && { range: [start, end] }), + ...(PARENT && { parent }), }; + param.decorators = DESER[Vec](POS_OFFSET.decorators); + param.parameter = DESER[BindingPattern](POS_OFFSET.pattern); } + if (PARENT) parent = previousParent; } else { param = DESER[BindingPatternKind](POS_OFFSET.pattern.kind); } @@ -384,7 +401,11 @@ impl ESTree for ExportAllDeclarationWithClause<'_, '_> { ts_type = "FunctionBody | Expression", raw_deser = " let body = DESER[Box](POS_OFFSET.body); - THIS.expression ? body.body[0].expression : body + if (THIS.expression === true) { + body = body.body[0].expression; + if (PARENT) body.parent = parent; + } + body " )] pub struct ArrowFunctionExpressionBody<'a>(pub &'a ArrowFunctionExpression<'a>); @@ -405,23 +426,31 @@ impl ESTree for ArrowFunctionExpressionBody<'_> { #[estree( ts_type = "IdentifierReference | AssignmentTargetWithDefault", raw_deser = " - const init = DESER[Option](POS_OFFSET.init), - keyCopy = { ...THIS.key }, - value = init === null - ? keyCopy - : { - type: 'AssignmentPattern', - ...(IS_TS && { decorators: [] }), - left: keyCopy, - right: init, - ...(IS_TS && { - optional: false, - typeAnnotation: null, - }), - start: THIS.start, - end: THIS.end, - ...(RANGE && { range: [THIS.start, THIS.end] }), - }; + const init = DESER[Option](POS_OFFSET.init); + let value = { ...THIS.key }; + if (init !== null) { + const left = value; + const previousParent = parent; + value = parent = { + type: 'AssignmentPattern', + ...(IS_TS && { decorators: [] }), + left, + right: init, + ...(IS_TS && { + optional: false, + typeAnnotation: null, + }), + start: THIS.start, + end: THIS.end, + ...(RANGE && { range: [THIS.start, THIS.end] }), + ...(PARENT && { parent }), + }; + if (PARENT) { + left.parent = value; + init.parent = value; + parent = previousParent; + } + } value " )] @@ -458,16 +487,22 @@ impl ESTree for AssignmentTargetPropertyIdentifierInit<'_> { /// ESTree implementation is unchanged from the auto-generated version. #[ast_meta] #[estree(raw_deser = " - let node = DESER[Expression](POS_OFFSET.expression); + let node; if (PRESERVE_PARENS) { let start, end; - node = { + const previousParent = parent; + node = parent = { type: 'ParenthesizedExpression', - expression: node, + expression: null, start: start = DESER[u32]( POS_OFFSET.span.start ), end: end = DESER[u32]( POS_OFFSET.span.end ), ...(RANGE && { range: [start, end] }), + ...(PARENT && { parent }), }; + node.expression = DESER[Expression](POS_OFFSET.expression); + if (PARENT) parent = previousParent; + } else { + node = DESER[Expression](POS_OFFSET.expression); } node ")] diff --git a/crates/oxc_ast/src/serialize/jsx.rs b/crates/oxc_ast/src/serialize/jsx.rs index b7c0905edbc94..bc5e6fbe6dc03 100644 --- a/crates/oxc_ast/src/serialize/jsx.rs +++ b/crates/oxc_ast/src/serialize/jsx.rs @@ -56,7 +56,7 @@ impl ESTree for JSXOpeningElementSelfClosing<'_, '_> { ts_type = "JSXIdentifier", raw_deser = " const ident = DESER[Box](POS); - { type: 'JSXIdentifier', name: ident.name, start: ident.start, end: ident.end, ...(RANGE && { range: ident.range }) } + { type: 'JSXIdentifier', name: ident.name, start: ident.start, end: ident.end, ...(RANGE && { range: ident.range }), ...(PARENT && { parent }) } " )] pub struct JSXElementIdentifierReference<'a, 'b>(pub &'b IdentifierReference<'a>); @@ -75,7 +75,7 @@ impl ESTree for JSXElementIdentifierReference<'_, '_> { ts_type = "JSXIdentifier", raw_deser = " const thisExpr = DESER[Box](POS); - { type: 'JSXIdentifier', name: 'this', start: thisExpr.start, end: thisExpr.end, ...(RANGE && { range: thisExpr.range }) } + { type: 'JSXIdentifier', name: 'this', start: thisExpr.start, end: thisExpr.end, ...(RANGE && { range: thisExpr.range }), ...(PARENT && { parent }) } " )] pub struct JSXElementThisExpression<'b>(pub &'b ThisExpression); diff --git a/crates/oxc_ast/src/serialize/literal.rs b/crates/oxc_ast/src/serialize/literal.rs index 7a51030ee98e2..3356a754ba5ff 100644 --- a/crates/oxc_ast/src/serialize/literal.rs +++ b/crates/oxc_ast/src/serialize/literal.rs @@ -202,7 +202,7 @@ impl ESTree for RegExpFlagsConverter<'_> { value.cooked = value.cooked .replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16))); } - { type: 'TemplateElement', value, tail, start, end, ...(RANGE && { range: [start, end] }) } + { type: 'TemplateElement', value, tail, start, end, ...(RANGE && { range: [start, end] }), ...(PARENT && { parent }) } "#)] pub struct TemplateElementConverter<'a, 'b>(pub &'b TemplateElement<'a>); diff --git a/crates/oxc_ast/src/serialize/mod.rs b/crates/oxc_ast/src/serialize/mod.rs index 1a437960fc683..0a63c12e1a686 100644 --- a/crates/oxc_ast/src/serialize/mod.rs +++ b/crates/oxc_ast/src/serialize/mod.rs @@ -121,13 +121,27 @@ impl Program<'_> { /// `Program` span start is 0 (not 5). #[ast_meta] #[estree(raw_deser = " - const body = DESER[Vec](POS_OFFSET.directives); - body.push(...DESER[Vec](POS_OFFSET.body)); + const start = IS_TS ? 0 : DESER[u32](POS_OFFSET.span.start), + end = DESER[u32](POS_OFFSET.span.end); + + const program = parent = { + type: 'Program', + body: null, + sourceType: DESER[ModuleKind](POS_OFFSET.source_type.module_kind), + hashbang: null, + start, + end, + ...(RANGE && { range: [start, end] }), + ...(PARENT && { parent: null }), + }; - const end = DESER[u32](POS_OFFSET.span.end); + program.hashbang = DESER[Option](POS_OFFSET.hashbang); + + const body = program.body = DESER[Vec](POS_OFFSET.directives); + body.push(...DESER[Vec](POS_OFFSET.body)); - let start; if (IS_TS) { + let start; if (body.length > 0) { const first = body[0]; start = first.start; @@ -144,19 +158,16 @@ impl Program<'_> { } else { start = end; } - } else { - start = DESER[u32](POS_OFFSET.span.start); + + if (RANGE) { + program.start = program.range[0] = start; + } else { + program.start = start; + } } - const program = { - type: 'Program', - body, - sourceType: DESER[ModuleKind](POS_OFFSET.source_type.module_kind), - hashbang: DESER[Option](POS_OFFSET.hashbang), - start, - end, - ...(RANGE && { range: [start, end] }), - }; + if (PARENT) parent = null; + program ")] pub struct ProgramConverter<'a, 'b>(pub &'b Program<'a>); diff --git a/crates/oxc_ast/src/serialize/ts.rs b/crates/oxc_ast/src/serialize/ts.rs index 5d38997a9ed4e..4bbbdf3862fca 100644 --- a/crates/oxc_ast/src/serialize/ts.rs +++ b/crates/oxc_ast/src/serialize/ts.rs @@ -53,63 +53,101 @@ impl ESTree for ExpressionStatementDirective<'_, '_> { start = DESER[u32](POS_OFFSET.span.start), end = DESER[u32](POS_OFFSET.span.end), declare = DESER[bool](POS_OFFSET.declare); - let id = DESER[TSModuleDeclarationName](POS_OFFSET.id), - body = DESER[Option](POS_OFFSET.body); - // Flatten `body`, and nest `id` - if (body !== null && body.type === 'TSModuleDeclaration') { - let innerId = body.id; - if (innerId.type === 'Identifier') { - let start, end; - id = { - type: 'TSQualifiedName', - left: id, - right: innerId, - start: start = id.start, - end: end = innerId.end, - ...(RANGE && { range: [start, end] }), - }; + let node; + const previousParent = parent; + + let body = DESER[Option](POS_OFFSET.body); + if (body === null) { + node = parent = { + type: 'TSModuleDeclaration', + id: null, + // No `body` field + kind, + declare, + global, + start, + end, + ...(RANGE && { range: [start, end] }), + ...(PARENT && { parent }), + }; + node.id = DESER[TSModuleDeclarationName](POS_OFFSET.id); + } else { + node = parent = { + type: 'TSModuleDeclaration', + id: null, + body, + kind, + declare, + global, + start, + end, + ...(RANGE && { range: [start, end] }), + ...(PARENT && { parent }), + }; + + const id = DESER[TSModuleDeclarationName](POS_OFFSET.id); + + if (body.type === 'TSModuleBlock') { + node.id = id; + if (PARENT) body.parent = node; } else { - // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of - // this module on left, and previous `left` of innermost `TSQualifiedName` on right - while (true) { - if (RANGE) { - innerId.start = innerId.range[0] = id.start; - } else { - innerId.start = id.start; + let innerId = body.id; + if (innerId.type === 'Identifier') { + let start, end; + const outerId = node.id = parent = { + type: 'TSQualifiedName', + left: id, + right: innerId, + start: start = id.start, + end: end = innerId.end, + ...(RANGE && { range: [start, end] }), + ...(PARENT && { parent: node }), + }; + if (PARENT) id.parent = innerId.parent = outerId; + } else { + // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of + // this module on left, and previous `left` of innermost `TSQualifiedName` on right + node.id = innerId; + if (PARENT) innerId.parent = node; + + const { start } = id; + while (true) { + if (RANGE) { + innerId.start = innerId.range[0] = start; + } else { + innerId.start = start; + } + if (innerId.left.type === 'Identifier') break; + innerId = innerId.left; } - if (innerId.left.type === 'Identifier') break; - innerId = innerId.left; + + let end; + const right = innerId.left; + const left = innerId.left = { + type: 'TSQualifiedName', + left: id, + right, + start, + end: end = right.end, + ...(RANGE && { range: [start, end] }), + ...(PARENT && { parent: innerId }), + }; + if (PARENT) id.parent = right.parent = left; } - let start, end; - innerId.left = { - type: 'TSQualifiedName', - left: id, - right: innerId.left, - start: start = id.start, - end: end = innerId.left.end, - ...(RANGE && { range: [start, end] }), - }; - id = body.id; + if (Object.hasOwn(body, 'body')) { + body = body.body; + node.body = body; + if (PARENT) body.parent = node; + } else { + body = null; + } } - body = Object.hasOwn(body, 'body') ? body.body : null; } - // Skip `body` field if `null` - const node = body === null - ? { - type: 'TSModuleDeclaration', - id, kind, declare, global, - start, end, - ...(RANGE && { range: [start, end] }) - } - : { - type: 'TSModuleDeclaration', - id, body, kind, declare, global, - start, end, - ...(RANGE && { range: [start, end] }) - }; + if (PARENT) parent = previousParent; + node ")] pub struct TSModuleDeclarationConverter<'a, 'b>(pub &'b TSModuleDeclaration<'a>); @@ -252,8 +290,10 @@ impl ESTree for TSMappedTypeOptional<'_, '_> { #[estree( ts_type = "TSTypeParameter['name']", raw_deser = " - const typeParameter = DESER[Box](POS_OFFSET.type_parameter); - typeParameter.name + const typeParameter = DESER[Box](POS_OFFSET.type_parameter), + key = typeParameter.name; + if (PARENT) key.parent = parent; + key " )] pub struct TSMappedTypeKey<'a, 'b>(pub &'b TSMappedType<'a>); @@ -269,7 +309,14 @@ impl ESTree for TSMappedTypeKey<'_, '_> { /// NOTE: Variable `typeParameter` in `raw_deser` is shared between `key` and `constraint` serializers. /// They will be concatenated in the generated code. #[ast_meta] -#[estree(ts_type = "TSTypeParameter['constraint']", raw_deser = "typeParameter.constraint")] +#[estree( + ts_type = "TSTypeParameter['constraint']", + raw_deser = " + const { constraint } = typeParameter; + if (PARENT && constraint !== null) constraint.parent = parent; + constraint + " +)] pub struct TSMappedTypeConstraint<'a, 'b>(pub &'b TSMappedType<'a>); impl ESTree for TSMappedTypeConstraint<'_, '_> { @@ -292,31 +339,43 @@ impl ESTree for TSMappedTypeConstraint<'_, '_> { let expression = DESER[TSTypeName](POS_OFFSET.expression); if (expression.type === 'TSQualifiedName') { let object = expression.left; + const { right } = expression; let start, end; - let parent = expression = { + let previous = expression = { type: 'MemberExpression', object, - property: expression.right, + property: right, optional: false, computed: false, start: start = expression.start, end: end = expression.end, ...(RANGE && { range: [start, end] }), + ...(PARENT && { parent }), }; - while (object.type === 'TSQualifiedName') { - const { left } = object; - let start, end; - parent = parent.object = { + if (PARENT) right.parent = previous; + + while (true) { + if (object.type !== 'TSQualifiedName') { + if (PARENT) object.parent = previous; + break; + } + + const { left, right } = object; + previous = previous.object = { type: 'MemberExpression', object: left, - property: object.right, + property: right, optional: false, computed: false, start: start = object.start, end: end = object.end, ...(RANGE && { range: [start, end] }), + ...(PARENT && { parent: previous }), }; + + if (PARENT) right.parent = previous; + object = left; } } @@ -436,16 +495,22 @@ impl ESTree for TSFunctionTypeParams<'_, '_> { /// ESTree implementation is unchanged from the auto-generated version. #[ast_meta] #[estree(raw_deser = " - let node = DESER[TSType](POS_OFFSET.type_annotation); + let node; if (PRESERVE_PARENS) { let start, end; - node = { + const previousParent = parent; + node = parent = { type: 'TSParenthesizedType', - typeAnnotation: node, + typeAnnotation: null, start: start = DESER[u32]( POS_OFFSET.span.start ), end: end = DESER[u32]( POS_OFFSET.span.end ), ...(RANGE && { range: [start, end] }), + ...(PARENT && { parent }), }; + node.typeAnnotation = DESER[TSType](POS_OFFSET.type_annotation); + if (PARENT) parent = previousParent; + } else { + node = DESER[TSType](POS_OFFSET.type_annotation); } node ")] diff --git a/napi/parser/generated/deserialize/js.js b/napi/parser/generated/deserialize/js.js index 0967c18d3e487..376899359cea5 100644 --- a/napi/parser/generated/deserialize/js.js +++ b/napi/parser/generated/deserialize/js.js @@ -31,18 +31,19 @@ function deserializeWith(buffer, sourceTextInput, sourceByteLenInput, deserializ } function deserializeProgram(pos) { - let body = deserializeVecDirective(pos + 72); - body.push(...deserializeVecStatement(pos + 96)); - let end = deserializeU32(pos + 4), start; - start = deserializeU32(pos); - return { - type: 'Program', - body, - sourceType: deserializeModuleKind(pos + 125), - hashbang: deserializeOptionHashbang(pos + 48), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + program = { + type: 'Program', + body: null, + sourceType: deserializeModuleKind(pos + 125), + hashbang: null, + start, + end, + }; + program.hashbang = deserializeOptionHashbang(pos + 48); + (program.body = deserializeVecDirective(pos + 72)).push(...deserializeVecStatement(pos + 96)); + return program; } function deserializeExpression(pos) { @@ -188,13 +189,16 @@ function deserializeThisExpression(pos) { } function deserializeArrayExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ArrayExpression', - elements: deserializeVecArrayExpressionElement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ArrayExpression', + elements: null, + start, + end, + }; + node.elements = deserializeVecArrayExpressionElement(pos + 8); + return node; } function deserializeArrayExpressionElement(pos) { @@ -299,13 +303,16 @@ function deserializeElision(pos) { } function deserializeObjectExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ObjectExpression', - properties: deserializeVecObjectPropertyKind(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ObjectExpression', + properties: null, + start, + end, + }; + node.properties = deserializeVecObjectPropertyKind(pos + 8); + return node; } function deserializeObjectPropertyKind(pos) { @@ -320,18 +327,22 @@ function deserializeObjectPropertyKind(pos) { } function deserializeObjectProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: deserializePropertyKind(pos + 40), - key: deserializePropertyKey(pos + 8), - value: deserializeExpression(pos + 24), - method: deserializeBool(pos + 41), - shorthand: deserializeBool(pos + 42), - computed: deserializeBool(pos + 43), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: deserializePropertyKind(pos + 40), + key: null, + value: null, + method: deserializeBool(pos + 41), + shorthand: deserializeBool(pos + 42), + computed: deserializeBool(pos + 43), + start, + end, + }; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeExpression(pos + 24); + return node; } function deserializePropertyKey(pos) { @@ -445,25 +456,33 @@ function deserializePropertyKind(pos) { } function deserializeTemplateLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TemplateLiteral', - quasis: deserializeVecTemplateElement(pos + 8), - expressions: deserializeVecExpression(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TemplateLiteral', + quasis: null, + expressions: null, + start, + end, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.expressions = deserializeVecExpression(pos + 32); + return node; } function deserializeTaggedTemplateExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TaggedTemplateExpression', - tag: deserializeExpression(pos + 8), - quasi: deserializeTemplateLiteral(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TaggedTemplateExpression', + tag: null, + quasi: null, + start, + end, + }; + node.tag = deserializeExpression(pos + 8); + node.quasi = deserializeTemplateLiteral(pos + 32); + return node; } function deserializeTemplateElement(pos) { @@ -490,86 +509,116 @@ function deserializeTemplateElementValue(pos) { } function deserializeComputedMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializeExpression(pos + 24), - optional: deserializeBool(pos + 40), - computed: true, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 40), + computed: null, + start, + end, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeExpression(pos + 24); + node.computed = true; + return node; } function deserializeStaticMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializeIdentifierName(pos + 24), - optional: deserializeBool(pos + 48), - computed: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeIdentifierName(pos + 24); + node.computed = false; + return node; } function deserializePrivateFieldExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializePrivateIdentifier(pos + 24), - optional: deserializeBool(pos + 48), - computed: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializePrivateIdentifier(pos + 24); + node.computed = false; + return node; } function deserializeCallExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'CallExpression', - callee: deserializeExpression(pos + 8), - arguments: deserializeVecArgument(pos + 32), - optional: deserializeBool(pos + 56), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'CallExpression', + callee: null, + arguments: null, + optional: deserializeBool(pos + 56), + start, + end, + }; + node.callee = deserializeExpression(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeNewExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'NewExpression', - callee: deserializeExpression(pos + 8), - arguments: deserializeVecArgument(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'NewExpression', + callee: null, + arguments: null, + start, + end, + }; + node.callee = deserializeExpression(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeMetaProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MetaProperty', - meta: deserializeIdentifierName(pos + 8), - property: deserializeIdentifierName(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MetaProperty', + meta: null, + property: null, + start, + end, + }; + node.meta = deserializeIdentifierName(pos + 8); + node.property = deserializeIdentifierName(pos + 32); + return node; } function deserializeSpreadElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SpreadElement', - argument: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SpreadElement', + argument: null, + start, + end, + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeArgument(pos) { @@ -668,87 +717,116 @@ function deserializeArgument(pos) { } function deserializeUpdateExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'UpdateExpression', - operator: deserializeUpdateOperator(pos + 24), - prefix: deserializeBool(pos + 25), - argument: deserializeSimpleAssignmentTarget(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'UpdateExpression', + operator: deserializeUpdateOperator(pos + 24), + prefix: deserializeBool(pos + 25), + argument: null, + start, + end, + }; + node.argument = deserializeSimpleAssignmentTarget(pos + 8); + return node; } function deserializeUnaryExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'UnaryExpression', - operator: deserializeUnaryOperator(pos + 24), - argument: deserializeExpression(pos + 8), - prefix: true, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'UnaryExpression', + operator: deserializeUnaryOperator(pos + 24), + argument: null, + prefix: null, + start, + end, + }; + node.argument = deserializeExpression(pos + 8); + node.prefix = true; + return node; } function deserializeBinaryExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BinaryExpression', - left: deserializeExpression(pos + 8), - operator: deserializeBinaryOperator(pos + 40), - right: deserializeExpression(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BinaryExpression', + left: null, + operator: deserializeBinaryOperator(pos + 40), + right: null, + start, + end, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializePrivateInExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BinaryExpression', - left: deserializePrivateIdentifier(pos + 8), - operator: 'in', - right: deserializeExpression(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BinaryExpression', + left: null, + operator: null, + right: null, + start, + end, + }; + node.left = deserializePrivateIdentifier(pos + 8); + node.operator = 'in'; + node.right = deserializeExpression(pos + 32); + return node; } function deserializeLogicalExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'LogicalExpression', - left: deserializeExpression(pos + 8), - operator: deserializeLogicalOperator(pos + 40), - right: deserializeExpression(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'LogicalExpression', + left: null, + operator: deserializeLogicalOperator(pos + 40), + right: null, + start, + end, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeConditionalExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ConditionalExpression', - test: deserializeExpression(pos + 8), - consequent: deserializeExpression(pos + 24), - alternate: deserializeExpression(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ConditionalExpression', + test: null, + consequent: null, + alternate: null, + start, + end, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeExpression(pos + 24); + node.alternate = deserializeExpression(pos + 40); + return node; } function deserializeAssignmentExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentExpression', - operator: deserializeAssignmentOperator(pos + 40), - left: deserializeAssignmentTarget(pos + 8), - right: deserializeExpression(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentExpression', + operator: deserializeAssignmentOperator(pos + 40), + left: null, + right: null, + start, + end, + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeAssignmentTarget(pos) { @@ -804,39 +882,46 @@ function deserializeSimpleAssignmentTarget(pos) { function deserializeArrayAssignmentTarget(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrayPattern', + elements: null, + start, + end, + }, elements = deserializeVecOptionAssignmentTargetMaybeDefault(pos + 8), rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); rest !== null && elements.push(rest); - return { - type: 'ArrayPattern', - elements, - start, - end, - }; + node.elements = elements; + return node; } function deserializeObjectAssignmentTarget(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ObjectPattern', + properties: null, + start, + end, + }, properties = deserializeVecAssignmentTargetProperty(pos + 8), rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); rest !== null && properties.push(rest); - return { - type: 'ObjectPattern', - properties, - start, - end, - }; + node.properties = properties; + return node; } function deserializeAssignmentTargetRest(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'RestElement', - argument: deserializeAssignmentTarget(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'RestElement', + argument: null, + start, + end, + }; + node.argument = deserializeAssignmentTarget(pos + 8); + return node; } function deserializeAssignmentTargetMaybeDefault(pos) { @@ -869,18 +954,22 @@ function deserializeAssignmentTargetMaybeDefault(pos) { } function deserializeAssignmentTargetWithDefault(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentPattern', - left: deserializeAssignmentTarget(pos + 8), - right: deserializeExpression(pos + 24), - start, - end, - }; -} - -function deserializeAssignmentTargetProperty(pos) { - switch (uint8[pos]) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentPattern', + left: null, + right: null, + start, + end, + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; +} + +function deserializeAssignmentTargetProperty(pos) { + switch (uint8[pos]) { case 0: return deserializeBoxAssignmentTargetPropertyIdentifier(pos + 8); case 1: @@ -891,53 +980,71 @@ function deserializeAssignmentTargetProperty(pos) { } function deserializeAssignmentTargetPropertyIdentifier(pos) { - let key = deserializeIdentifierReference(pos + 8), - start = deserializeU32(pos), + let start = deserializeU32(pos), end = deserializeU32(pos + 4), - init = deserializeOptionExpression(pos + 40), - keyCopy = { ...key }; - return { - type: 'Property', - kind: 'init', - key, - value: init === null ? keyCopy : { - type: 'AssignmentPattern', - left: keyCopy, - right: init, + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: null, start, end, }, - method: false, - shorthand: true, - computed: false, + key = deserializeIdentifierReference(pos + 8), + init = deserializeOptionExpression(pos + 40), + value = { ...key }; + init !== null && (value = { + type: 'AssignmentPattern', + left: value, + right: init, start, end, - }; + }); + node.kind = 'init'; + node.key = key; + node.value = value; + node.method = false; + node.shorthand = true; + node.computed = false; + return node; } function deserializeAssignmentTargetPropertyProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: 'init', - key: deserializePropertyKey(pos + 8), - value: deserializeAssignmentTargetMaybeDefault(pos + 24), - method: false, - shorthand: false, - computed: deserializeBool(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: deserializeBool(pos + 40), + start, + end, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeAssignmentTargetMaybeDefault(pos + 24); + node.method = false; + node.shorthand = false; + return node; } function deserializeSequenceExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SequenceExpression', - expressions: deserializeVecExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SequenceExpression', + expressions: null, + start, + end, + }; + node.expressions = deserializeVecExpression(pos + 8); + return node; } function deserializeSuper(pos) { @@ -950,23 +1057,29 @@ function deserializeSuper(pos) { } function deserializeAwaitExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AwaitExpression', - argument: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AwaitExpression', + argument: null, + start, + end, + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeChainExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ChainExpression', - expression: deserializeChainElement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ChainExpression', + expression: null, + start, + end, + }; + node.expression = deserializeChainElement(pos + 8); + return node; } function deserializeChainElement(pos) { @@ -987,13 +1100,14 @@ function deserializeChainElement(pos) { } function deserializeParenthesizedExpression(pos) { - let node = deserializeExpression(pos + 8); + let node; node = { type: 'ParenthesizedExpression', - expression: node, + expression: null, start: deserializeU32(pos), end: deserializeU32(pos + 4), }; + node.expression = deserializeExpression(pos + 8); return node; } @@ -1069,14 +1183,17 @@ function deserializeStatement(pos) { } function deserializeDirective(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExpressionStatement', - expression: deserializeStringLiteral(pos + 8), - directive: deserializeStr(pos + 56), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExpressionStatement', + expression: null, + directive: deserializeStr(pos + 56), + start, + end, + }; + node.expression = deserializeStringLiteral(pos + 8); + return node; } function deserializeHashbang(pos) { @@ -1090,13 +1207,16 @@ function deserializeHashbang(pos) { } function deserializeBlockStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BlockStatement', - body: deserializeVecStatement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BlockStatement', + body: null, + start, + end, + }; + node.body = deserializeVecStatement(pos + 8); + return node; } function deserializeDeclaration(pos) { @@ -1123,14 +1243,17 @@ function deserializeDeclaration(pos) { } function deserializeVariableDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'VariableDeclaration', - kind: deserializeVariableDeclarationKind(pos + 32), - declarations: deserializeVecVariableDeclarator(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'VariableDeclaration', + kind: deserializeVariableDeclarationKind(pos + 32), + declarations: null, + start, + end, + }; + node.declarations = deserializeVecVariableDeclarator(pos + 8); + return node; } function deserializeVariableDeclarationKind(pos) { @@ -1151,14 +1274,18 @@ function deserializeVariableDeclarationKind(pos) { } function deserializeVariableDeclarator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'VariableDeclarator', - id: deserializeBindingPattern(pos + 8), - init: deserializeOptionExpression(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'VariableDeclarator', + id: null, + init: null, + start, + end, + }; + node.id = deserializeBindingPattern(pos + 8); + node.init = deserializeOptionExpression(pos + 40); + return node; } function deserializeEmptyStatement(pos) { @@ -1171,60 +1298,82 @@ function deserializeEmptyStatement(pos) { } function deserializeExpressionStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExpressionStatement', - expression: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExpressionStatement', + expression: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeIfStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'IfStatement', - test: deserializeExpression(pos + 8), - consequent: deserializeStatement(pos + 24), - alternate: deserializeOptionStatement(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'IfStatement', + test: null, + consequent: null, + alternate: null, + start, + end, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeStatement(pos + 24); + node.alternate = deserializeOptionStatement(pos + 40); + return node; } function deserializeDoWhileStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'DoWhileStatement', - body: deserializeStatement(pos + 8), - test: deserializeExpression(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'DoWhileStatement', + body: null, + test: null, + start, + end, + }; + node.body = deserializeStatement(pos + 8); + node.test = deserializeExpression(pos + 24); + return node; } function deserializeWhileStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'WhileStatement', - test: deserializeExpression(pos + 8), - body: deserializeStatement(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'WhileStatement', + test: null, + body: null, + start, + end, + }; + node.test = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + return node; } function deserializeForStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForStatement', - init: deserializeOptionForStatementInit(pos + 8), - test: deserializeOptionExpression(pos + 24), - update: deserializeOptionExpression(pos + 40), - body: deserializeStatement(pos + 56), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForStatement', + init: null, + test: null, + update: null, + body: null, + start, + end, + }; + node.init = deserializeOptionForStatementInit(pos + 8); + node.test = deserializeOptionExpression(pos + 24); + node.update = deserializeOptionExpression(pos + 40); + node.body = deserializeStatement(pos + 56); + return node; } function deserializeForStatementInit(pos) { @@ -1323,15 +1472,20 @@ function deserializeForStatementInit(pos) { } function deserializeForInStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForInStatement', - left: deserializeForStatementLeft(pos + 8), - right: deserializeExpression(pos + 24), - body: deserializeStatement(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForInStatement', + left: null, + right: null, + body: null, + start, + end, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + return node; } function deserializeForStatementLeft(pos) { @@ -1364,123 +1518,165 @@ function deserializeForStatementLeft(pos) { } function deserializeForOfStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForOfStatement', - await: deserializeBool(pos + 60), - left: deserializeForStatementLeft(pos + 8), - right: deserializeExpression(pos + 24), - body: deserializeStatement(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForOfStatement', + await: deserializeBool(pos + 60), + left: null, + right: null, + body: null, + start, + end, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + return node; } function deserializeContinueStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ContinueStatement', - label: deserializeOptionLabelIdentifier(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ContinueStatement', + label: null, + start, + end, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + return node; } function deserializeBreakStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BreakStatement', - label: deserializeOptionLabelIdentifier(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BreakStatement', + label: null, + start, + end, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + return node; } function deserializeReturnStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ReturnStatement', - argument: deserializeOptionExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ReturnStatement', + argument: null, + start, + end, + }; + node.argument = deserializeOptionExpression(pos + 8); + return node; } function deserializeWithStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'WithStatement', - object: deserializeExpression(pos + 8), - body: deserializeStatement(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'WithStatement', + object: null, + body: null, + start, + end, + }; + node.object = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + return node; } function deserializeSwitchStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SwitchStatement', - discriminant: deserializeExpression(pos + 8), - cases: deserializeVecSwitchCase(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SwitchStatement', + discriminant: null, + cases: null, + start, + end, + }; + node.discriminant = deserializeExpression(pos + 8); + node.cases = deserializeVecSwitchCase(pos + 24); + return node; } function deserializeSwitchCase(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SwitchCase', - test: deserializeOptionExpression(pos + 8), - consequent: deserializeVecStatement(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SwitchCase', + test: null, + consequent: null, + start, + end, + }; + node.test = deserializeOptionExpression(pos + 8); + node.consequent = deserializeVecStatement(pos + 24); + return node; } function deserializeLabeledStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'LabeledStatement', - label: deserializeLabelIdentifier(pos + 8), - body: deserializeStatement(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'LabeledStatement', + label: null, + body: null, + start, + end, + }; + node.label = deserializeLabelIdentifier(pos + 8); + node.body = deserializeStatement(pos + 32); + return node; } function deserializeThrowStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ThrowStatement', - argument: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ThrowStatement', + argument: null, + start, + end, + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeTryStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TryStatement', - block: deserializeBoxBlockStatement(pos + 8), - handler: deserializeOptionBoxCatchClause(pos + 16), - finalizer: deserializeOptionBoxBlockStatement(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TryStatement', + block: null, + handler: null, + finalizer: null, + start, + end, + }; + node.block = deserializeBoxBlockStatement(pos + 8); + node.handler = deserializeOptionBoxCatchClause(pos + 16); + node.finalizer = deserializeOptionBoxBlockStatement(pos + 24); + return node; } function deserializeCatchClause(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'CatchClause', - param: deserializeOptionCatchParameter(pos + 8), - body: deserializeBoxBlockStatement(pos + 48), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'CatchClause', + param: null, + body: null, + start, + end, + }; + node.param = deserializeOptionCatchParameter(pos + 8); + node.body = deserializeBoxBlockStatement(pos + 48); + return node; } function deserializeCatchParameter(pos) { @@ -1516,82 +1712,106 @@ function deserializeBindingPatternKind(pos) { } function deserializeAssignmentPattern(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentPattern', - left: deserializeBindingPattern(pos + 8), - right: deserializeExpression(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentPattern', + left: null, + right: null, + start, + end, + }; + node.left = deserializeBindingPattern(pos + 8); + node.right = deserializeExpression(pos + 40); + return node; } function deserializeObjectPattern(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ObjectPattern', + properties: null, + start, + end, + }, properties = deserializeVecBindingProperty(pos + 8), rest = deserializeOptionBoxBindingRestElement(pos + 32); rest !== null && properties.push(rest); - return { - type: 'ObjectPattern', - properties, - start, - end, - }; + node.properties = properties; + return node; } function deserializeBindingProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: 'init', - key: deserializePropertyKey(pos + 8), - value: deserializeBindingPattern(pos + 24), - method: false, - shorthand: deserializeBool(pos + 56), - computed: deserializeBool(pos + 57), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: deserializeBool(pos + 56), + computed: deserializeBool(pos + 57), + start, + end, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeBindingPattern(pos + 24); + node.method = false; + return node; } function deserializeArrayPattern(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrayPattern', + elements: null, + start, + end, + }, elements = deserializeVecOptionBindingPattern(pos + 8), rest = deserializeOptionBoxBindingRestElement(pos + 32); rest !== null && elements.push(rest); - return { - type: 'ArrayPattern', - elements, - start, - end, - }; + node.elements = elements; + return node; } function deserializeBindingRestElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'RestElement', - argument: deserializeBindingPattern(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'RestElement', + argument: null, + start, + end, + }; + node.argument = deserializeBindingPattern(pos + 8); + return node; } function deserializeFunction(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), params = deserializeBoxFormalParameters(pos + 56); - return { - type: deserializeFunctionType(pos + 84), - id: deserializeOptionBindingIdentifier(pos + 8), - generator: deserializeBool(pos + 85), - async: deserializeBool(pos + 86), - params, - body: deserializeOptionBoxFunctionBody(pos + 72), - expression: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeFunctionType(pos + 84), + id: null, + generator: deserializeBool(pos + 85), + async: deserializeBool(pos + 86), + params: null, + body: null, + expression: null, + start, + end, + }, + params = deserializeBoxFormalParameters(pos + 56); + node.id = deserializeOptionBindingIdentifier(pos + 8); + node.params = params; + node.body = deserializeOptionBoxFunctionBody(pos + 72); + node.expression = false; + return node; } function deserializeFunctionType(pos) { @@ -1613,12 +1833,14 @@ function deserializeFormalParameters(pos) { let params = deserializeVecFormalParameter(pos + 8); if (uint32[pos + 32 >> 2] !== 0 && uint32[pos + 36 >> 2] !== 0) { pos = uint32[pos + 32 >> 2]; - params.push({ + let rest = { type: 'RestElement', - argument: deserializeBindingPatternKind(pos + 8), + argument: null, start: deserializeU32(pos), end: deserializeU32(pos + 4), - }); + }; + rest.argument = deserializeBindingPatternKind(pos + 8); + params.push(rest); } return params; } @@ -1630,56 +1852,75 @@ function deserializeFormalParameter(pos) { } function deserializeFunctionBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), body = deserializeVecDirective(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BlockStatement', + body: null, + start, + end, + }, + body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); - return { - type: 'BlockStatement', - body, - start, - end, - }; + node.body = body; + return node; } function deserializeArrowFunctionExpression(pos) { let expression = deserializeBool(pos + 44), start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrowFunctionExpression', + expression, + async: deserializeBool(pos + 45), + params: null, + body: null, + id: null, + generator: null, + start, + end, + }, body = deserializeBoxFunctionBody(pos + 32); - return { - type: 'ArrowFunctionExpression', - expression, - async: deserializeBool(pos + 45), - params: deserializeBoxFormalParameters(pos + 16), - body: expression ? body.body[0].expression : body, - id: null, - generator: false, - start, - end, - }; + expression === true && (body = body.body[0].expression); + node.params = deserializeBoxFormalParameters(pos + 16); + node.body = body; + node.id = null; + node.generator = false; + return node; } function deserializeYieldExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'YieldExpression', - delegate: deserializeBool(pos + 24), - argument: deserializeOptionExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'YieldExpression', + delegate: deserializeBool(pos + 24), + argument: null, + start, + end, + }; + node.argument = deserializeOptionExpression(pos + 8); + return node; } function deserializeClass(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeClassType(pos + 132), - decorators: deserializeVecDecorator(pos + 8), - id: deserializeOptionBindingIdentifier(pos + 32), - superClass: deserializeOptionExpression(pos + 72), - body: deserializeBoxClassBody(pos + 120), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeClassType(pos + 132), + decorators: null, + id: null, + superClass: null, + body: null, + start, + end, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.id = deserializeOptionBindingIdentifier(pos + 32); + node.superClass = deserializeOptionExpression(pos + 72); + node.body = deserializeBoxClassBody(pos + 120); + return node; } function deserializeClassType(pos) { @@ -1694,13 +1935,16 @@ function deserializeClassType(pos) { } function deserializeClassBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ClassBody', - body: deserializeVecClassElement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ClassBody', + body: null, + start, + end, + }; + node.body = deserializeVecClassElement(pos + 8); + return node; } function deserializeClassElement(pos) { @@ -1721,18 +1965,23 @@ function deserializeClassElement(pos) { } function deserializeMethodDefinition(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeMethodDefinitionType(pos + 56), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - value: deserializeBoxFunction(pos + 48), - kind: deserializeMethodDefinitionKind(pos + 57), - computed: deserializeBool(pos + 58), - static: deserializeBool(pos + 59), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeMethodDefinitionType(pos + 56), + decorators: null, + key: null, + value: null, + kind: deserializeMethodDefinitionKind(pos + 57), + computed: deserializeBool(pos + 58), + static: deserializeBool(pos + 59), + start, + end, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeBoxFunction(pos + 48); + return node; } function deserializeMethodDefinitionType(pos) { @@ -1747,17 +1996,22 @@ function deserializeMethodDefinitionType(pos) { } function deserializePropertyDefinition(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializePropertyDefinitionType(pos + 72), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - value: deserializeOptionExpression(pos + 56), - computed: deserializeBool(pos + 73), - static: deserializeBool(pos + 74), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializePropertyDefinitionType(pos + 72), + decorators: null, + key: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + start, + end, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeOptionExpression(pos + 56); + return node; } function deserializePropertyDefinitionType(pos) { @@ -1797,13 +2051,16 @@ function deserializePrivateIdentifier(pos) { } function deserializeStaticBlock(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'StaticBlock', - body: deserializeVecStatement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'StaticBlock', + body: null, + start, + end, + }; + node.body = deserializeVecStatement(pos + 8); + return node; } function deserializeAccessorPropertyType(pos) { @@ -1818,46 +2075,59 @@ function deserializeAccessorPropertyType(pos) { } function deserializeAccessorProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeAccessorPropertyType(pos + 72), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - value: deserializeOptionExpression(pos + 56), - computed: deserializeBool(pos + 73), - static: deserializeBool(pos + 74), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeAccessorPropertyType(pos + 72), + decorators: null, + key: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + start, + end, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeOptionExpression(pos + 56); + return node; } function deserializeImportExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportExpression', - source: deserializeExpression(pos + 8), - options: deserializeOptionExpression(pos + 24), - phase: deserializeOptionImportPhase(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportExpression', + source: null, + options: null, + phase: deserializeOptionImportPhase(pos + 40), + start, + end, + }; + node.source = deserializeExpression(pos + 8); + node.options = deserializeOptionExpression(pos + 24); + return node; } function deserializeImportDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ImportDeclaration', + specifiers: null, + source: null, + phase: deserializeOptionImportPhase(pos + 88), + attributes: null, + start, + end, + }, specifiers = deserializeOptionVecImportDeclarationSpecifier(pos + 8); specifiers === null && (specifiers = []); let withClause = deserializeOptionBoxWithClause(pos + 80); - return { - type: 'ImportDeclaration', - specifiers, - source: deserializeStringLiteral(pos + 32), - phase: deserializeOptionImportPhase(pos + 88), - attributes: withClause === null ? [] : withClause.attributes, - start, - end, - }; + node.specifiers = specifiers; + node.source = deserializeStringLiteral(pos + 32); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeImportPhase(pos) { @@ -1885,34 +2155,44 @@ function deserializeImportDeclarationSpecifier(pos) { } function deserializeImportSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportSpecifier', - imported: deserializeModuleExportName(pos + 8), - local: deserializeBindingIdentifier(pos + 64), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportSpecifier', + imported: null, + local: null, + start, + end, + }; + node.imported = deserializeModuleExportName(pos + 8); + node.local = deserializeBindingIdentifier(pos + 64); + return node; } function deserializeImportDefaultSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportDefaultSpecifier', - local: deserializeBindingIdentifier(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportDefaultSpecifier', + local: null, + start, + end, + }; + node.local = deserializeBindingIdentifier(pos + 8); + return node; } function deserializeImportNamespaceSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportNamespaceSpecifier', - local: deserializeBindingIdentifier(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportNamespaceSpecifier', + local: null, + start, + end, + }; + node.local = deserializeBindingIdentifier(pos + 8); + return node; } function deserializeWithClause(pos) { @@ -1920,16 +2200,20 @@ function deserializeWithClause(pos) { } function deserializeImportAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportAttribute', - key: deserializeImportAttributeKey(pos + 8), - value: deserializeStringLiteral(pos + 64), - start, - end, - }; -} - + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportAttribute', + key: null, + value: null, + start, + end, + }; + node.key = deserializeImportAttributeKey(pos + 8); + node.value = deserializeStringLiteral(pos + 64); + return node; +} + function deserializeImportAttributeKey(pos) { switch (uint8[pos]) { case 0: @@ -1942,51 +2226,69 @@ function deserializeImportAttributeKey(pos) { } function deserializeExportNamedDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), withClause = deserializeOptionBoxWithClause(pos + 96); - return { - type: 'ExportNamedDeclaration', - declaration: deserializeOptionDeclaration(pos + 8), - specifiers: deserializeVecExportSpecifier(pos + 24), - source: deserializeOptionStringLiteral(pos + 48), - attributes: withClause === null ? [] : withClause.attributes, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportNamedDeclaration', + declaration: null, + specifiers: null, + source: null, + attributes: null, + start, + end, + }, + withClause = deserializeOptionBoxWithClause(pos + 96); + node.declaration = deserializeOptionDeclaration(pos + 8); + node.specifiers = deserializeVecExportSpecifier(pos + 24); + node.source = deserializeOptionStringLiteral(pos + 48); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeExportDefaultDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExportDefaultDeclaration', - declaration: deserializeExportDefaultDeclarationKind(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportDefaultDeclaration', + declaration: null, + start, + end, + }; + node.declaration = deserializeExportDefaultDeclarationKind(pos + 8); + return node; } function deserializeExportAllDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ExportAllDeclaration', + exported: null, + source: null, + attributes: null, + start, + end, + }, withClause = deserializeOptionBoxWithClause(pos + 112); - return { - type: 'ExportAllDeclaration', - exported: deserializeOptionModuleExportName(pos + 8), - source: deserializeStringLiteral(pos + 64), - attributes: withClause === null ? [] : withClause.attributes, - start, - end, - }; + node.exported = deserializeOptionModuleExportName(pos + 8); + node.source = deserializeStringLiteral(pos + 64); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeExportSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExportSpecifier', - local: deserializeModuleExportName(pos + 8), - exported: deserializeModuleExportName(pos + 64), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportSpecifier', + local: null, + exported: null, + start, + end, + }; + node.local = deserializeModuleExportName(pos + 8); + node.exported = deserializeModuleExportName(pos + 64); + return node; } function deserializeExportDefaultDeclarationKind(pos) { @@ -2102,36 +2404,48 @@ function deserializeModuleExportName(pos) { } function deserializeV8IntrinsicExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'V8IntrinsicExpression', - name: deserializeIdentifierName(pos + 8), - arguments: deserializeVecArgument(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'V8IntrinsicExpression', + name: null, + arguments: null, + start, + end, + }; + node.name = deserializeIdentifierName(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeBooleanLiteral(pos) { - let value = deserializeBool(pos + 8), start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Literal', - value, - raw: start === 0 && end === 0 ? null : value + '', - start, - end, - }; + let value = deserializeBool(pos + 8), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value, + raw: null, + start, + end, + }; + node.raw = start === 0 && end === 0 ? null : value + ''; + return node; } function deserializeNullLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Literal', - value: null, - raw: start === 0 && end === 0 ? null : 'null', - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: null, + start, + end, + }; + node.value = null; + node.raw = start === 0 && end === 0 ? null : 'null'; + return node; } function deserializeNumericLiteral(pos) { @@ -2146,43 +2460,58 @@ function deserializeNumericLiteral(pos) { } function deserializeStringLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), value = deserializeStr(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + start, + end, + }, + value = deserializeStr(pos + 8); deserializeBool(pos + 40) && (value = value.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); - return { - type: 'Literal', - value, - raw: deserializeOptionStr(pos + 24), - start, - end, - }; + node.value = value; + return node; } function deserializeBigIntLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), bigint = deserializeStr(pos + 8); - return { - type: 'Literal', - value: BigInt(bigint), - raw: deserializeOptionStr(pos + 24), - bigint, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + bigint: null, + start, + end, + }, + bigint = deserializeStr(pos + 8); + node.value = BigInt(bigint); + node.bigint = bigint; + return node; } function deserializeRegExpLiteral(pos) { - let regex = deserializeRegExp(pos + 8), start = deserializeU32(pos), end = deserializeU32(pos + 4), value = null; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 40), + regex: null, + start, + end, + }, + regex = deserializeRegExp(pos + 8), + value = null; try { value = new RegExp(regex.pattern, regex.flags); } catch {} - return { - type: 'Literal', - value, - raw: deserializeOptionStr(pos + 40), - regex, - start, - end, - }; + node.value = value; + node.regex = regex; + return node; } function deserializeRegExp(pos) { @@ -2207,64 +2536,85 @@ function deserializeRegExpFlags(pos) { } function deserializeJSXElement(pos) { - let closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), - start = deserializeU32(pos), + let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'JSXElement', + openingElement: null, + children: null, + closingElement: null, + start, + end, + }, + closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), openingElement = deserializeBoxJSXOpeningElement(pos + 8); closingElement === null && (openingElement.selfClosing = true); - return { - type: 'JSXElement', - openingElement, - children: deserializeVecJSXChild(pos + 16), - closingElement, - start, - end, - }; + node.openingElement = openingElement; + node.children = deserializeVecJSXChild(pos + 16); + node.closingElement = closingElement; + return node; } function deserializeJSXOpeningElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXOpeningElement', - name: deserializeJSXElementName(pos + 8), - attributes: deserializeVecJSXAttributeItem(pos + 32), - selfClosing: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXOpeningElement', + name: null, + attributes: null, + selfClosing: null, + start, + end, + }; + node.name = deserializeJSXElementName(pos + 8); + node.attributes = deserializeVecJSXAttributeItem(pos + 32); + node.selfClosing = false; + return node; } function deserializeJSXClosingElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXClosingElement', - name: deserializeJSXElementName(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXClosingElement', + name: null, + start, + end, + }; + node.name = deserializeJSXElementName(pos + 8); + return node; } function deserializeJSXFragment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXFragment', - openingFragment: deserializeJSXOpeningFragment(pos + 8), - children: deserializeVecJSXChild(pos + 16), - closingFragment: deserializeJSXClosingFragment(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXFragment', + openingFragment: null, + children: null, + closingFragment: null, + start, + end, + }; + node.openingFragment = deserializeJSXOpeningFragment(pos + 8); + node.children = deserializeVecJSXChild(pos + 16); + node.closingFragment = deserializeJSXClosingFragment(pos + 40); + return node; } function deserializeJSXOpeningFragment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXOpeningFragment', - attributes: [], - selfClosing: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXOpeningFragment', + attributes: null, + selfClosing: null, + start, + end, + }; + node.attributes = []; + node.selfClosing = false; + return node; } function deserializeJSXClosingFragment(pos) { @@ -2306,25 +2656,33 @@ function deserializeJSXElementName(pos) { } function deserializeJSXNamespacedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXNamespacedName', - namespace: deserializeJSXIdentifier(pos + 8), - name: deserializeJSXIdentifier(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXNamespacedName', + namespace: null, + name: null, + start, + end, + }; + node.namespace = deserializeJSXIdentifier(pos + 8); + node.name = deserializeJSXIdentifier(pos + 32); + return node; } function deserializeJSXMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXMemberExpression', - object: deserializeJSXMemberExpressionObject(pos + 8), - property: deserializeJSXIdentifier(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXMemberExpression', + object: null, + property: null, + start, + end, + }; + node.object = deserializeJSXMemberExpressionObject(pos + 8); + node.property = deserializeJSXIdentifier(pos + 24); + return node; } function deserializeJSXMemberExpressionObject(pos) { @@ -2353,13 +2711,16 @@ function deserializeJSXMemberExpressionObject(pos) { } function deserializeJSXExpressionContainer(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXExpressionContainer', - expression: deserializeJSXExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXExpressionContainer', + expression: null, + start, + end, + }; + node.expression = deserializeJSXExpression(pos + 8); + return node; } function deserializeJSXExpression(pos) { @@ -2478,24 +2839,31 @@ function deserializeJSXAttributeItem(pos) { } function deserializeJSXAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXAttribute', - name: deserializeJSXAttributeName(pos + 8), - value: deserializeOptionJSXAttributeValue(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXAttribute', + name: null, + value: null, + start, + end, + }; + node.name = deserializeJSXAttributeName(pos + 8); + node.value = deserializeOptionJSXAttributeValue(pos + 24); + return node; } function deserializeJSXSpreadAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXSpreadAttribute', - argument: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXSpreadAttribute', + argument: null, + start, + end, + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeJSXAttributeName(pos) { @@ -2552,13 +2920,16 @@ function deserializeJSXChild(pos) { } function deserializeJSXSpreadChild(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXSpreadChild', - expression: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXSpreadChild', + expression: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeJSXText(pos) { @@ -2573,51 +2944,69 @@ function deserializeJSXText(pos) { } function deserializeTSThisParameter(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: 'this', - optional: false, - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 16), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: null, + optional: null, + typeAnnotation: null, + start, + end, + }; + node.decorators = []; + node.name = 'this'; + node.optional = false; + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + return node; } function deserializeTSEnumDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumDeclaration', - id: deserializeBindingIdentifier(pos + 8), - body: deserializeTSEnumBody(pos + 40), - const: deserializeBool(pos + 76), - declare: deserializeBool(pos + 77), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumDeclaration', + id: null, + body: null, + const: deserializeBool(pos + 76), + declare: deserializeBool(pos + 77), + start, + end, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.body = deserializeTSEnumBody(pos + 40); + return node; } function deserializeTSEnumBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumBody', - members: deserializeVecTSEnumMember(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumBody', + members: null, + start, + end, + }; + node.members = deserializeVecTSEnumMember(pos + 8); + return node; } function deserializeTSEnumMember(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumMember', - id: deserializeTSEnumMemberName(pos + 8), - initializer: deserializeOptionExpression(pos + 24), - computed: deserializeU8(pos + 8) > 1, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumMember', + id: null, + initializer: null, + computed: null, + start, + end, + }; + node.id = deserializeTSEnumMemberName(pos + 8); + node.initializer = deserializeOptionExpression(pos + 24); + node.computed = deserializeU8(pos + 8) > 1; + return node; } function deserializeTSEnumMemberName(pos) { @@ -2636,23 +3025,29 @@ function deserializeTSEnumMemberName(pos) { } function deserializeTSTypeAnnotation(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAnnotation', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAnnotation', + typeAnnotation: null, + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSLiteralType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSLiteralType', - literal: deserializeTSLiteral(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSLiteralType', + literal: null, + start, + end, + }; + node.literal = deserializeTSLiteral(pos + 8); + return node; } function deserializeTSLiteral(pos) { @@ -2756,58 +3151,74 @@ function deserializeTSType(pos) { } function deserializeTSConditionalType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConditionalType', - checkType: deserializeTSType(pos + 8), - extendsType: deserializeTSType(pos + 24), - trueType: deserializeTSType(pos + 40), - falseType: deserializeTSType(pos + 56), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConditionalType', + checkType: null, + extendsType: null, + trueType: null, + falseType: null, + start, + end, + }; + node.checkType = deserializeTSType(pos + 8); + node.extendsType = deserializeTSType(pos + 24); + node.trueType = deserializeTSType(pos + 40); + node.falseType = deserializeTSType(pos + 56); + return node; } function deserializeTSUnionType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSUnionType', - types: deserializeVecTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSUnionType', + types: null, + start, + end, + }; + node.types = deserializeVecTSType(pos + 8); + return node; } function deserializeTSIntersectionType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIntersectionType', - types: deserializeVecTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIntersectionType', + types: null, + start, + end, + }; + node.types = deserializeVecTSType(pos + 8); + return node; } function deserializeTSParenthesizedType(pos) { - let node = deserializeTSType(pos + 8); + let node; node = { type: 'TSParenthesizedType', - typeAnnotation: node, + typeAnnotation: null, start: deserializeU32(pos), end: deserializeU32(pos + 4), }; + node.typeAnnotation = deserializeTSType(pos + 8); return node; } function deserializeTSTypeOperator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeOperator', - operator: deserializeTSTypeOperatorOperator(pos + 24), - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeOperator', + operator: deserializeTSTypeOperatorOperator(pos + 24), + typeAnnotation: null, + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSTypeOperatorOperator(pos) { @@ -2824,66 +3235,86 @@ function deserializeTSTypeOperatorOperator(pos) { } function deserializeTSArrayType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSArrayType', - elementType: deserializeTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSArrayType', + elementType: null, + start, + end, + }; + node.elementType = deserializeTSType(pos + 8); + return node; } function deserializeTSIndexedAccessType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIndexedAccessType', - objectType: deserializeTSType(pos + 8), - indexType: deserializeTSType(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIndexedAccessType', + objectType: null, + indexType: null, + start, + end, + }; + node.objectType = deserializeTSType(pos + 8); + node.indexType = deserializeTSType(pos + 24); + return node; } function deserializeTSTupleType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTupleType', - elementTypes: deserializeVecTSTupleElement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTupleType', + elementTypes: null, + start, + end, + }; + node.elementTypes = deserializeVecTSTupleElement(pos + 8); + return node; } function deserializeTSNamedTupleMember(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNamedTupleMember', - label: deserializeIdentifierName(pos + 8), - elementType: deserializeTSTupleElement(pos + 32), - optional: deserializeBool(pos + 48), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNamedTupleMember', + label: null, + elementType: null, + optional: deserializeBool(pos + 48), + start, + end, + }; + node.label = deserializeIdentifierName(pos + 8); + node.elementType = deserializeTSTupleElement(pos + 32); + return node; } function deserializeTSOptionalType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSOptionalType', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSOptionalType', + typeAnnotation: null, + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSRestType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSRestType', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSRestType', + typeAnnotation: null, + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSTupleElement(pos) { @@ -3098,14 +3529,18 @@ function deserializeTSBigIntKeyword(pos) { } function deserializeTSTypeReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeReference', - typeName: deserializeTSTypeName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeReference', + typeName: null, + typeArguments: null, + start, + end, + }; + node.typeName = deserializeTSTypeName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypeName(pos) { @@ -3122,104 +3557,139 @@ function deserializeTSTypeName(pos) { } function deserializeTSQualifiedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSQualifiedName', - left: deserializeTSTypeName(pos + 8), - right: deserializeIdentifierName(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + }; + node.left = deserializeTSTypeName(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + return node; } function deserializeTSTypeParameterInstantiation(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameterInstantiation', - params: deserializeVecTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameterInstantiation', + params: null, + start, + end, + }; + node.params = deserializeVecTSType(pos + 8); + return node; } function deserializeTSTypeParameter(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameter', - name: deserializeBindingIdentifier(pos + 8), - constraint: deserializeOptionTSType(pos + 40), - default: deserializeOptionTSType(pos + 56), - in: deserializeBool(pos + 72), - out: deserializeBool(pos + 73), - const: deserializeBool(pos + 74), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameter', + name: null, + constraint: null, + default: null, + in: deserializeBool(pos + 72), + out: deserializeBool(pos + 73), + const: deserializeBool(pos + 74), + start, + end, + }; + node.name = deserializeBindingIdentifier(pos + 8); + node.constraint = deserializeOptionTSType(pos + 40); + node.default = deserializeOptionTSType(pos + 56); + return node; } function deserializeTSTypeParameterDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameterDeclaration', - params: deserializeVecTSTypeParameter(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameterDeclaration', + params: null, + start, + end, + }; + node.params = deserializeVecTSTypeParameter(pos + 8); + return node; } function deserializeTSTypeAliasDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAliasDeclaration', - id: deserializeBindingIdentifier(pos + 8), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - typeAnnotation: deserializeTSType(pos + 48), - declare: deserializeBool(pos + 68), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAliasDeclaration', + id: null, + typeParameters: null, + typeAnnotation: null, + declare: deserializeBool(pos + 68), + start, + end, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.typeAnnotation = deserializeTSType(pos + 48); + return node; } function deserializeTSInterfaceDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceDeclaration', - id: deserializeBindingIdentifier(pos + 8), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - extends: deserializeVecTSInterfaceHeritage(pos + 48), - body: deserializeBoxTSInterfaceBody(pos + 72), - declare: deserializeBool(pos + 84), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceDeclaration', + id: null, + typeParameters: null, + extends: null, + body: null, + declare: deserializeBool(pos + 84), + start, + end, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.extends = deserializeVecTSInterfaceHeritage(pos + 48); + node.body = deserializeBoxTSInterfaceBody(pos + 72); + return node; } function deserializeTSInterfaceBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceBody', - body: deserializeVecTSSignature(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceBody', + body: null, + start, + end, + }; + node.body = deserializeVecTSSignature(pos + 8); + return node; } function deserializeTSPropertySignature(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSPropertySignature', - computed: deserializeBool(pos + 32), - optional: deserializeBool(pos + 33), - readonly: deserializeBool(pos + 34), - key: deserializePropertyKey(pos + 8), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - accessibility: null, - static: false, - start, - end, - }; -} - + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSPropertySignature', + computed: deserializeBool(pos + 32), + optional: deserializeBool(pos + 33), + readonly: deserializeBool(pos + 34), + key: null, + typeAnnotation: null, + accessibility: null, + static: null, + start, + end, + }; + node.key = deserializePropertyKey(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.accessibility = null; + node.static = false; + return node; +} + function deserializeTSSignature(pos) { switch (uint8[pos]) { case 0: @@ -3238,33 +3708,42 @@ function deserializeTSSignature(pos) { } function deserializeTSIndexSignature(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIndexSignature', - parameters: deserializeVecTSIndexSignatureName(pos + 8), - typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 32), - readonly: deserializeBool(pos + 40), - static: deserializeBool(pos + 41), - accessibility: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIndexSignature', + parameters: null, + typeAnnotation: null, + readonly: deserializeBool(pos + 40), + static: deserializeBool(pos + 41), + accessibility: null, + start, + end, + }; + node.parameters = deserializeVecTSIndexSignatureName(pos + 8); + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 32); + node.accessibility = null; + return node; } function deserializeTSCallSignatureDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSCallSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + }, params = deserializeBoxFormalParameters(pos + 24), thisParam = deserializeOptionBoxTSThisParameter(pos + 16); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSCallSignatureDeclaration', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 32), - start, - end, - }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 32); + return node; } function deserializeTSMethodSignatureKind(pos) { @@ -3283,72 +3762,98 @@ function deserializeTSMethodSignatureKind(pos) { function deserializeTSMethodSignature(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSMethodSignature', + key: null, + computed: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + kind: deserializeTSMethodSignatureKind(pos + 62), + typeParameters: null, + params: null, + returnType: null, + accessibility: null, + readonly: null, + static: null, + start, + end, + }, params = deserializeBoxFormalParameters(pos + 40), thisParam = deserializeOptionBoxTSThisParameter(pos + 32); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSMethodSignature', - key: deserializePropertyKey(pos + 8), - computed: deserializeBool(pos + 60), - optional: deserializeBool(pos + 61), - kind: deserializeTSMethodSignatureKind(pos + 62), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 24), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 48), - accessibility: null, - readonly: false, - static: false, - start, - end, - }; + node.key = deserializePropertyKey(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 24); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.accessibility = null; + node.readonly = false; + node.static = false; + return node; } function deserializeTSConstructSignatureDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConstructSignatureDeclaration', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConstructSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSIndexSignatureName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSInterfaceHeritage(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceHeritage', - expression: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceHeritage', + expression: null, + typeArguments: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypePredicate(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypePredicate', - parameterName: deserializeTSTypePredicateName(pos + 8), - asserts: deserializeBool(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypePredicate', + parameterName: null, + asserts: deserializeBool(pos + 32), + typeAnnotation: null, + start, + end, + }; + node.parameterName = deserializeTSTypePredicateName(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSTypePredicateName(pos) { @@ -3368,51 +3873,23 @@ function deserializeTSModuleDeclaration(pos) { start = deserializeU32(pos), end = deserializeU32(pos + 4), declare = deserializeBool(pos + 85), - id = deserializeTSModuleDeclarationName(pos + 8), + node, body = deserializeOptionTSModuleDeclarationBody(pos + 64); - // Flatten `body`, and nest `id` - if (body !== null && body.type === 'TSModuleDeclaration') { - let innerId = body.id; - if (innerId.type === 'Identifier') { - id = { - type: 'TSQualifiedName', - left: id, - right: innerId, - start: id.start, - end: innerId.end, - }; - } else { - // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of - // this module on left, and previous `left` of innermost `TSQualifiedName` on right - for (;;) { - innerId.start = id.start; - if (innerId.left.type === 'Identifier') break; - innerId = innerId.left; - } - innerId.left = { - type: 'TSQualifiedName', - left: id, - right: innerId.left, - start: id.start, - end: innerId.left.end, - }; - id = body.id; - } - body = Object.hasOwn(body, 'body') ? body.body : null; - } - return body === null - ? { + if (body === null) { + node = { type: 'TSModuleDeclaration', - id, + id: null, kind, declare, global, start, end, - } - : { + }; + node.id = deserializeTSModuleDeclarationName(pos + 8); + } else { + node = { type: 'TSModuleDeclaration', - id, + id: null, body, kind, declare, @@ -3420,6 +3897,44 @@ function deserializeTSModuleDeclaration(pos) { start, end, }; + let id = deserializeTSModuleDeclarationName(pos + 8); + if (body.type === 'TSModuleBlock') node.id = id; + else { + let innerId = body.id; + if (innerId.type === 'Identifier') { + node.id = { + type: 'TSQualifiedName', + left: id, + right: innerId, + start: id.start, + end: innerId.end, + }; + } else { + // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of + // this module on left, and previous `left` of innermost `TSQualifiedName` on right + node.id = innerId; + let { start } = id; + for (;;) { + innerId.start = start; + if (innerId.left.type === 'Identifier') break; + innerId = innerId.left; + } + let right = innerId.left; + innerId.left = { + type: 'TSQualifiedName', + left: id, + right, + start, + end: right.end, + }; + } + if (Object.hasOwn(body, 'body')) { + body = body.body; + node.body = body; + } else body = null; + } + } + return node; } function deserializeTSModuleDeclarationKind(pos) { @@ -3458,45 +3973,59 @@ function deserializeTSModuleDeclarationBody(pos) { } function deserializeTSModuleBlock(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), body = deserializeVecDirective(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSModuleBlock', + body: null, + start, + end, + }, + body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); - return { - type: 'TSModuleBlock', - body, - start, - end, - }; + node.body = body; + return node; } function deserializeTSTypeLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeLiteral', - members: deserializeVecTSSignature(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeLiteral', + members: null, + start, + end, + }; + node.members = deserializeVecTSSignature(pos + 8); + return node; } function deserializeTSInferType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInferType', - typeParameter: deserializeBoxTSTypeParameter(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInferType', + typeParameter: null, + start, + end, + }; + node.typeParameter = deserializeBoxTSTypeParameter(pos + 8); + return node; } function deserializeTSTypeQuery(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeQuery', - exprName: deserializeTSTypeQueryExprName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeQuery', + exprName: null, + typeArguments: null, + start, + end, + }; + node.exprName = deserializeTSTypeQueryExprName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypeQueryExprName(pos) { @@ -3515,16 +4044,22 @@ function deserializeTSTypeQueryExprName(pos) { } function deserializeTSImportType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSImportType', - argument: deserializeTSType(pos + 8), - options: deserializeOptionBoxObjectExpression(pos + 24), - qualifier: deserializeOptionTSImportTypeQualifier(pos + 32), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 48), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSImportType', + argument: null, + options: null, + qualifier: null, + typeArguments: null, + start, + end, + }; + node.argument = deserializeTSType(pos + 8); + node.options = deserializeOptionBoxObjectExpression(pos + 24); + node.qualifier = deserializeOptionTSImportTypeQualifier(pos + 32); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 48); + return node; } function deserializeTSImportTypeQualifier(pos) { @@ -3539,62 +4074,83 @@ function deserializeTSImportTypeQualifier(pos) { } function deserializeTSImportTypeQualifiedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSQualifiedName', - left: deserializeTSImportTypeQualifier(pos + 8), - right: deserializeIdentifierName(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + }; + node.left = deserializeTSImportTypeQualifier(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + return node; } function deserializeTSFunctionType(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSFunctionType', + typeParameters: null, + params: null, + returnType: null, + start, + end, + }, params = deserializeBoxFormalParameters(pos + 24), thisParam = deserializeOptionBoxTSThisParameter(pos + 16); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSFunctionType', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params, - returnType: deserializeBoxTSTypeAnnotation(pos + 32), - start, - end, - }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeBoxTSTypeAnnotation(pos + 32); + return node; } function deserializeTSConstructorType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConstructorType', - abstract: deserializeBool(pos + 32), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeBoxTSTypeAnnotation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConstructorType', + abstract: deserializeBool(pos + 32), + typeParameters: null, + params: null, + returnType: null, + start, + end, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSMappedType(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSMappedType', + key: null, + constraint: null, + nameType: null, + typeAnnotation: null, + optional: null, + readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), + start, + end, + }, typeParameter = deserializeBoxTSTypeParameter(pos + 8), + key = typeParameter.name, + { constraint } = typeParameter, optional = deserializeOptionTSMappedTypeModifierOperator(pos + 52); optional === null && (optional = false); - return { - type: 'TSMappedType', - key: typeParameter.name, - constraint: typeParameter.constraint, - nameType: deserializeOptionTSType(pos + 16), - typeAnnotation: deserializeOptionTSType(pos + 32), - optional, - readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), - start, - end, - }; + node.key = key; + node.constraint = constraint; + node.nameType = deserializeOptionTSType(pos + 16); + node.typeAnnotation = deserializeOptionTSType(pos + 32); + node.optional = optional; + return node; } function deserializeTSMappedTypeModifierOperator(pos) { @@ -3611,59 +4167,79 @@ function deserializeTSMappedTypeModifierOperator(pos) { } function deserializeTSTemplateLiteralType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTemplateLiteralType', - quasis: deserializeVecTemplateElement(pos + 8), - types: deserializeVecTSType(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTemplateLiteralType', + quasis: null, + types: null, + start, + end, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.types = deserializeVecTSType(pos + 32); + return node; } function deserializeTSAsExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSAsExpression', - expression: deserializeExpression(pos + 8), - typeAnnotation: deserializeTSType(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSAsExpression', + expression: null, + typeAnnotation: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + return node; } function deserializeTSSatisfiesExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSSatisfiesExpression', - expression: deserializeExpression(pos + 8), - typeAnnotation: deserializeTSType(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSSatisfiesExpression', + expression: null, + typeAnnotation: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + return node; } function deserializeTSTypeAssertion(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAssertion', - typeAnnotation: deserializeTSType(pos + 8), - expression: deserializeExpression(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAssertion', + typeAnnotation: null, + expression: null, + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + node.expression = deserializeExpression(pos + 24); + return node; } function deserializeTSImportEqualsDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSImportEqualsDeclaration', - id: deserializeBindingIdentifier(pos + 8), - moduleReference: deserializeTSModuleReference(pos + 40), - importKind: deserializeImportOrExportKind(pos + 56), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSImportEqualsDeclaration', + id: null, + moduleReference: null, + importKind: deserializeImportOrExportKind(pos + 56), + start, + end, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.moduleReference = deserializeTSModuleReference(pos + 40); + return node; } function deserializeTSModuleReference(pos) { @@ -3682,64 +4258,83 @@ function deserializeTSModuleReference(pos) { } function deserializeTSExternalModuleReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSExternalModuleReference', - expression: deserializeStringLiteral(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSExternalModuleReference', + expression: null, + start, + end, + }; + node.expression = deserializeStringLiteral(pos + 8); + return node; } function deserializeTSNonNullExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNonNullExpression', - expression: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNonNullExpression', + expression: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeDecorator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Decorator', - expression: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Decorator', + expression: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeTSExportAssignment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSExportAssignment', - expression: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSExportAssignment', + expression: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeTSNamespaceExportDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNamespaceExportDeclaration', - id: deserializeIdentifierName(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNamespaceExportDeclaration', + id: null, + start, + end, + }; + node.id = deserializeIdentifierName(pos + 8); + return node; } function deserializeTSInstantiationExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInstantiationExpression', - expression: deserializeExpression(pos + 8), - typeArguments: deserializeBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInstantiationExpression', + expression: null, + typeArguments: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeImportOrExportKind(pos) { @@ -3754,25 +4349,31 @@ function deserializeImportOrExportKind(pos) { } function deserializeJSDocNullableType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSJSDocNullableType', - typeAnnotation: deserializeTSType(pos + 8), - postfix: deserializeBool(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSJSDocNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeJSDocNonNullableType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSJSDocNonNullableType', - typeAnnotation: deserializeTSType(pos + 8), - postfix: deserializeBool(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSJSDocNonNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeJSDocUnknownType(pos) { @@ -3799,13 +4400,15 @@ function deserializeComment(pos) { let type = deserializeCommentKind(pos + 12), start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type, + value: null, + start, + end, + }, endCut = type === 'Line' ? 0 : 2; - return { - type, - value: sourceText.slice(start + 2, end - endCut), - start, - end, - }; + node.value = sourceText.slice(start + 2, end - endCut); + return node; } function deserializeNameSpan(pos) { diff --git a/napi/parser/generated/deserialize/js_parent.js b/napi/parser/generated/deserialize/js_parent.js new file mode 100644 index 0000000000000..ff96044c1d1c9 --- /dev/null +++ b/napi/parser/generated/deserialize/js_parent.js @@ -0,0 +1,6597 @@ +// Auto-generated code, DO NOT EDIT DIRECTLY! +// To edit this generated file you have to edit `tasks/ast_tools/src/generators/raw_transfer.rs`. + +let uint8, uint32, float64, sourceText, sourceIsAscii, sourceByteLen; +const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true }), + decodeStr = textDecoder.decode.bind(textDecoder), + { fromCodePoint } = String; +let parent = null; + +export function deserialize(buffer, sourceText, sourceByteLen) { + return deserializeWith(buffer, sourceText, sourceByteLen, deserializeRawTransferData); +} + +export function deserializeProgramOnly(buffer, sourceText, sourceByteLen) { + return deserializeWith(buffer, sourceText, sourceByteLen, deserializeProgram); +} + +function deserializeWith(buffer, sourceTextInput, sourceByteLenInput, deserialize) { + uint8 = buffer; + uint32 = buffer.uint32; + float64 = buffer.float64; + sourceText = sourceTextInput; + sourceByteLen = sourceByteLenInput; + sourceIsAscii = sourceText.length === sourceByteLen; + let data = deserialize(uint32[536870902]); + uint8 = + uint32 = + float64 = + sourceText = + void 0; + return data; +} + +function deserializeProgram(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + program = parent = { + type: 'Program', + body: null, + sourceType: deserializeModuleKind(pos + 125), + hashbang: null, + start, + end, + parent: null, + }; + program.hashbang = deserializeOptionHashbang(pos + 48); + (program.body = deserializeVecDirective(pos + 72)).push(...deserializeVecStatement(pos + 96)); + parent = null; + return program; +} + +function deserializeExpression(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Expression`); + } +} + +function deserializeIdentifierName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + name: deserializeStr(pos + 8), + start, + end, + parent, + }; + parent = previousParent; + return node; +} + +function deserializeIdentifierReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + name: deserializeStr(pos + 8), + start, + end, + parent, + }; + parent = previousParent; + return node; +} + +function deserializeBindingIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + name: deserializeStr(pos + 8), + start, + end, + parent, + }; + parent = previousParent; + return node; +} + +function deserializeLabelIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + name: deserializeStr(pos + 8), + start, + end, + parent, + }; + parent = previousParent; + return node; +} + +function deserializeThisExpression(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'ThisExpression', + start, + end, + parent, + }; +} + +function deserializeArrayExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayExpression', + elements: null, + start, + end, + parent, + }; + node.elements = deserializeVecArrayExpressionElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeArrayExpressionElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxSpreadElement(pos + 8); + case 65: + return deserializeElision(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ArrayExpressionElement`); + } +} + +function deserializeElision(pos) { + return null; +} + +function deserializeObjectExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectExpression', + properties: null, + start, + end, + parent, + }; + node.properties = deserializeVecObjectPropertyKind(pos + 8); + parent = previousParent; + return node; +} + +function deserializeObjectPropertyKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxObjectProperty(pos + 8); + case 1: + return deserializeBoxSpreadElement(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ObjectPropertyKind`); + } +} + +function deserializeObjectProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: deserializePropertyKind(pos + 40), + key: null, + value: null, + method: deserializeBool(pos + 41), + shorthand: deserializeBool(pos + 42), + computed: deserializeBool(pos + 43), + start, + end, + parent, + }; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializePropertyKey(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxIdentifierName(pos + 8); + case 65: + return deserializeBoxPrivateIdentifier(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyKey`); + } +} + +function deserializePropertyKind(pos) { + switch (uint8[pos]) { + case 0: + return 'init'; + case 1: + return 'get'; + case 2: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyKind`); + } +} + +function deserializeTemplateLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TemplateLiteral', + quasis: null, + expressions: null, + start, + end, + parent, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.expressions = deserializeVecExpression(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTaggedTemplateExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TaggedTemplateExpression', + tag: null, + quasi: null, + start, + end, + parent, + }; + node.tag = deserializeExpression(pos + 8); + node.quasi = deserializeTemplateLiteral(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTemplateElement(pos) { + let tail = deserializeBool(pos + 40), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + value = deserializeTemplateElementValue(pos + 8); + value.cooked !== null && deserializeBool(pos + 41) && + (value.cooked = value.cooked.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); + return { + type: 'TemplateElement', + value, + tail, + start, + end, + parent, + }; +} + +function deserializeTemplateElementValue(pos) { + return { + raw: deserializeStr(pos), + cooked: deserializeOptionStr(pos + 16), + }; +} + +function deserializeComputedMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 40), + computed: null, + start, + end, + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeExpression(pos + 24); + node.computed = true; + parent = previousParent; + return node; +} + +function deserializeStaticMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeIdentifierName(pos + 24); + node.computed = false; + parent = previousParent; + return node; +} + +function deserializePrivateFieldExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializePrivateIdentifier(pos + 24); + node.computed = false; + parent = previousParent; + return node; +} + +function deserializeCallExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'CallExpression', + callee: null, + arguments: null, + optional: deserializeBool(pos + 56), + start, + end, + parent, + }; + node.callee = deserializeExpression(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeNewExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'NewExpression', + callee: null, + arguments: null, + start, + end, + parent, + }; + node.callee = deserializeExpression(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeMetaProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MetaProperty', + meta: null, + property: null, + start, + end, + parent, + }; + node.meta = deserializeIdentifierName(pos + 8); + node.property = deserializeIdentifierName(pos + 32); + parent = previousParent; + return node; +} + +function deserializeSpreadElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SpreadElement', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeArgument(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxSpreadElement(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Argument`); + } +} + +function deserializeUpdateExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'UpdateExpression', + operator: deserializeUpdateOperator(pos + 24), + prefix: deserializeBool(pos + 25), + argument: null, + start, + end, + parent, + }; + node.argument = deserializeSimpleAssignmentTarget(pos + 8); + parent = previousParent; + return node; +} + +function deserializeUnaryExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'UnaryExpression', + operator: deserializeUnaryOperator(pos + 24), + argument: null, + prefix: null, + start, + end, + parent, + }; + node.argument = deserializeExpression(pos + 8); + node.prefix = true; + parent = previousParent; + return node; +} + +function deserializeBinaryExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BinaryExpression', + left: null, + operator: deserializeBinaryOperator(pos + 40), + right: null, + start, + end, + parent, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializePrivateInExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BinaryExpression', + left: null, + operator: null, + right: null, + start, + end, + parent, + }; + node.left = deserializePrivateIdentifier(pos + 8); + node.operator = 'in'; + node.right = deserializeExpression(pos + 32); + parent = previousParent; + return node; +} + +function deserializeLogicalExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'LogicalExpression', + left: null, + operator: deserializeLogicalOperator(pos + 40), + right: null, + start, + end, + parent, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeConditionalExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ConditionalExpression', + test: null, + consequent: null, + alternate: null, + start, + end, + parent, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeExpression(pos + 24); + node.alternate = deserializeExpression(pos + 40); + parent = previousParent; + return node; +} + +function deserializeAssignmentExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentExpression', + operator: deserializeAssignmentOperator(pos + 40), + left: null, + right: null, + start, + end, + parent, + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeAssignmentTarget(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTarget`); + } +} + +function deserializeSimpleAssignmentTarget(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for SimpleAssignmentTarget`); + } +} + +function deserializeArrayAssignmentTarget(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayPattern', + elements: null, + start, + end, + parent, + }, + elements = deserializeVecOptionAssignmentTargetMaybeDefault(pos + 8), + rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); + rest !== null && elements.push(rest); + node.elements = elements; + parent = previousParent; + return node; +} + +function deserializeObjectAssignmentTarget(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectPattern', + properties: null, + start, + end, + parent, + }, + properties = deserializeVecAssignmentTargetProperty(pos + 8), + rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); + rest !== null && properties.push(rest); + node.properties = properties; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetRest(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'RestElement', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeAssignmentTarget(pos + 8); + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetMaybeDefault(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 16: + return deserializeBoxAssignmentTargetWithDefault(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTargetMaybeDefault`); + } +} + +function deserializeAssignmentTargetWithDefault(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentPattern', + left: null, + right: null, + start, + end, + parent, + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetProperty(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxAssignmentTargetPropertyIdentifier(pos + 8); + case 1: + return deserializeBoxAssignmentTargetPropertyProperty(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTargetProperty`); + } +} + +function deserializeAssignmentTargetPropertyIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: null, + start, + end, + parent, + }, + key = deserializeIdentifierReference(pos + 8), + init = deserializeOptionExpression(pos + 40), + value = { ...key }; + if (init !== null) { + let left = value, previousParent = parent; + value = parent = { + type: 'AssignmentPattern', + left, + right: init, + start, + end, + parent, + }; + left.parent = value; + init.parent = value; + parent = previousParent; + } + node.kind = 'init'; + node.key = key; + node.value = value; + node.method = false; + node.shorthand = true; + node.computed = false; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetPropertyProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: deserializeBool(pos + 40), + start, + end, + parent, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeAssignmentTargetMaybeDefault(pos + 24); + node.method = false; + node.shorthand = false; + parent = previousParent; + return node; +} + +function deserializeSequenceExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SequenceExpression', + expressions: null, + start, + end, + parent, + }; + node.expressions = deserializeVecExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeSuper(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Super', + start, + end, + parent, + }; +} + +function deserializeAwaitExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AwaitExpression', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeChainExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ChainExpression', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeChainElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeChainElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxCallExpression(pos + 8); + case 1: + return deserializeBoxTSNonNullExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ChainElement`); + } +} + +function deserializeParenthesizedExpression(pos) { + let node; + { + let previousParent = parent; + node = parent = { + type: 'ParenthesizedExpression', + expression: null, + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + } + return node; +} + +function deserializeStatement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBlockStatement(pos + 8); + case 1: + return deserializeBoxBreakStatement(pos + 8); + case 2: + return deserializeBoxContinueStatement(pos + 8); + case 3: + return deserializeBoxDebuggerStatement(pos + 8); + case 4: + return deserializeBoxDoWhileStatement(pos + 8); + case 5: + return deserializeBoxEmptyStatement(pos + 8); + case 6: + return deserializeBoxExpressionStatement(pos + 8); + case 7: + return deserializeBoxForInStatement(pos + 8); + case 8: + return deserializeBoxForOfStatement(pos + 8); + case 9: + return deserializeBoxForStatement(pos + 8); + case 10: + return deserializeBoxIfStatement(pos + 8); + case 11: + return deserializeBoxLabeledStatement(pos + 8); + case 12: + return deserializeBoxReturnStatement(pos + 8); + case 13: + return deserializeBoxSwitchStatement(pos + 8); + case 14: + return deserializeBoxThrowStatement(pos + 8); + case 15: + return deserializeBoxTryStatement(pos + 8); + case 16: + return deserializeBoxWhileStatement(pos + 8); + case 17: + return deserializeBoxWithStatement(pos + 8); + case 32: + return deserializeBoxVariableDeclaration(pos + 8); + case 33: + return deserializeBoxFunction(pos + 8); + case 34: + return deserializeBoxClass(pos + 8); + case 35: + return deserializeBoxTSTypeAliasDeclaration(pos + 8); + case 36: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + case 37: + return deserializeBoxTSEnumDeclaration(pos + 8); + case 38: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 39: + return deserializeBoxTSImportEqualsDeclaration(pos + 8); + case 64: + return deserializeBoxImportDeclaration(pos + 8); + case 65: + return deserializeBoxExportAllDeclaration(pos + 8); + case 66: + return deserializeBoxExportDefaultDeclaration(pos + 8); + case 67: + return deserializeBoxExportNamedDeclaration(pos + 8); + case 68: + return deserializeBoxTSExportAssignment(pos + 8); + case 69: + return deserializeBoxTSNamespaceExportDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Statement`); + } +} + +function deserializeDirective(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExpressionStatement', + expression: null, + directive: deserializeStr(pos + 56), + start, + end, + parent, + }; + node.expression = deserializeStringLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeHashbang(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Hashbang', + value: deserializeStr(pos + 8), + start, + end, + parent, + }; +} + +function deserializeBlockStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BlockStatement', + body: null, + start, + end, + parent, + }; + node.body = deserializeVecStatement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeDeclaration(pos) { + switch (uint8[pos]) { + case 32: + return deserializeBoxVariableDeclaration(pos + 8); + case 33: + return deserializeBoxFunction(pos + 8); + case 34: + return deserializeBoxClass(pos + 8); + case 35: + return deserializeBoxTSTypeAliasDeclaration(pos + 8); + case 36: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + case 37: + return deserializeBoxTSEnumDeclaration(pos + 8); + case 38: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 39: + return deserializeBoxTSImportEqualsDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Declaration`); + } +} + +function deserializeVariableDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'VariableDeclaration', + kind: deserializeVariableDeclarationKind(pos + 32), + declarations: null, + start, + end, + parent, + }; + node.declarations = deserializeVecVariableDeclarator(pos + 8); + parent = previousParent; + return node; +} + +function deserializeVariableDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return 'var'; + case 1: + return 'let'; + case 2: + return 'const'; + case 3: + return 'using'; + case 4: + return 'await using'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for VariableDeclarationKind`); + } +} + +function deserializeVariableDeclarator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'VariableDeclarator', + id: null, + init: null, + start, + end, + parent, + }; + node.id = deserializeBindingPattern(pos + 8); + node.init = deserializeOptionExpression(pos + 40); + parent = previousParent; + return node; +} + +function deserializeEmptyStatement(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'EmptyStatement', + start, + end, + parent, + }; +} + +function deserializeExpressionStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExpressionStatement', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeIfStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'IfStatement', + test: null, + consequent: null, + alternate: null, + start, + end, + parent, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeStatement(pos + 24); + node.alternate = deserializeOptionStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeDoWhileStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'DoWhileStatement', + body: null, + test: null, + start, + end, + parent, + }; + node.body = deserializeStatement(pos + 8); + node.test = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeWhileStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'WhileStatement', + test: null, + body: null, + start, + end, + parent, + }; + node.test = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeForStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForStatement', + init: null, + test: null, + update: null, + body: null, + start, + end, + parent, + }; + node.init = deserializeOptionForStatementInit(pos + 8); + node.test = deserializeOptionExpression(pos + 24); + node.update = deserializeOptionExpression(pos + 40); + node.body = deserializeStatement(pos + 56); + parent = previousParent; + return node; +} + +function deserializeForStatementInit(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxVariableDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ForStatementInit`); + } +} + +function deserializeForInStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForInStatement', + left: null, + right: null, + body: null, + start, + end, + parent, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeForStatementLeft(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 16: + return deserializeBoxVariableDeclaration(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ForStatementLeft`); + } +} + +function deserializeForOfStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForOfStatement', + await: deserializeBool(pos + 60), + left: null, + right: null, + body: null, + start, + end, + parent, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeContinueStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ContinueStatement', + label: null, + start, + end, + parent, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeBreakStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BreakStatement', + label: null, + start, + end, + parent, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeReturnStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ReturnStatement', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeOptionExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeWithStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'WithStatement', + object: null, + body: null, + start, + end, + parent, + }; + node.object = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeSwitchStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SwitchStatement', + discriminant: null, + cases: null, + start, + end, + parent, + }; + node.discriminant = deserializeExpression(pos + 8); + node.cases = deserializeVecSwitchCase(pos + 24); + parent = previousParent; + return node; +} + +function deserializeSwitchCase(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SwitchCase', + test: null, + consequent: null, + start, + end, + parent, + }; + node.test = deserializeOptionExpression(pos + 8); + node.consequent = deserializeVecStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeLabeledStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'LabeledStatement', + label: null, + body: null, + start, + end, + parent, + }; + node.label = deserializeLabelIdentifier(pos + 8); + node.body = deserializeStatement(pos + 32); + parent = previousParent; + return node; +} + +function deserializeThrowStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ThrowStatement', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTryStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TryStatement', + block: null, + handler: null, + finalizer: null, + start, + end, + parent, + }; + node.block = deserializeBoxBlockStatement(pos + 8); + node.handler = deserializeOptionBoxCatchClause(pos + 16); + node.finalizer = deserializeOptionBoxBlockStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeCatchClause(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'CatchClause', + param: null, + body: null, + start, + end, + parent, + }; + node.param = deserializeOptionCatchParameter(pos + 8); + node.body = deserializeBoxBlockStatement(pos + 48); + parent = previousParent; + return node; +} + +function deserializeCatchParameter(pos) { + return deserializeBindingPattern(pos + 8); +} + +function deserializeDebuggerStatement(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'DebuggerStatement', + start, + end, + parent, + }; +} + +function deserializeBindingPattern(pos) { + return deserializeBindingPatternKind(pos); +} + +function deserializeBindingPatternKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBindingIdentifier(pos + 8); + case 1: + return deserializeBoxObjectPattern(pos + 8); + case 2: + return deserializeBoxArrayPattern(pos + 8); + case 3: + return deserializeBoxAssignmentPattern(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for BindingPatternKind`); + } +} + +function deserializeAssignmentPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentPattern', + left: null, + right: null, + start, + end, + parent, + }; + node.left = deserializeBindingPattern(pos + 8); + node.right = deserializeExpression(pos + 40); + parent = previousParent; + return node; +} + +function deserializeObjectPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectPattern', + properties: null, + start, + end, + parent, + }, + properties = deserializeVecBindingProperty(pos + 8), + rest = deserializeOptionBoxBindingRestElement(pos + 32); + rest !== null && properties.push(rest); + node.properties = properties; + parent = previousParent; + return node; +} + +function deserializeBindingProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: deserializeBool(pos + 56), + computed: deserializeBool(pos + 57), + start, + end, + parent, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeBindingPattern(pos + 24); + node.method = false; + parent = previousParent; + return node; +} + +function deserializeArrayPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayPattern', + elements: null, + start, + end, + parent, + }, + elements = deserializeVecOptionBindingPattern(pos + 8), + rest = deserializeOptionBoxBindingRestElement(pos + 32); + rest !== null && elements.push(rest); + node.elements = elements; + parent = previousParent; + return node; +} + +function deserializeBindingRestElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'RestElement', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeBindingPattern(pos + 8); + parent = previousParent; + return node; +} + +function deserializeFunction(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeFunctionType(pos + 84), + id: null, + generator: deserializeBool(pos + 85), + async: deserializeBool(pos + 86), + params: null, + body: null, + expression: null, + start, + end, + parent, + }, + params = deserializeBoxFormalParameters(pos + 56); + node.id = deserializeOptionBindingIdentifier(pos + 8); + node.params = params; + node.body = deserializeOptionBoxFunctionBody(pos + 72); + node.expression = false; + parent = previousParent; + return node; +} + +function deserializeFunctionType(pos) { + switch (uint8[pos]) { + case 0: + return 'FunctionDeclaration'; + case 1: + return 'FunctionExpression'; + case 2: + return 'TSDeclareFunction'; + case 3: + return 'TSEmptyBodyFunctionExpression'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for FunctionType`); + } +} + +function deserializeFormalParameters(pos) { + let params = deserializeVecFormalParameter(pos + 8); + if (uint32[pos + 32 >> 2] !== 0 && uint32[pos + 36 >> 2] !== 0) { + pos = uint32[pos + 32 >> 2]; + let previousParent = parent, + rest = parent = { + type: 'RestElement', + argument: null, + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + parent, + }; + rest.argument = deserializeBindingPatternKind(pos + 8); + params.push(rest); + parent = previousParent; + } + return params; +} + +function deserializeFormalParameter(pos) { + let param; + param = deserializeBindingPatternKind(pos + 32); + return param; +} + +function deserializeFunctionBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BlockStatement', + body: null, + start, + end, + parent, + }, + body = deserializeVecDirective(pos + 8); + body.push(...deserializeVecStatement(pos + 32)); + node.body = body; + parent = previousParent; + return node; +} + +function deserializeArrowFunctionExpression(pos) { + let expression = deserializeBool(pos + 44), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrowFunctionExpression', + expression, + async: deserializeBool(pos + 45), + params: null, + body: null, + id: null, + generator: null, + start, + end, + parent, + }, + body = deserializeBoxFunctionBody(pos + 32); + if (expression === true) { + body = body.body[0].expression; + body.parent = parent; + } + node.params = deserializeBoxFormalParameters(pos + 16); + node.body = body; + node.id = null; + node.generator = false; + parent = previousParent; + return node; +} + +function deserializeYieldExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'YieldExpression', + delegate: deserializeBool(pos + 24), + argument: null, + start, + end, + parent, + }; + node.argument = deserializeOptionExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeClass(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeClassType(pos + 132), + decorators: null, + id: null, + superClass: null, + body: null, + start, + end, + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.id = deserializeOptionBindingIdentifier(pos + 32); + node.superClass = deserializeOptionExpression(pos + 72); + node.body = deserializeBoxClassBody(pos + 120); + parent = previousParent; + return node; +} + +function deserializeClassType(pos) { + switch (uint8[pos]) { + case 0: + return 'ClassDeclaration'; + case 1: + return 'ClassExpression'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ClassType`); + } +} + +function deserializeClassBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ClassBody', + body: null, + start, + end, + parent, + }; + node.body = deserializeVecClassElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeClassElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxStaticBlock(pos + 8); + case 1: + return deserializeBoxMethodDefinition(pos + 8); + case 2: + return deserializeBoxPropertyDefinition(pos + 8); + case 3: + return deserializeBoxAccessorProperty(pos + 8); + case 4: + return deserializeBoxTSIndexSignature(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ClassElement`); + } +} + +function deserializeMethodDefinition(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeMethodDefinitionType(pos + 56), + decorators: null, + key: null, + value: null, + kind: deserializeMethodDefinitionKind(pos + 57), + computed: deserializeBool(pos + 58), + static: deserializeBool(pos + 59), + start, + end, + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeBoxFunction(pos + 48); + parent = previousParent; + return node; +} + +function deserializeMethodDefinitionType(pos) { + switch (uint8[pos]) { + case 0: + return 'MethodDefinition'; + case 1: + return 'TSAbstractMethodDefinition'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for MethodDefinitionType`); + } +} + +function deserializePropertyDefinition(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializePropertyDefinitionType(pos + 72), + decorators: null, + key: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + start, + end, + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeOptionExpression(pos + 56); + parent = previousParent; + return node; +} + +function deserializePropertyDefinitionType(pos) { + switch (uint8[pos]) { + case 0: + return 'PropertyDefinition'; + case 1: + return 'TSAbstractPropertyDefinition'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyDefinitionType`); + } +} + +function deserializeMethodDefinitionKind(pos) { + switch (uint8[pos]) { + case 0: + return 'constructor'; + case 1: + return 'method'; + case 2: + return 'get'; + case 3: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for MethodDefinitionKind`); + } +} + +function deserializePrivateIdentifier(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'PrivateIdentifier', + name: deserializeStr(pos + 8), + start, + end, + parent, + }; +} + +function deserializeStaticBlock(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'StaticBlock', + body: null, + start, + end, + parent, + }; + node.body = deserializeVecStatement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeAccessorPropertyType(pos) { + switch (uint8[pos]) { + case 0: + return 'AccessorProperty'; + case 1: + return 'TSAbstractAccessorProperty'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AccessorPropertyType`); + } +} + +function deserializeAccessorProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeAccessorPropertyType(pos + 72), + decorators: null, + key: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + start, + end, + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeOptionExpression(pos + 56); + parent = previousParent; + return node; +} + +function deserializeImportExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportExpression', + source: null, + options: null, + phase: deserializeOptionImportPhase(pos + 40), + start, + end, + parent, + }; + node.source = deserializeExpression(pos + 8); + node.options = deserializeOptionExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeImportDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportDeclaration', + specifiers: null, + source: null, + phase: deserializeOptionImportPhase(pos + 88), + attributes: null, + start, + end, + parent, + }, + specifiers = deserializeOptionVecImportDeclarationSpecifier(pos + 8); + specifiers === null && (specifiers = []); + let withClause = deserializeOptionBoxWithClause(pos + 80); + node.specifiers = specifiers; + node.source = deserializeStringLiteral(pos + 32); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeImportPhase(pos) { + switch (uint8[pos]) { + case 0: + return 'source'; + case 1: + return 'defer'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportPhase`); + } +} + +function deserializeImportDeclarationSpecifier(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxImportSpecifier(pos + 8); + case 1: + return deserializeBoxImportDefaultSpecifier(pos + 8); + case 2: + return deserializeBoxImportNamespaceSpecifier(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportDeclarationSpecifier`); + } +} + +function deserializeImportSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportSpecifier', + imported: null, + local: null, + start, + end, + parent, + }; + node.imported = deserializeModuleExportName(pos + 8); + node.local = deserializeBindingIdentifier(pos + 64); + parent = previousParent; + return node; +} + +function deserializeImportDefaultSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportDefaultSpecifier', + local: null, + start, + end, + parent, + }; + node.local = deserializeBindingIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeImportNamespaceSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportNamespaceSpecifier', + local: null, + start, + end, + parent, + }; + node.local = deserializeBindingIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeWithClause(pos) { + return { attributes: deserializeVecImportAttribute(pos + 8) }; +} + +function deserializeImportAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportAttribute', + key: null, + value: null, + start, + end, + parent, + }; + node.key = deserializeImportAttributeKey(pos + 8); + node.value = deserializeStringLiteral(pos + 64); + parent = previousParent; + return node; +} + +function deserializeImportAttributeKey(pos) { + switch (uint8[pos]) { + case 0: + return deserializeIdentifierName(pos + 8); + case 1: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportAttributeKey`); + } +} + +function deserializeExportNamedDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportNamedDeclaration', + declaration: null, + specifiers: null, + source: null, + attributes: null, + start, + end, + parent, + }, + withClause = deserializeOptionBoxWithClause(pos + 96); + node.declaration = deserializeOptionDeclaration(pos + 8); + node.specifiers = deserializeVecExportSpecifier(pos + 24); + node.source = deserializeOptionStringLiteral(pos + 48); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeExportDefaultDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportDefaultDeclaration', + declaration: null, + start, + end, + parent, + }; + node.declaration = deserializeExportDefaultDeclarationKind(pos + 8); + parent = previousParent; + return node; +} + +function deserializeExportAllDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportAllDeclaration', + exported: null, + source: null, + attributes: null, + start, + end, + parent, + }, + withClause = deserializeOptionBoxWithClause(pos + 112); + node.exported = deserializeOptionModuleExportName(pos + 8); + node.source = deserializeStringLiteral(pos + 64); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeExportSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportSpecifier', + local: null, + exported: null, + start, + end, + parent, + }; + node.local = deserializeModuleExportName(pos + 8); + node.exported = deserializeModuleExportName(pos + 64); + parent = previousParent; + return node; +} + +function deserializeExportDefaultDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxFunction(pos + 8); + case 65: + return deserializeBoxClass(pos + 8); + case 66: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportDefaultDeclarationKind`); + } +} + +function deserializeModuleExportName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeIdentifierName(pos + 8); + case 1: + return deserializeIdentifierReference(pos + 8); + case 2: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ModuleExportName`); + } +} + +function deserializeV8IntrinsicExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'V8IntrinsicExpression', + name: null, + arguments: null, + start, + end, + parent, + }; + node.name = deserializeIdentifierName(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeBooleanLiteral(pos) { + let value = deserializeBool(pos + 8), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value, + raw: null, + start, + end, + parent, + }; + node.raw = start === 0 && end === 0 ? null : value + ''; + parent = previousParent; + return node; +} + +function deserializeNullLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: null, + start, + end, + parent, + }; + node.value = null; + node.raw = start === 0 && end === 0 ? null : 'null'; + parent = previousParent; + return node; +} + +function deserializeNumericLiteral(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Literal', + value: deserializeF64(pos + 8), + raw: deserializeOptionStr(pos + 16), + start, + end, + parent, + }; +} + +function deserializeStringLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + start, + end, + parent, + }, + value = deserializeStr(pos + 8); + deserializeBool(pos + 40) && + (value = value.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); + node.value = value; + parent = previousParent; + return node; +} + +function deserializeBigIntLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + bigint: null, + start, + end, + parent, + }, + bigint = deserializeStr(pos + 8); + node.value = BigInt(bigint); + node.bigint = bigint; + parent = previousParent; + return node; +} + +function deserializeRegExpLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 40), + regex: null, + start, + end, + parent, + }, + regex = deserializeRegExp(pos + 8), + value = null; + try { + value = new RegExp(regex.pattern, regex.flags); + } catch {} + node.value = value; + node.regex = regex; + parent = previousParent; + return node; +} + +function deserializeRegExp(pos) { + return { + pattern: deserializeStr(pos), + flags: deserializeRegExpFlags(pos + 24), + }; +} + +function deserializeRegExpFlags(pos) { + let flagBits = deserializeU8(pos), flags = ''; + // Alphabetical order + flagBits & 64 && (flags += 'd'); + flagBits & 1 && (flags += 'g'); + flagBits & 2 && (flags += 'i'); + flagBits & 4 && (flags += 'm'); + flagBits & 8 && (flags += 's'); + flagBits & 16 && (flags += 'u'); + flagBits & 128 && (flags += 'v'); + flagBits & 32 && (flags += 'y'); + return flags; +} + +function deserializeJSXElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXElement', + openingElement: null, + children: null, + closingElement: null, + start, + end, + parent, + }, + closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), + openingElement = deserializeBoxJSXOpeningElement(pos + 8); + closingElement === null && (openingElement.selfClosing = true); + node.openingElement = openingElement; + node.children = deserializeVecJSXChild(pos + 16); + node.closingElement = closingElement; + parent = previousParent; + return node; +} + +function deserializeJSXOpeningElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXOpeningElement', + name: null, + attributes: null, + selfClosing: null, + start, + end, + parent, + }; + node.name = deserializeJSXElementName(pos + 8); + node.attributes = deserializeVecJSXAttributeItem(pos + 32); + node.selfClosing = false; + parent = previousParent; + return node; +} + +function deserializeJSXClosingElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXClosingElement', + name: null, + start, + end, + parent, + }; + node.name = deserializeJSXElementName(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXFragment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXFragment', + openingFragment: null, + children: null, + closingFragment: null, + start, + end, + parent, + }; + node.openingFragment = deserializeJSXOpeningFragment(pos + 8); + node.children = deserializeVecJSXChild(pos + 16); + node.closingFragment = deserializeJSXClosingFragment(pos + 40); + parent = previousParent; + return node; +} + +function deserializeJSXOpeningFragment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXOpeningFragment', + attributes: null, + selfClosing: null, + start, + end, + parent, + }; + node.attributes = []; + node.selfClosing = false; + parent = previousParent; + return node; +} + +function deserializeJSXClosingFragment(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXClosingFragment', + start, + end, + parent, + }; +} + +function deserializeJSXElementName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXIdentifier(pos + 8); + case 1: + let ident = deserializeBoxIdentifierReference(pos + 8); + return { + type: 'JSXIdentifier', + name: ident.name, + start: ident.start, + end: ident.end, + parent, + }; + case 2: + return deserializeBoxJSXNamespacedName(pos + 8); + case 3: + return deserializeBoxJSXMemberExpression(pos + 8); + case 4: + let thisExpr = deserializeBoxThisExpression(pos + 8); + return { + type: 'JSXIdentifier', + name: 'this', + start: thisExpr.start, + end: thisExpr.end, + parent, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXElementName`); + } +} + +function deserializeJSXNamespacedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXNamespacedName', + namespace: null, + name: null, + start, + end, + parent, + }; + node.namespace = deserializeJSXIdentifier(pos + 8); + node.name = deserializeJSXIdentifier(pos + 32); + parent = previousParent; + return node; +} + +function deserializeJSXMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXMemberExpression', + object: null, + property: null, + start, + end, + parent, + }; + node.object = deserializeJSXMemberExpressionObject(pos + 8); + node.property = deserializeJSXIdentifier(pos + 24); + parent = previousParent; + return node; +} + +function deserializeJSXMemberExpressionObject(pos) { + switch (uint8[pos]) { + case 0: + let ident = deserializeBoxIdentifierReference(pos + 8); + return { + type: 'JSXIdentifier', + name: ident.name, + start: ident.start, + end: ident.end, + parent, + }; + case 1: + return deserializeBoxJSXMemberExpression(pos + 8); + case 2: + let thisExpr = deserializeBoxThisExpression(pos + 8); + return { + type: 'JSXIdentifier', + name: 'this', + start: thisExpr.start, + end: thisExpr.end, + parent, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXMemberExpressionObject`); + } +} + +function deserializeJSXExpressionContainer(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXExpressionContainer', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeJSXExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXExpression(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeJSXEmptyExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXExpression`); + } +} + +function deserializeJSXEmptyExpression(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXEmptyExpression', + start, + end, + parent, + }; +} + +function deserializeJSXAttributeItem(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXAttribute(pos + 8); + case 1: + return deserializeBoxJSXSpreadAttribute(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeItem`); + } +} + +function deserializeJSXAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXAttribute', + name: null, + value: null, + start, + end, + parent, + }; + node.name = deserializeJSXAttributeName(pos + 8); + node.value = deserializeOptionJSXAttributeValue(pos + 24); + parent = previousParent; + return node; +} + +function deserializeJSXSpreadAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXSpreadAttribute', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXAttributeName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXIdentifier(pos + 8); + case 1: + return deserializeBoxJSXNamespacedName(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeName`); + } +} + +function deserializeJSXAttributeValue(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxStringLiteral(pos + 8); + case 1: + return deserializeBoxJSXExpressionContainer(pos + 8); + case 2: + return deserializeBoxJSXElement(pos + 8); + case 3: + return deserializeBoxJSXFragment(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeValue`); + } +} + +function deserializeJSXIdentifier(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXIdentifier', + name: deserializeStr(pos + 8), + start, + end, + parent, + }; +} + +function deserializeJSXChild(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXText(pos + 8); + case 1: + return deserializeBoxJSXElement(pos + 8); + case 2: + return deserializeBoxJSXFragment(pos + 8); + case 3: + return deserializeBoxJSXExpressionContainer(pos + 8); + case 4: + return deserializeBoxJSXSpreadChild(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXChild`); + } +} + +function deserializeJSXSpreadChild(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXSpreadChild', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXText(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXText', + value: deserializeStr(pos + 8), + raw: deserializeOptionStr(pos + 24), + start, + end, + parent, + }; +} + +function deserializeTSThisParameter(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: null, + optional: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.decorators = []; + node.name = 'this'; + node.optional = false; + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + parent = previousParent; + return node; +} + +function deserializeTSEnumDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumDeclaration', + id: null, + body: null, + const: deserializeBool(pos + 76), + declare: deserializeBool(pos + 77), + start, + end, + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.body = deserializeTSEnumBody(pos + 40); + parent = previousParent; + return node; +} + +function deserializeTSEnumBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumBody', + members: null, + start, + end, + parent, + }; + node.members = deserializeVecTSEnumMember(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSEnumMember(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumMember', + id: null, + initializer: null, + computed: null, + start, + end, + parent, + }; + node.id = deserializeTSEnumMemberName(pos + 8); + node.initializer = deserializeOptionExpression(pos + 24); + node.computed = deserializeU8(pos + 8) > 1; + parent = previousParent; + return node; +} + +function deserializeTSEnumMemberName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeBoxStringLiteral(pos + 8); + case 2: + return deserializeBoxStringLiteral(pos + 8); + case 3: + return deserializeBoxTemplateLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSEnumMemberName`); + } +} + +function deserializeTSTypeAnnotation(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAnnotation', + typeAnnotation: null, + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSLiteralType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSLiteralType', + literal: null, + start, + end, + parent, + }; + node.literal = deserializeTSLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSLiteral(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNumericLiteral(pos + 8); + case 2: + return deserializeBoxBigIntLiteral(pos + 8); + case 3: + return deserializeBoxStringLiteral(pos + 8); + case 4: + return deserializeBoxTemplateLiteral(pos + 8); + case 5: + return deserializeBoxUnaryExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSLiteral`); + } +} + +function deserializeTSType(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSAnyKeyword(pos + 8); + case 1: + return deserializeBoxTSBigIntKeyword(pos + 8); + case 2: + return deserializeBoxTSBooleanKeyword(pos + 8); + case 3: + return deserializeBoxTSIntrinsicKeyword(pos + 8); + case 4: + return deserializeBoxTSNeverKeyword(pos + 8); + case 5: + return deserializeBoxTSNullKeyword(pos + 8); + case 6: + return deserializeBoxTSNumberKeyword(pos + 8); + case 7: + return deserializeBoxTSObjectKeyword(pos + 8); + case 8: + return deserializeBoxTSStringKeyword(pos + 8); + case 9: + return deserializeBoxTSSymbolKeyword(pos + 8); + case 10: + return deserializeBoxTSThisType(pos + 8); + case 11: + return deserializeBoxTSUndefinedKeyword(pos + 8); + case 12: + return deserializeBoxTSUnknownKeyword(pos + 8); + case 13: + return deserializeBoxTSVoidKeyword(pos + 8); + case 14: + return deserializeBoxTSArrayType(pos + 8); + case 15: + return deserializeBoxTSConditionalType(pos + 8); + case 16: + return deserializeBoxTSConstructorType(pos + 8); + case 17: + return deserializeBoxTSFunctionType(pos + 8); + case 18: + return deserializeBoxTSImportType(pos + 8); + case 19: + return deserializeBoxTSIndexedAccessType(pos + 8); + case 20: + return deserializeBoxTSInferType(pos + 8); + case 21: + return deserializeBoxTSIntersectionType(pos + 8); + case 22: + return deserializeBoxTSLiteralType(pos + 8); + case 23: + return deserializeBoxTSMappedType(pos + 8); + case 24: + return deserializeBoxTSNamedTupleMember(pos + 8); + case 26: + return deserializeBoxTSTemplateLiteralType(pos + 8); + case 27: + return deserializeBoxTSTupleType(pos + 8); + case 28: + return deserializeBoxTSTypeLiteral(pos + 8); + case 29: + return deserializeBoxTSTypeOperator(pos + 8); + case 30: + return deserializeBoxTSTypePredicate(pos + 8); + case 31: + return deserializeBoxTSTypeQuery(pos + 8); + case 32: + return deserializeBoxTSTypeReference(pos + 8); + case 33: + return deserializeBoxTSUnionType(pos + 8); + case 34: + return deserializeBoxTSParenthesizedType(pos + 8); + case 35: + return deserializeBoxJSDocNullableType(pos + 8); + case 36: + return deserializeBoxJSDocNonNullableType(pos + 8); + case 37: + return deserializeBoxJSDocUnknownType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSType`); + } +} + +function deserializeTSConditionalType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConditionalType', + checkType: null, + extendsType: null, + trueType: null, + falseType: null, + start, + end, + parent, + }; + node.checkType = deserializeTSType(pos + 8); + node.extendsType = deserializeTSType(pos + 24); + node.trueType = deserializeTSType(pos + 40); + node.falseType = deserializeTSType(pos + 56); + parent = previousParent; + return node; +} + +function deserializeTSUnionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSUnionType', + types: null, + start, + end, + parent, + }; + node.types = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSIntersectionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIntersectionType', + types: null, + start, + end, + parent, + }; + node.types = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSParenthesizedType(pos) { + let node; + { + let previousParent = parent; + node = parent = { + type: 'TSParenthesizedType', + typeAnnotation: null, + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + } + return node; +} + +function deserializeTSTypeOperator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeOperator', + operator: deserializeTSTypeOperatorOperator(pos + 24), + typeAnnotation: null, + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeOperatorOperator(pos) { + switch (uint8[pos]) { + case 0: + return 'keyof'; + case 1: + return 'unique'; + case 2: + return 'readonly'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeOperatorOperator`); + } +} + +function deserializeTSArrayType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSArrayType', + elementType: null, + start, + end, + parent, + }; + node.elementType = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSIndexedAccessType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIndexedAccessType', + objectType: null, + indexType: null, + start, + end, + parent, + }; + node.objectType = deserializeTSType(pos + 8); + node.indexType = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTupleType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTupleType', + elementTypes: null, + start, + end, + parent, + }; + node.elementTypes = deserializeVecTSTupleElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNamedTupleMember(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNamedTupleMember', + label: null, + elementType: null, + optional: deserializeBool(pos + 48), + start, + end, + parent, + }; + node.label = deserializeIdentifierName(pos + 8); + node.elementType = deserializeTSTupleElement(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSOptionalType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSOptionalType', + typeAnnotation: null, + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSRestType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSRestType', + typeAnnotation: null, + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTupleElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSAnyKeyword(pos + 8); + case 1: + return deserializeBoxTSBigIntKeyword(pos + 8); + case 2: + return deserializeBoxTSBooleanKeyword(pos + 8); + case 3: + return deserializeBoxTSIntrinsicKeyword(pos + 8); + case 4: + return deserializeBoxTSNeverKeyword(pos + 8); + case 5: + return deserializeBoxTSNullKeyword(pos + 8); + case 6: + return deserializeBoxTSNumberKeyword(pos + 8); + case 7: + return deserializeBoxTSObjectKeyword(pos + 8); + case 8: + return deserializeBoxTSStringKeyword(pos + 8); + case 9: + return deserializeBoxTSSymbolKeyword(pos + 8); + case 10: + return deserializeBoxTSThisType(pos + 8); + case 11: + return deserializeBoxTSUndefinedKeyword(pos + 8); + case 12: + return deserializeBoxTSUnknownKeyword(pos + 8); + case 13: + return deserializeBoxTSVoidKeyword(pos + 8); + case 14: + return deserializeBoxTSArrayType(pos + 8); + case 15: + return deserializeBoxTSConditionalType(pos + 8); + case 16: + return deserializeBoxTSConstructorType(pos + 8); + case 17: + return deserializeBoxTSFunctionType(pos + 8); + case 18: + return deserializeBoxTSImportType(pos + 8); + case 19: + return deserializeBoxTSIndexedAccessType(pos + 8); + case 20: + return deserializeBoxTSInferType(pos + 8); + case 21: + return deserializeBoxTSIntersectionType(pos + 8); + case 22: + return deserializeBoxTSLiteralType(pos + 8); + case 23: + return deserializeBoxTSMappedType(pos + 8); + case 24: + return deserializeBoxTSNamedTupleMember(pos + 8); + case 26: + return deserializeBoxTSTemplateLiteralType(pos + 8); + case 27: + return deserializeBoxTSTupleType(pos + 8); + case 28: + return deserializeBoxTSTypeLiteral(pos + 8); + case 29: + return deserializeBoxTSTypeOperator(pos + 8); + case 30: + return deserializeBoxTSTypePredicate(pos + 8); + case 31: + return deserializeBoxTSTypeQuery(pos + 8); + case 32: + return deserializeBoxTSTypeReference(pos + 8); + case 33: + return deserializeBoxTSUnionType(pos + 8); + case 34: + return deserializeBoxTSParenthesizedType(pos + 8); + case 35: + return deserializeBoxJSDocNullableType(pos + 8); + case 36: + return deserializeBoxJSDocNonNullableType(pos + 8); + case 37: + return deserializeBoxJSDocUnknownType(pos + 8); + case 64: + return deserializeBoxTSOptionalType(pos + 8); + case 65: + return deserializeBoxTSRestType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTupleElement`); + } +} + +function deserializeTSAnyKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSAnyKeyword', + start, + end, + parent, + }; +} + +function deserializeTSStringKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSStringKeyword', + start, + end, + parent, + }; +} + +function deserializeTSBooleanKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSBooleanKeyword', + start, + end, + parent, + }; +} + +function deserializeTSNumberKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNumberKeyword', + start, + end, + parent, + }; +} + +function deserializeTSNeverKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNeverKeyword', + start, + end, + parent, + }; +} + +function deserializeTSIntrinsicKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSIntrinsicKeyword', + start, + end, + parent, + }; +} + +function deserializeTSUnknownKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSUnknownKeyword', + start, + end, + parent, + }; +} + +function deserializeTSNullKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNullKeyword', + start, + end, + parent, + }; +} + +function deserializeTSUndefinedKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSUndefinedKeyword', + start, + end, + parent, + }; +} + +function deserializeTSVoidKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSVoidKeyword', + start, + end, + parent, + }; +} + +function deserializeTSSymbolKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSSymbolKeyword', + start, + end, + parent, + }; +} + +function deserializeTSThisType(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSThisType', + start, + end, + parent, + }; +} + +function deserializeTSObjectKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSObjectKeyword', + start, + end, + parent, + }; +} + +function deserializeTSBigIntKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSBigIntKeyword', + start, + end, + parent, + }; +} + +function deserializeTSTypeReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeReference', + typeName: null, + typeArguments: null, + start, + end, + parent, + }; + node.typeName = deserializeTSTypeName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeName`); + } +} + +function deserializeTSQualifiedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + parent, + }; + node.left = deserializeTSTypeName(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameterInstantiation(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameterInstantiation', + params: null, + start, + end, + parent, + }; + node.params = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameter(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameter', + name: null, + constraint: null, + default: null, + in: deserializeBool(pos + 72), + out: deserializeBool(pos + 73), + const: deserializeBool(pos + 74), + start, + end, + parent, + }; + node.name = deserializeBindingIdentifier(pos + 8); + node.constraint = deserializeOptionTSType(pos + 40); + node.default = deserializeOptionTSType(pos + 56); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameterDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameterDeclaration', + params: null, + start, + end, + parent, + }; + node.params = deserializeVecTSTypeParameter(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeAliasDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAliasDeclaration', + id: null, + typeParameters: null, + typeAnnotation: null, + declare: deserializeBool(pos + 68), + start, + end, + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.typeAnnotation = deserializeTSType(pos + 48); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceDeclaration', + id: null, + typeParameters: null, + extends: null, + body: null, + declare: deserializeBool(pos + 84), + start, + end, + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.extends = deserializeVecTSInterfaceHeritage(pos + 48); + node.body = deserializeBoxTSInterfaceBody(pos + 72); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceBody', + body: null, + start, + end, + parent, + }; + node.body = deserializeVecTSSignature(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSPropertySignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSPropertySignature', + computed: deserializeBool(pos + 32), + optional: deserializeBool(pos + 33), + readonly: deserializeBool(pos + 34), + key: null, + typeAnnotation: null, + accessibility: null, + static: null, + start, + end, + parent, + }; + node.key = deserializePropertyKey(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.accessibility = null; + node.static = false; + parent = previousParent; + return node; +} + +function deserializeTSSignature(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSIndexSignature(pos + 8); + case 1: + return deserializeBoxTSPropertySignature(pos + 8); + case 2: + return deserializeBoxTSCallSignatureDeclaration(pos + 8); + case 3: + return deserializeBoxTSConstructSignatureDeclaration(pos + 8); + case 4: + return deserializeBoxTSMethodSignature(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSSignature`); + } +} + +function deserializeTSIndexSignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIndexSignature', + parameters: null, + typeAnnotation: null, + readonly: deserializeBool(pos + 40), + static: deserializeBool(pos + 41), + accessibility: null, + start, + end, + parent, + }; + node.parameters = deserializeVecTSIndexSignatureName(pos + 8); + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 32); + node.accessibility = null; + parent = previousParent; + return node; +} + +function deserializeTSCallSignatureDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSCallSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + parent, + }, + params = deserializeBoxFormalParameters(pos + 24), + thisParam = deserializeOptionBoxTSThisParameter(pos + 16); + thisParam !== null && params.unshift(thisParam); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSMethodSignatureKind(pos) { + switch (uint8[pos]) { + case 0: + return 'method'; + case 1: + return 'get'; + case 2: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSMethodSignatureKind`); + } +} + +function deserializeTSMethodSignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSMethodSignature', + key: null, + computed: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + kind: deserializeTSMethodSignatureKind(pos + 62), + typeParameters: null, + params: null, + returnType: null, + accessibility: null, + readonly: null, + static: null, + start, + end, + parent, + }, + params = deserializeBoxFormalParameters(pos + 40), + thisParam = deserializeOptionBoxTSThisParameter(pos + 32); + thisParam !== null && params.unshift(thisParam); + node.key = deserializePropertyKey(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 24); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.accessibility = null; + node.readonly = false; + node.static = false; + parent = previousParent; + return node; +} + +function deserializeTSConstructSignatureDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConstructSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + parent, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSIndexSignatureName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceHeritage(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceHeritage', + expression: null, + typeArguments: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypePredicate(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypePredicate', + parameterName: null, + asserts: deserializeBool(pos + 32), + typeAnnotation: null, + start, + end, + parent, + }; + node.parameterName = deserializeTSTypePredicateName(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypePredicateName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeTSThisType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypePredicateName`); + } +} + +function deserializeTSModuleDeclaration(pos) { + let kind = deserializeTSModuleDeclarationKind(pos + 84), + global = kind === 'global', + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + declare = deserializeBool(pos + 85), + node, + previousParent = parent, + body = deserializeOptionTSModuleDeclarationBody(pos + 64); + if (body === null) { + node = parent = { + type: 'TSModuleDeclaration', + id: null, + kind, + declare, + global, + start, + end, + parent, + }; + node.id = deserializeTSModuleDeclarationName(pos + 8); + } else { + node = parent = { + type: 'TSModuleDeclaration', + id: null, + body, + kind, + declare, + global, + start, + end, + parent, + }; + let id = deserializeTSModuleDeclarationName(pos + 8); + if (body.type === 'TSModuleBlock') { + node.id = id; + body.parent = node; + } else { + let innerId = body.id; + if (innerId.type === 'Identifier') { + id.parent = + innerId.parent = + node.id = + parent = + { + type: 'TSQualifiedName', + left: id, + right: innerId, + start: id.start, + end: innerId.end, + parent: node, + }; + } else { + // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of + // this module on left, and previous `left` of innermost `TSQualifiedName` on right + node.id = innerId; + innerId.parent = node; + let { start } = id; + for (;;) { + innerId.start = start; + if (innerId.left.type === 'Identifier') break; + innerId = innerId.left; + } + let right = innerId.left; + id.parent = right.parent = innerId.left = { + type: 'TSQualifiedName', + left: id, + right, + start, + end: right.end, + parent: innerId, + }; + } + if (Object.hasOwn(body, 'body')) { + body = body.body; + node.body = body; + body.parent = node; + } else body = null; + } + } + parent = previousParent; + return node; +} + +function deserializeTSModuleDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return 'global'; + case 1: + return 'module'; + case 2: + return 'namespace'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationKind`); + } +} + +function deserializeTSModuleDeclarationName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBindingIdentifier(pos + 8); + case 1: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationName`); + } +} + +function deserializeTSModuleDeclarationBody(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 1: + return deserializeBoxTSModuleBlock(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationBody`); + } +} + +function deserializeTSModuleBlock(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSModuleBlock', + body: null, + start, + end, + parent, + }, + body = deserializeVecDirective(pos + 8); + body.push(...deserializeVecStatement(pos + 32)); + node.body = body; + parent = previousParent; + return node; +} + +function deserializeTSTypeLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeLiteral', + members: null, + start, + end, + parent, + }; + node.members = deserializeVecTSSignature(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSInferType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInferType', + typeParameter: null, + start, + end, + parent, + }; + node.typeParameter = deserializeBoxTSTypeParameter(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeQuery(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeQuery', + exprName: null, + typeArguments: null, + start, + end, + parent, + }; + node.exprName = deserializeTSTypeQueryExprName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeQueryExprName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + case 3: + return deserializeBoxTSImportType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeQueryExprName`); + } +} + +function deserializeTSImportType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSImportType', + argument: null, + options: null, + qualifier: null, + typeArguments: null, + start, + end, + parent, + }; + node.argument = deserializeTSType(pos + 8); + node.options = deserializeOptionBoxObjectExpression(pos + 24); + node.qualifier = deserializeOptionTSImportTypeQualifier(pos + 32); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 48); + parent = previousParent; + return node; +} + +function deserializeTSImportTypeQualifier(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeBoxTSImportTypeQualifiedName(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSImportTypeQualifier`); + } +} + +function deserializeTSImportTypeQualifiedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + parent, + }; + node.left = deserializeTSImportTypeQualifier(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSFunctionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSFunctionType', + typeParameters: null, + params: null, + returnType: null, + start, + end, + parent, + }, + params = deserializeBoxFormalParameters(pos + 24), + thisParam = deserializeOptionBoxTSThisParameter(pos + 16); + thisParam !== null && params.unshift(thisParam); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeBoxTSTypeAnnotation(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSConstructorType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConstructorType', + abstract: deserializeBool(pos + 32), + typeParameters: null, + params: null, + returnType: null, + start, + end, + parent, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSMappedType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSMappedType', + key: null, + constraint: null, + nameType: null, + typeAnnotation: null, + optional: null, + readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), + start, + end, + parent, + }, + typeParameter = deserializeBoxTSTypeParameter(pos + 8), + key = typeParameter.name; + key.parent = parent; + let { constraint } = typeParameter; + constraint !== null && (constraint.parent = parent); + let optional = deserializeOptionTSMappedTypeModifierOperator(pos + 52); + optional === null && (optional = false); + node.key = key; + node.constraint = constraint; + node.nameType = deserializeOptionTSType(pos + 16); + node.typeAnnotation = deserializeOptionTSType(pos + 32); + node.optional = optional; + parent = previousParent; + return node; +} + +function deserializeTSMappedTypeModifierOperator(pos) { + switch (uint8[pos]) { + case 0: + return true; + case 1: + return '+'; + case 2: + return '-'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSMappedTypeModifierOperator`); + } +} + +function deserializeTSTemplateLiteralType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTemplateLiteralType', + quasis: null, + types: null, + start, + end, + parent, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.types = deserializeVecTSType(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSAsExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSAsExpression', + expression: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSSatisfiesExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSSatisfiesExpression', + expression: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeAssertion(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAssertion', + typeAnnotation: null, + expression: null, + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + node.expression = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSImportEqualsDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSImportEqualsDeclaration', + id: null, + moduleReference: null, + importKind: deserializeImportOrExportKind(pos + 56), + start, + end, + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.moduleReference = deserializeTSModuleReference(pos + 40); + parent = previousParent; + return node; +} + +function deserializeTSModuleReference(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + case 3: + return deserializeBoxTSExternalModuleReference(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleReference`); + } +} + +function deserializeTSExternalModuleReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSExternalModuleReference', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeStringLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNonNullExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNonNullExpression', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeDecorator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Decorator', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSExportAssignment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSExportAssignment', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNamespaceExportDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNamespaceExportDeclaration', + id: null, + start, + end, + parent, + }; + node.id = deserializeIdentifierName(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSInstantiationExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInstantiationExpression', + expression: null, + typeArguments: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeImportOrExportKind(pos) { + switch (uint8[pos]) { + case 0: + return 'value'; + case 1: + return 'type'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportOrExportKind`); + } +} + +function deserializeJSDocNullableType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSJSDocNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSDocNonNullableType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSJSDocNonNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSDocUnknownType(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSJSDocUnknownType', + start, + end, + parent, + }; +} + +function deserializeCommentKind(pos) { + switch (uint8[pos]) { + case 0: + return 'Line'; + case 1: + return 'Block'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for CommentKind`); + } +} + +function deserializeComment(pos) { + let type = deserializeCommentKind(pos + 12), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type, + value: null, + start, + end, + parent, + }, + endCut = type === 'Line' ? 0 : 2; + node.value = sourceText.slice(start + 2, end - endCut); + parent = previousParent; + return node; +} + +function deserializeNameSpan(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + value: deserializeStr(pos + 8), + start, + end, + }; +} + +function deserializeImportEntry(pos) { + return { + importName: deserializeImportImportName(pos + 32), + localName: deserializeNameSpan(pos + 64), + isType: deserializeBool(pos + 88), + }; +} + +function deserializeImportImportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + }; + case 1: + return { + kind: 'NamespaceObject', + name: null, + start: null, + end: null, + }; + case 2: + var { start, end } = deserializeSpan(pos + 8); + return { + kind: 'Default', + name: null, + start, + end, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportImportName`); + } +} + +function deserializeExportEntry(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeOptionNameSpan(pos + 16), + importName: deserializeExportImportName(pos + 40), + exportName: deserializeExportExportName(pos + 72), + localName: deserializeExportLocalName(pos + 104), + isType: deserializeBool(pos + 136), + start, + end, + }; +} + +function deserializeExportImportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + }; + case 1: + return { + kind: 'All', + name: null, + start: null, + end: null, + }; + case 2: + return { + kind: 'AllButDefault', + name: null, + start: null, + end: null, + }; + case 3: + return { + kind: 'None', + name: null, + start: null, + end: null, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportImportName`); + } +} + +function deserializeExportExportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + }; + case 1: + var { start, end } = deserializeSpan(pos + 8); + return { + kind: 'Default', + name: null, + start, + end, + }; + case 2: + return { + kind: 'None', + name: null, + start: null, + end: null, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportExportName`); + } +} + +function deserializeExportLocalName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + }; + case 1: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Default', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + }; + case 2: + return { + kind: 'None', + name: null, + start: null, + end: null, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportLocalName`); + } +} + +function deserializeDynamicImport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeSpan(pos + 8), + start, + end, + }; +} + +function deserializeAssignmentOperator(pos) { + switch (uint8[pos]) { + case 0: + return '='; + case 1: + return '+='; + case 2: + return '-='; + case 3: + return '*='; + case 4: + return '/='; + case 5: + return '%='; + case 6: + return '**='; + case 7: + return '<<='; + case 8: + return '>>='; + case 9: + return '>>>='; + case 10: + return '|='; + case 11: + return '^='; + case 12: + return '&='; + case 13: + return '||='; + case 14: + return '&&='; + case 15: + return '??='; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentOperator`); + } +} + +function deserializeBinaryOperator(pos) { + switch (uint8[pos]) { + case 0: + return '=='; + case 1: + return '!='; + case 2: + return '==='; + case 3: + return '!=='; + case 4: + return '<'; + case 5: + return '<='; + case 6: + return '>'; + case 7: + return '>='; + case 8: + return '+'; + case 9: + return '-'; + case 10: + return '*'; + case 11: + return '/'; + case 12: + return '%'; + case 13: + return '**'; + case 14: + return '<<'; + case 15: + return '>>'; + case 16: + return '>>>'; + case 17: + return '|'; + case 18: + return '^'; + case 19: + return '&'; + case 20: + return 'in'; + case 21: + return 'instanceof'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for BinaryOperator`); + } +} + +function deserializeLogicalOperator(pos) { + switch (uint8[pos]) { + case 0: + return '||'; + case 1: + return '&&'; + case 2: + return '??'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for LogicalOperator`); + } +} + +function deserializeUnaryOperator(pos) { + switch (uint8[pos]) { + case 0: + return '+'; + case 1: + return '-'; + case 2: + return '!'; + case 3: + return '~'; + case 4: + return 'typeof'; + case 5: + return 'void'; + case 6: + return 'delete'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for UnaryOperator`); + } +} + +function deserializeUpdateOperator(pos) { + switch (uint8[pos]) { + case 0: + return '++'; + case 1: + return '--'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for UpdateOperator`); + } +} + +function deserializeSpan(pos) { + return { + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + }; +} + +function deserializeModuleKind(pos) { + switch (uint8[pos]) { + case 0: + return 'script'; + case 1: + return 'module'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ModuleKind`); + } +} + +function deserializeRawTransferData(pos) { + return { + program: deserializeProgram(pos), + comments: deserializeVecComment(pos + 128), + module: deserializeEcmaScriptModule(pos + 152), + errors: deserializeVecError(pos + 256), + }; +} + +function deserializeError(pos) { + return { + severity: deserializeErrorSeverity(pos + 72), + message: deserializeStr(pos), + labels: deserializeVecErrorLabel(pos + 16), + helpMessage: deserializeOptionStr(pos + 40), + codeframe: deserializeStr(pos + 56), + }; +} + +function deserializeErrorSeverity(pos) { + switch (uint8[pos]) { + case 0: + return 'Error'; + case 1: + return 'Warning'; + case 2: + return 'Advice'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ErrorSeverity`); + } +} + +function deserializeErrorLabel(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + message: deserializeOptionStr(pos + 8), + start, + end, + }; +} + +function deserializeEcmaScriptModule(pos) { + return { + hasModuleSyntax: deserializeBool(pos + 96), + staticImports: deserializeVecStaticImport(pos), + staticExports: deserializeVecStaticExport(pos + 24), + dynamicImports: deserializeVecDynamicImport(pos + 48), + importMetas: deserializeVecSpan(pos + 72), + }; +} + +function deserializeStaticImport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeNameSpan(pos + 8), + entries: deserializeVecImportEntry(pos + 32), + start, + end, + }; +} + +function deserializeStaticExport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + entries: deserializeVecExportEntry(pos + 8), + start, + end, + }; +} + +function deserializeU32(pos) { + return uint32[pos >> 2]; +} + +function deserializeU8(pos) { + return uint8[pos]; +} + +function deserializeStr(pos) { + let pos32 = pos >> 2, len = uint32[pos32 + 2]; + if (len === 0) return ''; + pos = uint32[pos32]; + if (sourceIsAscii && pos < sourceByteLen) return sourceText.substr(pos, len); + // Longer strings use `TextDecoder` + // TODO: Find best switch-over point + let end = pos + len; + if (len > 50) return decodeStr(uint8.subarray(pos, end)); + // Shorter strings decode by hand to avoid native call + let out = '', c; + do { + c = uint8[pos++]; + if (c < 128) out += fromCodePoint(c); + else { + out += decodeStr(uint8.subarray(pos - 1, end)); + break; + } + } while (pos < end); + return out; +} + +function deserializeVecComment(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeComment(pos)); + pos += 16; + } + return arr; +} + +function deserializeOptionHashbang(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeHashbang(pos); +} + +function deserializeVecDirective(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 72; + for (; pos !== endPos;) { + arr.push(deserializeDirective(pos)); + pos += 72; + } + return arr; +} + +function deserializeVecStatement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeStatement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxBooleanLiteral(pos) { + return deserializeBooleanLiteral(uint32[pos >> 2]); +} + +function deserializeBoxNullLiteral(pos) { + return deserializeNullLiteral(uint32[pos >> 2]); +} + +function deserializeBoxNumericLiteral(pos) { + return deserializeNumericLiteral(uint32[pos >> 2]); +} + +function deserializeBoxBigIntLiteral(pos) { + return deserializeBigIntLiteral(uint32[pos >> 2]); +} + +function deserializeBoxRegExpLiteral(pos) { + return deserializeRegExpLiteral(uint32[pos >> 2]); +} + +function deserializeBoxStringLiteral(pos) { + return deserializeStringLiteral(uint32[pos >> 2]); +} + +function deserializeBoxTemplateLiteral(pos) { + return deserializeTemplateLiteral(uint32[pos >> 2]); +} + +function deserializeBoxIdentifierReference(pos) { + return deserializeIdentifierReference(uint32[pos >> 2]); +} + +function deserializeBoxMetaProperty(pos) { + return deserializeMetaProperty(uint32[pos >> 2]); +} + +function deserializeBoxSuper(pos) { + return deserializeSuper(uint32[pos >> 2]); +} + +function deserializeBoxArrayExpression(pos) { + return deserializeArrayExpression(uint32[pos >> 2]); +} + +function deserializeBoxArrowFunctionExpression(pos) { + return deserializeArrowFunctionExpression(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentExpression(pos) { + return deserializeAssignmentExpression(uint32[pos >> 2]); +} + +function deserializeBoxAwaitExpression(pos) { + return deserializeAwaitExpression(uint32[pos >> 2]); +} + +function deserializeBoxBinaryExpression(pos) { + return deserializeBinaryExpression(uint32[pos >> 2]); +} + +function deserializeBoxCallExpression(pos) { + return deserializeCallExpression(uint32[pos >> 2]); +} + +function deserializeBoxChainExpression(pos) { + return deserializeChainExpression(uint32[pos >> 2]); +} + +function deserializeBoxClass(pos) { + return deserializeClass(uint32[pos >> 2]); +} + +function deserializeBoxConditionalExpression(pos) { + return deserializeConditionalExpression(uint32[pos >> 2]); +} + +function deserializeBoxFunction(pos) { + return deserializeFunction(uint32[pos >> 2]); +} + +function deserializeBoxImportExpression(pos) { + return deserializeImportExpression(uint32[pos >> 2]); +} + +function deserializeBoxLogicalExpression(pos) { + return deserializeLogicalExpression(uint32[pos >> 2]); +} + +function deserializeBoxNewExpression(pos) { + return deserializeNewExpression(uint32[pos >> 2]); +} + +function deserializeBoxObjectExpression(pos) { + return deserializeObjectExpression(uint32[pos >> 2]); +} + +function deserializeBoxParenthesizedExpression(pos) { + return deserializeParenthesizedExpression(uint32[pos >> 2]); +} + +function deserializeBoxSequenceExpression(pos) { + return deserializeSequenceExpression(uint32[pos >> 2]); +} + +function deserializeBoxTaggedTemplateExpression(pos) { + return deserializeTaggedTemplateExpression(uint32[pos >> 2]); +} + +function deserializeBoxThisExpression(pos) { + return deserializeThisExpression(uint32[pos >> 2]); +} + +function deserializeBoxUnaryExpression(pos) { + return deserializeUnaryExpression(uint32[pos >> 2]); +} + +function deserializeBoxUpdateExpression(pos) { + return deserializeUpdateExpression(uint32[pos >> 2]); +} + +function deserializeBoxYieldExpression(pos) { + return deserializeYieldExpression(uint32[pos >> 2]); +} + +function deserializeBoxPrivateInExpression(pos) { + return deserializePrivateInExpression(uint32[pos >> 2]); +} + +function deserializeBoxJSXElement(pos) { + return deserializeJSXElement(uint32[pos >> 2]); +} + +function deserializeBoxJSXFragment(pos) { + return deserializeJSXFragment(uint32[pos >> 2]); +} + +function deserializeBoxTSAsExpression(pos) { + return deserializeTSAsExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSSatisfiesExpression(pos) { + return deserializeTSSatisfiesExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeAssertion(pos) { + return deserializeTSTypeAssertion(uint32[pos >> 2]); +} + +function deserializeBoxTSNonNullExpression(pos) { + return deserializeTSNonNullExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSInstantiationExpression(pos) { + return deserializeTSInstantiationExpression(uint32[pos >> 2]); +} + +function deserializeBoxV8IntrinsicExpression(pos) { + return deserializeV8IntrinsicExpression(uint32[pos >> 2]); +} + +function deserializeVecArrayExpressionElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeArrayExpressionElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxSpreadElement(pos) { + return deserializeSpreadElement(uint32[pos >> 2]); +} + +function deserializeVecObjectPropertyKind(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeObjectPropertyKind(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxObjectProperty(pos) { + return deserializeObjectProperty(uint32[pos >> 2]); +} + +function deserializeBool(pos) { + return uint8[pos] === 1; +} + +function deserializeBoxIdentifierName(pos) { + return deserializeIdentifierName(uint32[pos >> 2]); +} + +function deserializeBoxPrivateIdentifier(pos) { + return deserializePrivateIdentifier(uint32[pos >> 2]); +} + +function deserializeVecTemplateElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 48; + for (; pos !== endPos;) { + arr.push(deserializeTemplateElement(pos)); + pos += 48; + } + return arr; +} + +function deserializeVecExpression(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeExpression(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSTypeParameterInstantiation(pos) { + return deserializeTSTypeParameterInstantiation(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeParameterInstantiation(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeParameterInstantiation(pos); +} + +function deserializeOptionStr(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeStr(pos); +} + +function deserializeBoxComputedMemberExpression(pos) { + return deserializeComputedMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxStaticMemberExpression(pos) { + return deserializeStaticMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxPrivateFieldExpression(pos) { + return deserializePrivateFieldExpression(uint32[pos >> 2]); +} + +function deserializeVecArgument(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeArgument(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxArrayAssignmentTarget(pos) { + return deserializeArrayAssignmentTarget(uint32[pos >> 2]); +} + +function deserializeBoxObjectAssignmentTarget(pos) { + return deserializeObjectAssignmentTarget(uint32[pos >> 2]); +} + +function deserializeOptionAssignmentTargetMaybeDefault(pos) { + if (uint8[pos] === 51) return null; + return deserializeAssignmentTargetMaybeDefault(pos); +} + +function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeOptionAssignmentTargetMaybeDefault(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxAssignmentTargetRest(pos) { + return deserializeAssignmentTargetRest(uint32[pos >> 2]); +} + +function deserializeOptionBoxAssignmentTargetRest(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxAssignmentTargetRest(pos); +} + +function deserializeVecAssignmentTargetProperty(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeAssignmentTargetProperty(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxAssignmentTargetWithDefault(pos) { + return deserializeAssignmentTargetWithDefault(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentTargetPropertyIdentifier(pos) { + return deserializeAssignmentTargetPropertyIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentTargetPropertyProperty(pos) { + return deserializeAssignmentTargetPropertyProperty(uint32[pos >> 2]); +} + +function deserializeOptionExpression(pos) { + if (uint8[pos] === 51) return null; + return deserializeExpression(pos); +} + +function deserializeBoxBlockStatement(pos) { + return deserializeBlockStatement(uint32[pos >> 2]); +} + +function deserializeBoxBreakStatement(pos) { + return deserializeBreakStatement(uint32[pos >> 2]); +} + +function deserializeBoxContinueStatement(pos) { + return deserializeContinueStatement(uint32[pos >> 2]); +} + +function deserializeBoxDebuggerStatement(pos) { + return deserializeDebuggerStatement(uint32[pos >> 2]); +} + +function deserializeBoxDoWhileStatement(pos) { + return deserializeDoWhileStatement(uint32[pos >> 2]); +} + +function deserializeBoxEmptyStatement(pos) { + return deserializeEmptyStatement(uint32[pos >> 2]); +} + +function deserializeBoxExpressionStatement(pos) { + return deserializeExpressionStatement(uint32[pos >> 2]); +} + +function deserializeBoxForInStatement(pos) { + return deserializeForInStatement(uint32[pos >> 2]); +} + +function deserializeBoxForOfStatement(pos) { + return deserializeForOfStatement(uint32[pos >> 2]); +} + +function deserializeBoxForStatement(pos) { + return deserializeForStatement(uint32[pos >> 2]); +} + +function deserializeBoxIfStatement(pos) { + return deserializeIfStatement(uint32[pos >> 2]); +} + +function deserializeBoxLabeledStatement(pos) { + return deserializeLabeledStatement(uint32[pos >> 2]); +} + +function deserializeBoxReturnStatement(pos) { + return deserializeReturnStatement(uint32[pos >> 2]); +} + +function deserializeBoxSwitchStatement(pos) { + return deserializeSwitchStatement(uint32[pos >> 2]); +} + +function deserializeBoxThrowStatement(pos) { + return deserializeThrowStatement(uint32[pos >> 2]); +} + +function deserializeBoxTryStatement(pos) { + return deserializeTryStatement(uint32[pos >> 2]); +} + +function deserializeBoxWhileStatement(pos) { + return deserializeWhileStatement(uint32[pos >> 2]); +} + +function deserializeBoxWithStatement(pos) { + return deserializeWithStatement(uint32[pos >> 2]); +} + +function deserializeBoxVariableDeclaration(pos) { + return deserializeVariableDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeAliasDeclaration(pos) { + return deserializeTSTypeAliasDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSInterfaceDeclaration(pos) { + return deserializeTSInterfaceDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSEnumDeclaration(pos) { + return deserializeTSEnumDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSModuleDeclaration(pos) { + return deserializeTSModuleDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSImportEqualsDeclaration(pos) { + return deserializeTSImportEqualsDeclaration(uint32[pos >> 2]); +} + +function deserializeVecVariableDeclarator(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 64; + for (; pos !== endPos;) { + arr.push(deserializeVariableDeclarator(pos)); + pos += 64; + } + return arr; +} + +function deserializeOptionStatement(pos) { + if (uint8[pos] === 70) return null; + return deserializeStatement(pos); +} + +function deserializeOptionForStatementInit(pos) { + if (uint8[pos] === 65) return null; + return deserializeForStatementInit(pos); +} + +function deserializeOptionLabelIdentifier(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeLabelIdentifier(pos); +} + +function deserializeVecSwitchCase(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 48; + for (; pos !== endPos;) { + arr.push(deserializeSwitchCase(pos)); + pos += 48; + } + return arr; +} + +function deserializeBoxCatchClause(pos) { + return deserializeCatchClause(uint32[pos >> 2]); +} + +function deserializeOptionBoxCatchClause(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxCatchClause(pos); +} + +function deserializeOptionBoxBlockStatement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxBlockStatement(pos); +} + +function deserializeOptionCatchParameter(pos) { + if (uint8[pos + 32] === 2) return null; + return deserializeCatchParameter(pos); +} + +function deserializeBoxTSTypeAnnotation(pos) { + return deserializeTSTypeAnnotation(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeAnnotation(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeAnnotation(pos); +} + +function deserializeBoxBindingIdentifier(pos) { + return deserializeBindingIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxObjectPattern(pos) { + return deserializeObjectPattern(uint32[pos >> 2]); +} + +function deserializeBoxArrayPattern(pos) { + return deserializeArrayPattern(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentPattern(pos) { + return deserializeAssignmentPattern(uint32[pos >> 2]); +} + +function deserializeVecBindingProperty(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 64; + for (; pos !== endPos;) { + arr.push(deserializeBindingProperty(pos)); + pos += 64; + } + return arr; +} + +function deserializeBoxBindingRestElement(pos) { + return deserializeBindingRestElement(uint32[pos >> 2]); +} + +function deserializeOptionBoxBindingRestElement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxBindingRestElement(pos); +} + +function deserializeOptionBindingPattern(pos) { + if (uint8[pos + 24] === 2) return null; + return deserializeBindingPattern(pos); +} + +function deserializeVecOptionBindingPattern(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeOptionBindingPattern(pos)); + pos += 32; + } + return arr; +} + +function deserializeOptionBindingIdentifier(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeBindingIdentifier(pos); +} + +function deserializeBoxTSTypeParameterDeclaration(pos) { + return deserializeTSTypeParameterDeclaration(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeParameterDeclaration(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeParameterDeclaration(pos); +} + +function deserializeBoxTSThisParameter(pos) { + return deserializeTSThisParameter(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSThisParameter(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSThisParameter(pos); +} + +function deserializeBoxFormalParameters(pos) { + return deserializeFormalParameters(uint32[pos >> 2]); +} + +function deserializeBoxFunctionBody(pos) { + return deserializeFunctionBody(uint32[pos >> 2]); +} + +function deserializeOptionBoxFunctionBody(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxFunctionBody(pos); +} + +function deserializeVecFormalParameter(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 72; + for (; pos !== endPos;) { + arr.push(deserializeFormalParameter(pos)); + pos += 72; + } + return arr; +} + +function deserializeVecDecorator(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 24; + for (; pos !== endPos;) { + arr.push(deserializeDecorator(pos)); + pos += 24; + } + return arr; +} + +function deserializeBoxClassBody(pos) { + return deserializeClassBody(uint32[pos >> 2]); +} + +function deserializeVecClassElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeClassElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxStaticBlock(pos) { + return deserializeStaticBlock(uint32[pos >> 2]); +} + +function deserializeBoxMethodDefinition(pos) { + return deserializeMethodDefinition(uint32[pos >> 2]); +} + +function deserializeBoxPropertyDefinition(pos) { + return deserializePropertyDefinition(uint32[pos >> 2]); +} + +function deserializeBoxAccessorProperty(pos) { + return deserializeAccessorProperty(uint32[pos >> 2]); +} + +function deserializeBoxTSIndexSignature(pos) { + return deserializeTSIndexSignature(uint32[pos >> 2]); +} + +function deserializeBoxImportDeclaration(pos) { + return deserializeImportDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportAllDeclaration(pos) { + return deserializeExportAllDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportDefaultDeclaration(pos) { + return deserializeExportDefaultDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportNamedDeclaration(pos) { + return deserializeExportNamedDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSExportAssignment(pos) { + return deserializeTSExportAssignment(uint32[pos >> 2]); +} + +function deserializeBoxTSNamespaceExportDeclaration(pos) { + return deserializeTSNamespaceExportDeclaration(uint32[pos >> 2]); +} + +function deserializeOptionImportPhase(pos) { + if (uint8[pos] === 2) return null; + return deserializeImportPhase(pos); +} + +function deserializeVecImportDeclarationSpecifier(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeImportDeclarationSpecifier(pos)); + pos += 16; + } + return arr; +} + +function deserializeOptionVecImportDeclarationSpecifier(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeVecImportDeclarationSpecifier(pos); +} + +function deserializeBoxWithClause(pos) { + return deserializeWithClause(uint32[pos >> 2]); +} + +function deserializeOptionBoxWithClause(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxWithClause(pos); +} + +function deserializeBoxImportSpecifier(pos) { + return deserializeImportSpecifier(uint32[pos >> 2]); +} + +function deserializeBoxImportDefaultSpecifier(pos) { + return deserializeImportDefaultSpecifier(uint32[pos >> 2]); +} + +function deserializeBoxImportNamespaceSpecifier(pos) { + return deserializeImportNamespaceSpecifier(uint32[pos >> 2]); +} + +function deserializeVecImportAttribute(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 112; + for (; pos !== endPos;) { + arr.push(deserializeImportAttribute(pos)); + pos += 112; + } + return arr; +} + +function deserializeOptionDeclaration(pos) { + if (uint8[pos] === 31) return null; + return deserializeDeclaration(pos); +} + +function deserializeVecExportSpecifier(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 128; + for (; pos !== endPos;) { + arr.push(deserializeExportSpecifier(pos)); + pos += 128; + } + return arr; +} + +function deserializeOptionStringLiteral(pos) { + if (uint8[pos + 40] === 2) return null; + return deserializeStringLiteral(pos); +} + +function deserializeOptionModuleExportName(pos) { + if (uint8[pos] === 3) return null; + return deserializeModuleExportName(pos); +} + +function deserializeF64(pos) { + return float64[pos >> 3]; +} + +function deserializeBoxJSXOpeningElement(pos) { + return deserializeJSXOpeningElement(uint32[pos >> 2]); +} + +function deserializeVecJSXChild(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeJSXChild(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxJSXClosingElement(pos) { + return deserializeJSXClosingElement(uint32[pos >> 2]); +} + +function deserializeOptionBoxJSXClosingElement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxJSXClosingElement(pos); +} + +function deserializeVecJSXAttributeItem(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeJSXAttributeItem(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxJSXIdentifier(pos) { + return deserializeJSXIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxJSXNamespacedName(pos) { + return deserializeJSXNamespacedName(uint32[pos >> 2]); +} + +function deserializeBoxJSXMemberExpression(pos) { + return deserializeJSXMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxJSXAttribute(pos) { + return deserializeJSXAttribute(uint32[pos >> 2]); +} + +function deserializeBoxJSXSpreadAttribute(pos) { + return deserializeJSXSpreadAttribute(uint32[pos >> 2]); +} + +function deserializeOptionJSXAttributeValue(pos) { + if (uint8[pos] === 4) return null; + return deserializeJSXAttributeValue(pos); +} + +function deserializeBoxJSXExpressionContainer(pos) { + return deserializeJSXExpressionContainer(uint32[pos >> 2]); +} + +function deserializeBoxJSXText(pos) { + return deserializeJSXText(uint32[pos >> 2]); +} + +function deserializeBoxJSXSpreadChild(pos) { + return deserializeJSXSpreadChild(uint32[pos >> 2]); +} + +function deserializeVecTSEnumMember(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 40; + for (; pos !== endPos;) { + arr.push(deserializeTSEnumMember(pos)); + pos += 40; + } + return arr; +} + +function deserializeBoxTSAnyKeyword(pos) { + return deserializeTSAnyKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSBigIntKeyword(pos) { + return deserializeTSBigIntKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSBooleanKeyword(pos) { + return deserializeTSBooleanKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSIntrinsicKeyword(pos) { + return deserializeTSIntrinsicKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNeverKeyword(pos) { + return deserializeTSNeverKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNullKeyword(pos) { + return deserializeTSNullKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNumberKeyword(pos) { + return deserializeTSNumberKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSObjectKeyword(pos) { + return deserializeTSObjectKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSStringKeyword(pos) { + return deserializeTSStringKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSSymbolKeyword(pos) { + return deserializeTSSymbolKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSUndefinedKeyword(pos) { + return deserializeTSUndefinedKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSUnknownKeyword(pos) { + return deserializeTSUnknownKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSVoidKeyword(pos) { + return deserializeTSVoidKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSArrayType(pos) { + return deserializeTSArrayType(uint32[pos >> 2]); +} + +function deserializeBoxTSConditionalType(pos) { + return deserializeTSConditionalType(uint32[pos >> 2]); +} + +function deserializeBoxTSConstructorType(pos) { + return deserializeTSConstructorType(uint32[pos >> 2]); +} + +function deserializeBoxTSFunctionType(pos) { + return deserializeTSFunctionType(uint32[pos >> 2]); +} + +function deserializeBoxTSImportType(pos) { + return deserializeTSImportType(uint32[pos >> 2]); +} + +function deserializeBoxTSIndexedAccessType(pos) { + return deserializeTSIndexedAccessType(uint32[pos >> 2]); +} + +function deserializeBoxTSInferType(pos) { + return deserializeTSInferType(uint32[pos >> 2]); +} + +function deserializeBoxTSIntersectionType(pos) { + return deserializeTSIntersectionType(uint32[pos >> 2]); +} + +function deserializeBoxTSLiteralType(pos) { + return deserializeTSLiteralType(uint32[pos >> 2]); +} + +function deserializeBoxTSMappedType(pos) { + return deserializeTSMappedType(uint32[pos >> 2]); +} + +function deserializeBoxTSNamedTupleMember(pos) { + return deserializeTSNamedTupleMember(uint32[pos >> 2]); +} + +function deserializeBoxTSTemplateLiteralType(pos) { + return deserializeTSTemplateLiteralType(uint32[pos >> 2]); +} + +function deserializeBoxTSThisType(pos) { + return deserializeTSThisType(uint32[pos >> 2]); +} + +function deserializeBoxTSTupleType(pos) { + return deserializeTSTupleType(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeLiteral(pos) { + return deserializeTSTypeLiteral(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeOperator(pos) { + return deserializeTSTypeOperator(uint32[pos >> 2]); +} + +function deserializeBoxTSTypePredicate(pos) { + return deserializeTSTypePredicate(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeQuery(pos) { + return deserializeTSTypeQuery(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeReference(pos) { + return deserializeTSTypeReference(uint32[pos >> 2]); +} + +function deserializeBoxTSUnionType(pos) { + return deserializeTSUnionType(uint32[pos >> 2]); +} + +function deserializeBoxTSParenthesizedType(pos) { + return deserializeTSParenthesizedType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocNullableType(pos) { + return deserializeJSDocNullableType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocNonNullableType(pos) { + return deserializeJSDocNonNullableType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocUnknownType(pos) { + return deserializeJSDocUnknownType(uint32[pos >> 2]); +} + +function deserializeVecTSType(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSType(pos)); + pos += 16; + } + return arr; +} + +function deserializeVecTSTupleElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSTupleElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSOptionalType(pos) { + return deserializeTSOptionalType(uint32[pos >> 2]); +} + +function deserializeBoxTSRestType(pos) { + return deserializeTSRestType(uint32[pos >> 2]); +} + +function deserializeBoxTSQualifiedName(pos) { + return deserializeTSQualifiedName(uint32[pos >> 2]); +} + +function deserializeOptionTSType(pos) { + if (uint8[pos] === 38) return null; + return deserializeTSType(pos); +} + +function deserializeVecTSTypeParameter(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 80; + for (; pos !== endPos;) { + arr.push(deserializeTSTypeParameter(pos)); + pos += 80; + } + return arr; +} + +function deserializeVecTSInterfaceHeritage(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeTSInterfaceHeritage(pos)); + pos += 32; + } + return arr; +} + +function deserializeBoxTSInterfaceBody(pos) { + return deserializeTSInterfaceBody(uint32[pos >> 2]); +} + +function deserializeVecTSSignature(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSSignature(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSPropertySignature(pos) { + return deserializeTSPropertySignature(uint32[pos >> 2]); +} + +function deserializeBoxTSCallSignatureDeclaration(pos) { + return deserializeTSCallSignatureDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSConstructSignatureDeclaration(pos) { + return deserializeTSConstructSignatureDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSMethodSignature(pos) { + return deserializeTSMethodSignature(uint32[pos >> 2]); +} + +function deserializeVecTSIndexSignatureName(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeTSIndexSignatureName(pos)); + pos += 32; + } + return arr; +} + +function deserializeOptionTSModuleDeclarationBody(pos) { + if (uint8[pos] === 2) return null; + return deserializeTSModuleDeclarationBody(pos); +} + +function deserializeBoxTSModuleBlock(pos) { + return deserializeTSModuleBlock(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeParameter(pos) { + return deserializeTSTypeParameter(uint32[pos >> 2]); +} + +function deserializeOptionBoxObjectExpression(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxObjectExpression(pos); +} + +function deserializeOptionTSImportTypeQualifier(pos) { + if (uint8[pos] === 2) return null; + return deserializeTSImportTypeQualifier(pos); +} + +function deserializeBoxTSImportTypeQualifiedName(pos) { + return deserializeTSImportTypeQualifiedName(uint32[pos >> 2]); +} + +function deserializeOptionTSMappedTypeModifierOperator(pos) { + if (uint8[pos] === 3) return null; + return deserializeTSMappedTypeModifierOperator(pos); +} + +function deserializeBoxTSExternalModuleReference(pos) { + return deserializeTSExternalModuleReference(uint32[pos >> 2]); +} + +function deserializeOptionNameSpan(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeNameSpan(pos); +} + +function deserializeVecError(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 80; + for (; pos !== endPos;) { + arr.push(deserializeError(pos)); + pos += 80; + } + return arr; +} + +function deserializeVecErrorLabel(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 24; + for (; pos !== endPos;) { + arr.push(deserializeErrorLabel(pos)); + pos += 24; + } + return arr; +} + +function deserializeVecStaticImport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 56; + for (; pos !== endPos;) { + arr.push(deserializeStaticImport(pos)); + pos += 56; + } + return arr; +} + +function deserializeVecStaticExport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeStaticExport(pos)); + pos += 32; + } + return arr; +} + +function deserializeVecDynamicImport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeDynamicImport(pos)); + pos += 16; + } + return arr; +} + +function deserializeVecSpan(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 8; + for (; pos !== endPos;) { + arr.push(deserializeSpan(pos)); + pos += 8; + } + return arr; +} + +function deserializeVecImportEntry(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 96; + for (; pos !== endPos;) { + arr.push(deserializeImportEntry(pos)); + pos += 96; + } + return arr; +} + +function deserializeVecExportEntry(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 144; + for (; pos !== endPos;) { + arr.push(deserializeExportEntry(pos)); + pos += 144; + } + return arr; +} diff --git a/napi/parser/generated/deserialize/js_range.js b/napi/parser/generated/deserialize/js_range.js index e6be5f879f949..a0ef0eeadf974 100644 --- a/napi/parser/generated/deserialize/js_range.js +++ b/napi/parser/generated/deserialize/js_range.js @@ -31,19 +31,20 @@ function deserializeWith(buffer, sourceTextInput, sourceByteLenInput, deserializ } function deserializeProgram(pos) { - let body = deserializeVecDirective(pos + 72); - body.push(...deserializeVecStatement(pos + 96)); - let end = deserializeU32(pos + 4), start; - start = deserializeU32(pos); - return { - type: 'Program', - body, - sourceType: deserializeModuleKind(pos + 125), - hashbang: deserializeOptionHashbang(pos + 48), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + program = { + type: 'Program', + body: null, + sourceType: deserializeModuleKind(pos + 125), + hashbang: null, + start, + end, + range: [start, end], + }; + program.hashbang = deserializeOptionHashbang(pos + 48); + (program.body = deserializeVecDirective(pos + 72)).push(...deserializeVecStatement(pos + 96)); + return program; } function deserializeExpression(pos) { @@ -194,14 +195,17 @@ function deserializeThisExpression(pos) { } function deserializeArrayExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ArrayExpression', - elements: deserializeVecArrayExpressionElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ArrayExpression', + elements: null, + start, + end, + range: [start, end], + }; + node.elements = deserializeVecArrayExpressionElement(pos + 8); + return node; } function deserializeArrayExpressionElement(pos) { @@ -306,14 +310,17 @@ function deserializeElision(pos) { } function deserializeObjectExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ObjectExpression', - properties: deserializeVecObjectPropertyKind(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ObjectExpression', + properties: null, + start, + end, + range: [start, end], + }; + node.properties = deserializeVecObjectPropertyKind(pos + 8); + return node; } function deserializeObjectPropertyKind(pos) { @@ -328,19 +335,23 @@ function deserializeObjectPropertyKind(pos) { } function deserializeObjectProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: deserializePropertyKind(pos + 40), - key: deserializePropertyKey(pos + 8), - value: deserializeExpression(pos + 24), - method: deserializeBool(pos + 41), - shorthand: deserializeBool(pos + 42), - computed: deserializeBool(pos + 43), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: deserializePropertyKind(pos + 40), + key: null, + value: null, + method: deserializeBool(pos + 41), + shorthand: deserializeBool(pos + 42), + computed: deserializeBool(pos + 43), + start, + end, + range: [start, end], + }; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeExpression(pos + 24); + return node; } function deserializePropertyKey(pos) { @@ -454,27 +465,35 @@ function deserializePropertyKind(pos) { } function deserializeTemplateLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TemplateLiteral', - quasis: deserializeVecTemplateElement(pos + 8), - expressions: deserializeVecExpression(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TemplateLiteral', + quasis: null, + expressions: null, + start, + end, + range: [start, end], + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.expressions = deserializeVecExpression(pos + 32); + return node; } function deserializeTaggedTemplateExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TaggedTemplateExpression', - tag: deserializeExpression(pos + 8), - quasi: deserializeTemplateLiteral(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TaggedTemplateExpression', + tag: null, + quasi: null, + start, + end, + range: [start, end], + }; + node.tag = deserializeExpression(pos + 8); + node.quasi = deserializeTemplateLiteral(pos + 32); + return node; } function deserializeTemplateElement(pos) { @@ -502,93 +521,123 @@ function deserializeTemplateElementValue(pos) { } function deserializeComputedMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializeExpression(pos + 24), - optional: deserializeBool(pos + 40), - computed: true, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 40), + computed: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeExpression(pos + 24); + node.computed = true; + return node; } function deserializeStaticMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializeIdentifierName(pos + 24), - optional: deserializeBool(pos + 48), - computed: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeIdentifierName(pos + 24); + node.computed = false; + return node; } function deserializePrivateFieldExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializePrivateIdentifier(pos + 24), - optional: deserializeBool(pos + 48), - computed: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializePrivateIdentifier(pos + 24); + node.computed = false; + return node; } function deserializeCallExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'CallExpression', - callee: deserializeExpression(pos + 8), - arguments: deserializeVecArgument(pos + 32), - optional: deserializeBool(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'CallExpression', + callee: null, + arguments: null, + optional: deserializeBool(pos + 56), + start, + end, + range: [start, end], + }; + node.callee = deserializeExpression(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeNewExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'NewExpression', - callee: deserializeExpression(pos + 8), - arguments: deserializeVecArgument(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'NewExpression', + callee: null, + arguments: null, + start, + end, + range: [start, end], + }; + node.callee = deserializeExpression(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeMetaProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MetaProperty', - meta: deserializeIdentifierName(pos + 8), - property: deserializeIdentifierName(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MetaProperty', + meta: null, + property: null, + start, + end, + range: [start, end], + }; + node.meta = deserializeIdentifierName(pos + 8); + node.property = deserializeIdentifierName(pos + 32); + return node; } function deserializeSpreadElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SpreadElement', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SpreadElement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeArgument(pos) { @@ -687,94 +736,123 @@ function deserializeArgument(pos) { } function deserializeUpdateExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'UpdateExpression', - operator: deserializeUpdateOperator(pos + 24), - prefix: deserializeBool(pos + 25), - argument: deserializeSimpleAssignmentTarget(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'UpdateExpression', + operator: deserializeUpdateOperator(pos + 24), + prefix: deserializeBool(pos + 25), + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeSimpleAssignmentTarget(pos + 8); + return node; } function deserializeUnaryExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'UnaryExpression', - operator: deserializeUnaryOperator(pos + 24), - argument: deserializeExpression(pos + 8), - prefix: true, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'UnaryExpression', + operator: deserializeUnaryOperator(pos + 24), + argument: null, + prefix: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + node.prefix = true; + return node; } function deserializeBinaryExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BinaryExpression', - left: deserializeExpression(pos + 8), - operator: deserializeBinaryOperator(pos + 40), - right: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BinaryExpression', + left: null, + operator: deserializeBinaryOperator(pos + 40), + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializePrivateInExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BinaryExpression', - left: deserializePrivateIdentifier(pos + 8), - operator: 'in', - right: deserializeExpression(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BinaryExpression', + left: null, + operator: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializePrivateIdentifier(pos + 8); + node.operator = 'in'; + node.right = deserializeExpression(pos + 32); + return node; } function deserializeLogicalExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'LogicalExpression', - left: deserializeExpression(pos + 8), - operator: deserializeLogicalOperator(pos + 40), - right: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'LogicalExpression', + left: null, + operator: deserializeLogicalOperator(pos + 40), + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeConditionalExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ConditionalExpression', - test: deserializeExpression(pos + 8), - consequent: deserializeExpression(pos + 24), - alternate: deserializeExpression(pos + 40), - start, - end, - range: [start, end], - }; -} + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ConditionalExpression', + test: null, + consequent: null, + alternate: null, + start, + end, + range: [start, end], + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeExpression(pos + 24); + node.alternate = deserializeExpression(pos + 40); + return node; +} function deserializeAssignmentExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentExpression', - operator: deserializeAssignmentOperator(pos + 40), - left: deserializeAssignmentTarget(pos + 8), - right: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentExpression', + operator: deserializeAssignmentOperator(pos + 40), + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeAssignmentTarget(pos) { @@ -830,42 +908,49 @@ function deserializeSimpleAssignmentTarget(pos) { function deserializeArrayAssignmentTarget(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrayPattern', + elements: null, + start, + end, + range: [start, end], + }, elements = deserializeVecOptionAssignmentTargetMaybeDefault(pos + 8), rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); rest !== null && elements.push(rest); - return { - type: 'ArrayPattern', - elements, - start, - end, - range: [start, end], - }; + node.elements = elements; + return node; } function deserializeObjectAssignmentTarget(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ObjectPattern', + properties: null, + start, + end, + range: [start, end], + }, properties = deserializeVecAssignmentTargetProperty(pos + 8), rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); rest !== null && properties.push(rest); - return { - type: 'ObjectPattern', - properties, - start, - end, - range: [start, end], - }; + node.properties = properties; + return node; } function deserializeAssignmentTargetRest(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'RestElement', - argument: deserializeAssignmentTarget(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'RestElement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeAssignmentTarget(pos + 8); + return node; } function deserializeAssignmentTargetMaybeDefault(pos) { @@ -898,15 +983,19 @@ function deserializeAssignmentTargetMaybeDefault(pos) { } function deserializeAssignmentTargetWithDefault(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentPattern', - left: deserializeAssignmentTarget(pos + 8), - right: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentPattern', + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeAssignmentTargetProperty(pos) { @@ -921,57 +1010,75 @@ function deserializeAssignmentTargetProperty(pos) { } function deserializeAssignmentTargetPropertyIdentifier(pos) { - let key = deserializeIdentifierReference(pos + 8), - start = deserializeU32(pos), + let start = deserializeU32(pos), end = deserializeU32(pos + 4), - init = deserializeOptionExpression(pos + 40), - keyCopy = { ...key }; - return { - type: 'Property', - kind: 'init', - key, - value: init === null ? keyCopy : { - type: 'AssignmentPattern', - left: keyCopy, - right: init, + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: null, start, end, range: [start, end], }, - method: false, - shorthand: true, - computed: false, + key = deserializeIdentifierReference(pos + 8), + init = deserializeOptionExpression(pos + 40), + value = { ...key }; + init !== null && (value = { + type: 'AssignmentPattern', + left: value, + right: init, start, end, range: [start, end], - }; + }); + node.kind = 'init'; + node.key = key; + node.value = value; + node.method = false; + node.shorthand = true; + node.computed = false; + return node; } function deserializeAssignmentTargetPropertyProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: 'init', - key: deserializePropertyKey(pos + 8), - value: deserializeAssignmentTargetMaybeDefault(pos + 24), - method: false, - shorthand: false, - computed: deserializeBool(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: deserializeBool(pos + 40), + start, + end, + range: [start, end], + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeAssignmentTargetMaybeDefault(pos + 24); + node.method = false; + node.shorthand = false; + return node; } function deserializeSequenceExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SequenceExpression', - expressions: deserializeVecExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SequenceExpression', + expressions: null, + start, + end, + range: [start, end], + }; + node.expressions = deserializeVecExpression(pos + 8); + return node; } function deserializeSuper(pos) { @@ -985,25 +1092,31 @@ function deserializeSuper(pos) { } function deserializeAwaitExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AwaitExpression', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AwaitExpression', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeChainExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ChainExpression', - expression: deserializeChainElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ChainExpression', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeChainElement(pos + 8); + return node; } function deserializeChainElement(pos) { @@ -1024,16 +1137,17 @@ function deserializeChainElement(pos) { } function deserializeParenthesizedExpression(pos) { - let node = deserializeExpression(pos + 8); + let node; { let start, end; node = { type: 'ParenthesizedExpression', - expression: node, + expression: null, start: start = deserializeU32(pos), end: end = deserializeU32(pos + 4), range: [start, end], }; + node.expression = deserializeExpression(pos + 8); } return node; } @@ -1110,15 +1224,18 @@ function deserializeStatement(pos) { } function deserializeDirective(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExpressionStatement', - expression: deserializeStringLiteral(pos + 8), - directive: deserializeStr(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExpressionStatement', + expression: null, + directive: deserializeStr(pos + 56), + start, + end, + range: [start, end], + }; + node.expression = deserializeStringLiteral(pos + 8); + return node; } function deserializeHashbang(pos) { @@ -1133,14 +1250,17 @@ function deserializeHashbang(pos) { } function deserializeBlockStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BlockStatement', - body: deserializeVecStatement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BlockStatement', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecStatement(pos + 8); + return node; } function deserializeDeclaration(pos) { @@ -1167,15 +1287,18 @@ function deserializeDeclaration(pos) { } function deserializeVariableDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'VariableDeclaration', - kind: deserializeVariableDeclarationKind(pos + 32), - declarations: deserializeVecVariableDeclarator(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'VariableDeclaration', + kind: deserializeVariableDeclarationKind(pos + 32), + declarations: null, + start, + end, + range: [start, end], + }; + node.declarations = deserializeVecVariableDeclarator(pos + 8); + return node; } function deserializeVariableDeclarationKind(pos) { @@ -1196,15 +1319,19 @@ function deserializeVariableDeclarationKind(pos) { } function deserializeVariableDeclarator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'VariableDeclarator', - id: deserializeBindingPattern(pos + 8), - init: deserializeOptionExpression(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'VariableDeclarator', + id: null, + init: null, + start, + end, + range: [start, end], + }; + node.id = deserializeBindingPattern(pos + 8); + node.init = deserializeOptionExpression(pos + 40); + return node; } function deserializeEmptyStatement(pos) { @@ -1218,65 +1345,87 @@ function deserializeEmptyStatement(pos) { } function deserializeExpressionStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExpressionStatement', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExpressionStatement', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeIfStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'IfStatement', - test: deserializeExpression(pos + 8), - consequent: deserializeStatement(pos + 24), - alternate: deserializeOptionStatement(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'IfStatement', + test: null, + consequent: null, + alternate: null, + start, + end, + range: [start, end], + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeStatement(pos + 24); + node.alternate = deserializeOptionStatement(pos + 40); + return node; } function deserializeDoWhileStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'DoWhileStatement', - body: deserializeStatement(pos + 8), - test: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'DoWhileStatement', + body: null, + test: null, + start, + end, + range: [start, end], + }; + node.body = deserializeStatement(pos + 8); + node.test = deserializeExpression(pos + 24); + return node; } function deserializeWhileStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'WhileStatement', - test: deserializeExpression(pos + 8), - body: deserializeStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'WhileStatement', + test: null, + body: null, + start, + end, + range: [start, end], + }; + node.test = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + return node; } function deserializeForStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForStatement', - init: deserializeOptionForStatementInit(pos + 8), - test: deserializeOptionExpression(pos + 24), - update: deserializeOptionExpression(pos + 40), - body: deserializeStatement(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForStatement', + init: null, + test: null, + update: null, + body: null, + start, + end, + range: [start, end], + }; + node.init = deserializeOptionForStatementInit(pos + 8); + node.test = deserializeOptionExpression(pos + 24); + node.update = deserializeOptionExpression(pos + 40); + node.body = deserializeStatement(pos + 56); + return node; } function deserializeForStatementInit(pos) { @@ -1375,16 +1524,21 @@ function deserializeForStatementInit(pos) { } function deserializeForInStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForInStatement', - left: deserializeForStatementLeft(pos + 8), - right: deserializeExpression(pos + 24), - body: deserializeStatement(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForInStatement', + left: null, + right: null, + body: null, + start, + end, + range: [start, end], + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + return node; } function deserializeForStatementLeft(pos) { @@ -1417,134 +1571,176 @@ function deserializeForStatementLeft(pos) { } function deserializeForOfStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForOfStatement', - await: deserializeBool(pos + 60), - left: deserializeForStatementLeft(pos + 8), - right: deserializeExpression(pos + 24), - body: deserializeStatement(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForOfStatement', + await: deserializeBool(pos + 60), + left: null, + right: null, + body: null, + start, + end, + range: [start, end], + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + return node; } function deserializeContinueStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ContinueStatement', - label: deserializeOptionLabelIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ContinueStatement', + label: null, + start, + end, + range: [start, end], + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + return node; } function deserializeBreakStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BreakStatement', - label: deserializeOptionLabelIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BreakStatement', + label: null, + start, + end, + range: [start, end], + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + return node; } function deserializeReturnStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ReturnStatement', - argument: deserializeOptionExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ReturnStatement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeOptionExpression(pos + 8); + return node; } function deserializeWithStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'WithStatement', - object: deserializeExpression(pos + 8), - body: deserializeStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'WithStatement', + object: null, + body: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + return node; } function deserializeSwitchStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SwitchStatement', - discriminant: deserializeExpression(pos + 8), - cases: deserializeVecSwitchCase(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SwitchStatement', + discriminant: null, + cases: null, + start, + end, + range: [start, end], + }; + node.discriminant = deserializeExpression(pos + 8); + node.cases = deserializeVecSwitchCase(pos + 24); + return node; } function deserializeSwitchCase(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SwitchCase', - test: deserializeOptionExpression(pos + 8), - consequent: deserializeVecStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SwitchCase', + test: null, + consequent: null, + start, + end, + range: [start, end], + }; + node.test = deserializeOptionExpression(pos + 8); + node.consequent = deserializeVecStatement(pos + 24); + return node; } function deserializeLabeledStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'LabeledStatement', - label: deserializeLabelIdentifier(pos + 8), - body: deserializeStatement(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'LabeledStatement', + label: null, + body: null, + start, + end, + range: [start, end], + }; + node.label = deserializeLabelIdentifier(pos + 8); + node.body = deserializeStatement(pos + 32); + return node; } function deserializeThrowStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ThrowStatement', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ThrowStatement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeTryStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TryStatement', - block: deserializeBoxBlockStatement(pos + 8), - handler: deserializeOptionBoxCatchClause(pos + 16), - finalizer: deserializeOptionBoxBlockStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TryStatement', + block: null, + handler: null, + finalizer: null, + start, + end, + range: [start, end], + }; + node.block = deserializeBoxBlockStatement(pos + 8); + node.handler = deserializeOptionBoxCatchClause(pos + 16); + node.finalizer = deserializeOptionBoxBlockStatement(pos + 24); + return node; } function deserializeCatchClause(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'CatchClause', - param: deserializeOptionCatchParameter(pos + 8), - body: deserializeBoxBlockStatement(pos + 48), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'CatchClause', + param: null, + body: null, + start, + end, + range: [start, end], + }; + node.param = deserializeOptionCatchParameter(pos + 8); + node.body = deserializeBoxBlockStatement(pos + 48); + return node; } function deserializeCatchParameter(pos) { @@ -1581,92 +1777,116 @@ function deserializeBindingPatternKind(pos) { } function deserializeAssignmentPattern(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentPattern', - left: deserializeBindingPattern(pos + 8), - right: deserializeExpression(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentPattern', + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeBindingPattern(pos + 8); + node.right = deserializeExpression(pos + 40); + return node; } function deserializeObjectPattern(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ObjectPattern', + properties: null, + start, + end, + range: [start, end], + }, properties = deserializeVecBindingProperty(pos + 8), rest = deserializeOptionBoxBindingRestElement(pos + 32); rest !== null && properties.push(rest); - return { - type: 'ObjectPattern', - properties, - start, - end, - range: [start, end], - }; + node.properties = properties; + return node; } function deserializeBindingProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: 'init', - key: deserializePropertyKey(pos + 8), - value: deserializeBindingPattern(pos + 24), - method: false, - shorthand: deserializeBool(pos + 56), - computed: deserializeBool(pos + 57), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: deserializeBool(pos + 56), + computed: deserializeBool(pos + 57), + start, + end, + range: [start, end], + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeBindingPattern(pos + 24); + node.method = false; + return node; } function deserializeArrayPattern(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrayPattern', + elements: null, + start, + end, + range: [start, end], + }, elements = deserializeVecOptionBindingPattern(pos + 8), rest = deserializeOptionBoxBindingRestElement(pos + 32); rest !== null && elements.push(rest); - return { - type: 'ArrayPattern', - elements, - start, - end, - range: [start, end], - }; + node.elements = elements; + return node; } function deserializeBindingRestElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'RestElement', - argument: deserializeBindingPattern(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'RestElement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeBindingPattern(pos + 8); + return node; } function deserializeFunction(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), params = deserializeBoxFormalParameters(pos + 56); - return { - type: deserializeFunctionType(pos + 84), - id: deserializeOptionBindingIdentifier(pos + 8), - generator: deserializeBool(pos + 85), - async: deserializeBool(pos + 86), - params, - body: deserializeOptionBoxFunctionBody(pos + 72), - expression: false, - start, - end, - range: [start, end], - }; -} - -function deserializeFunctionType(pos) { - switch (uint8[pos]) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeFunctionType(pos + 84), + id: null, + generator: deserializeBool(pos + 85), + async: deserializeBool(pos + 86), + params: null, + body: null, + expression: null, + start, + end, + range: [start, end], + }, + params = deserializeBoxFormalParameters(pos + 56); + node.id = deserializeOptionBindingIdentifier(pos + 8); + node.params = params; + node.body = deserializeOptionBoxFunctionBody(pos + 72); + node.expression = false; + return node; +} + +function deserializeFunctionType(pos) { + switch (uint8[pos]) { case 0: return 'FunctionDeclaration'; case 1: @@ -1684,14 +1904,17 @@ function deserializeFormalParameters(pos) { let params = deserializeVecFormalParameter(pos + 8); if (uint32[pos + 32 >> 2] !== 0 && uint32[pos + 36 >> 2] !== 0) { pos = uint32[pos + 32 >> 2]; - let start, end; - params.push({ - type: 'RestElement', - argument: deserializeBindingPatternKind(pos + 8), - start: start = deserializeU32(pos), - end: end = deserializeU32(pos + 4), - range: [start, end], - }); + let start, + end, + rest = { + type: 'RestElement', + argument: null, + start: start = deserializeU32(pos), + end: end = deserializeU32(pos + 4), + range: [start, end], + }; + rest.argument = deserializeBindingPatternKind(pos + 8); + params.push(rest); } return params; } @@ -1703,60 +1926,79 @@ function deserializeFormalParameter(pos) { } function deserializeFunctionBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), body = deserializeVecDirective(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BlockStatement', + body: null, + start, + end, + range: [start, end], + }, + body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); - return { - type: 'BlockStatement', - body, - start, - end, - range: [start, end], - }; + node.body = body; + return node; } function deserializeArrowFunctionExpression(pos) { let expression = deserializeBool(pos + 44), start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrowFunctionExpression', + expression, + async: deserializeBool(pos + 45), + params: null, + body: null, + id: null, + generator: null, + start, + end, + range: [start, end], + }, body = deserializeBoxFunctionBody(pos + 32); - return { - type: 'ArrowFunctionExpression', - expression, - async: deserializeBool(pos + 45), - params: deserializeBoxFormalParameters(pos + 16), - body: expression ? body.body[0].expression : body, - id: null, - generator: false, - start, - end, - range: [start, end], - }; + expression === true && (body = body.body[0].expression); + node.params = deserializeBoxFormalParameters(pos + 16); + node.body = body; + node.id = null; + node.generator = false; + return node; } function deserializeYieldExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'YieldExpression', - delegate: deserializeBool(pos + 24), - argument: deserializeOptionExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'YieldExpression', + delegate: deserializeBool(pos + 24), + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeOptionExpression(pos + 8); + return node; } function deserializeClass(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeClassType(pos + 132), - decorators: deserializeVecDecorator(pos + 8), - id: deserializeOptionBindingIdentifier(pos + 32), - superClass: deserializeOptionExpression(pos + 72), - body: deserializeBoxClassBody(pos + 120), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeClassType(pos + 132), + decorators: null, + id: null, + superClass: null, + body: null, + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.id = deserializeOptionBindingIdentifier(pos + 32); + node.superClass = deserializeOptionExpression(pos + 72); + node.body = deserializeBoxClassBody(pos + 120); + return node; } function deserializeClassType(pos) { @@ -1771,14 +2013,17 @@ function deserializeClassType(pos) { } function deserializeClassBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ClassBody', - body: deserializeVecClassElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ClassBody', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecClassElement(pos + 8); + return node; } function deserializeClassElement(pos) { @@ -1799,19 +2044,24 @@ function deserializeClassElement(pos) { } function deserializeMethodDefinition(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeMethodDefinitionType(pos + 56), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - value: deserializeBoxFunction(pos + 48), - kind: deserializeMethodDefinitionKind(pos + 57), - computed: deserializeBool(pos + 58), - static: deserializeBool(pos + 59), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeMethodDefinitionType(pos + 56), + decorators: null, + key: null, + value: null, + kind: deserializeMethodDefinitionKind(pos + 57), + computed: deserializeBool(pos + 58), + static: deserializeBool(pos + 59), + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeBoxFunction(pos + 48); + return node; } function deserializeMethodDefinitionType(pos) { @@ -1826,18 +2076,23 @@ function deserializeMethodDefinitionType(pos) { } function deserializePropertyDefinition(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializePropertyDefinitionType(pos + 72), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - value: deserializeOptionExpression(pos + 56), - computed: deserializeBool(pos + 73), - static: deserializeBool(pos + 74), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializePropertyDefinitionType(pos + 72), + decorators: null, + key: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeOptionExpression(pos + 56); + return node; } function deserializePropertyDefinitionType(pos) { @@ -1878,14 +2133,17 @@ function deserializePrivateIdentifier(pos) { } function deserializeStaticBlock(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'StaticBlock', - body: deserializeVecStatement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'StaticBlock', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecStatement(pos + 8); + return node; } function deserializeAccessorPropertyType(pos) { @@ -1900,49 +2158,62 @@ function deserializeAccessorPropertyType(pos) { } function deserializeAccessorProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeAccessorPropertyType(pos + 72), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - value: deserializeOptionExpression(pos + 56), - computed: deserializeBool(pos + 73), - static: deserializeBool(pos + 74), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeAccessorPropertyType(pos + 72), + decorators: null, + key: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeOptionExpression(pos + 56); + return node; } function deserializeImportExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportExpression', - source: deserializeExpression(pos + 8), - options: deserializeOptionExpression(pos + 24), - phase: deserializeOptionImportPhase(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportExpression', + source: null, + options: null, + phase: deserializeOptionImportPhase(pos + 40), + start, + end, + range: [start, end], + }; + node.source = deserializeExpression(pos + 8); + node.options = deserializeOptionExpression(pos + 24); + return node; } function deserializeImportDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ImportDeclaration', + specifiers: null, + source: null, + phase: deserializeOptionImportPhase(pos + 88), + attributes: null, + start, + end, + range: [start, end], + }, specifiers = deserializeOptionVecImportDeclarationSpecifier(pos + 8); specifiers === null && (specifiers = []); let withClause = deserializeOptionBoxWithClause(pos + 80); - return { - type: 'ImportDeclaration', - specifiers, - source: deserializeStringLiteral(pos + 32), - phase: deserializeOptionImportPhase(pos + 88), - attributes: withClause === null ? [] : withClause.attributes, - start, - end, - range: [start, end], - }; + node.specifiers = specifiers; + node.source = deserializeStringLiteral(pos + 32); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeImportPhase(pos) { @@ -1970,37 +2241,47 @@ function deserializeImportDeclarationSpecifier(pos) { } function deserializeImportSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportSpecifier', - imported: deserializeModuleExportName(pos + 8), - local: deserializeBindingIdentifier(pos + 64), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportSpecifier', + imported: null, + local: null, + start, + end, + range: [start, end], + }; + node.imported = deserializeModuleExportName(pos + 8); + node.local = deserializeBindingIdentifier(pos + 64); + return node; } function deserializeImportDefaultSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportDefaultSpecifier', - local: deserializeBindingIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportDefaultSpecifier', + local: null, + start, + end, + range: [start, end], + }; + node.local = deserializeBindingIdentifier(pos + 8); + return node; } function deserializeImportNamespaceSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportNamespaceSpecifier', - local: deserializeBindingIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportNamespaceSpecifier', + local: null, + start, + end, + range: [start, end], + }; + node.local = deserializeBindingIdentifier(pos + 8); + return node; } function deserializeWithClause(pos) { @@ -2008,15 +2289,19 @@ function deserializeWithClause(pos) { } function deserializeImportAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportAttribute', - key: deserializeImportAttributeKey(pos + 8), - value: deserializeStringLiteral(pos + 64), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportAttribute', + key: null, + value: null, + start, + end, + range: [start, end], + }; + node.key = deserializeImportAttributeKey(pos + 8); + node.value = deserializeStringLiteral(pos + 64); + return node; } function deserializeImportAttributeKey(pos) { @@ -2031,55 +2316,73 @@ function deserializeImportAttributeKey(pos) { } function deserializeExportNamedDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), withClause = deserializeOptionBoxWithClause(pos + 96); - return { - type: 'ExportNamedDeclaration', - declaration: deserializeOptionDeclaration(pos + 8), - specifiers: deserializeVecExportSpecifier(pos + 24), - source: deserializeOptionStringLiteral(pos + 48), - attributes: withClause === null ? [] : withClause.attributes, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportNamedDeclaration', + declaration: null, + specifiers: null, + source: null, + attributes: null, + start, + end, + range: [start, end], + }, + withClause = deserializeOptionBoxWithClause(pos + 96); + node.declaration = deserializeOptionDeclaration(pos + 8); + node.specifiers = deserializeVecExportSpecifier(pos + 24); + node.source = deserializeOptionStringLiteral(pos + 48); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeExportDefaultDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExportDefaultDeclaration', - declaration: deserializeExportDefaultDeclarationKind(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportDefaultDeclaration', + declaration: null, + start, + end, + range: [start, end], + }; + node.declaration = deserializeExportDefaultDeclarationKind(pos + 8); + return node; } function deserializeExportAllDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ExportAllDeclaration', + exported: null, + source: null, + attributes: null, + start, + end, + range: [start, end], + }, withClause = deserializeOptionBoxWithClause(pos + 112); - return { - type: 'ExportAllDeclaration', - exported: deserializeOptionModuleExportName(pos + 8), - source: deserializeStringLiteral(pos + 64), - attributes: withClause === null ? [] : withClause.attributes, - start, - end, - range: [start, end], - }; + node.exported = deserializeOptionModuleExportName(pos + 8); + node.source = deserializeStringLiteral(pos + 64); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeExportSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExportSpecifier', - local: deserializeModuleExportName(pos + 8), - exported: deserializeModuleExportName(pos + 64), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportSpecifier', + local: null, + exported: null, + start, + end, + range: [start, end], + }; + node.local = deserializeModuleExportName(pos + 8); + node.exported = deserializeModuleExportName(pos + 64); + return node; } function deserializeExportDefaultDeclarationKind(pos) { @@ -2195,39 +2498,51 @@ function deserializeModuleExportName(pos) { } function deserializeV8IntrinsicExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'V8IntrinsicExpression', - name: deserializeIdentifierName(pos + 8), - arguments: deserializeVecArgument(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'V8IntrinsicExpression', + name: null, + arguments: null, + start, + end, + range: [start, end], + }; + node.name = deserializeIdentifierName(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeBooleanLiteral(pos) { - let value = deserializeBool(pos + 8), start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Literal', - value, - raw: start === 0 && end === 0 ? null : value + '', - start, - end, - range: [start, end], - }; + let value = deserializeBool(pos + 8), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value, + raw: null, + start, + end, + range: [start, end], + }; + node.raw = start === 0 && end === 0 ? null : value + ''; + return node; } function deserializeNullLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Literal', - value: null, - raw: start === 0 && end === 0 ? null : 'null', - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: null, + start, + end, + range: [start, end], + }; + node.value = null; + node.raw = start === 0 && end === 0 ? null : 'null'; + return node; } function deserializeNumericLiteral(pos) { @@ -2243,46 +2558,61 @@ function deserializeNumericLiteral(pos) { } function deserializeStringLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), value = deserializeStr(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + start, + end, + range: [start, end], + }, + value = deserializeStr(pos + 8); deserializeBool(pos + 40) && (value = value.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); - return { - type: 'Literal', - value, - raw: deserializeOptionStr(pos + 24), - start, - end, - range: [start, end], - }; + node.value = value; + return node; } function deserializeBigIntLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), bigint = deserializeStr(pos + 8); - return { - type: 'Literal', - value: BigInt(bigint), - raw: deserializeOptionStr(pos + 24), - bigint, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + bigint: null, + start, + end, + range: [start, end], + }, + bigint = deserializeStr(pos + 8); + node.value = BigInt(bigint); + node.bigint = bigint; + return node; } function deserializeRegExpLiteral(pos) { - let regex = deserializeRegExp(pos + 8), start = deserializeU32(pos), end = deserializeU32(pos + 4), value = null; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 40), + regex: null, + start, + end, + range: [start, end], + }, + regex = deserializeRegExp(pos + 8), + value = null; try { value = new RegExp(regex.pattern, regex.flags); } catch {} - return { - type: 'Literal', - value, - raw: deserializeOptionStr(pos + 40), - regex, - start, - end, - range: [start, end], - }; + node.value = value; + node.regex = regex; + return node; } function deserializeRegExp(pos) { @@ -2307,69 +2637,90 @@ function deserializeRegExpFlags(pos) { } function deserializeJSXElement(pos) { - let closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), - start = deserializeU32(pos), + let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'JSXElement', + openingElement: null, + children: null, + closingElement: null, + start, + end, + range: [start, end], + }, + closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), openingElement = deserializeBoxJSXOpeningElement(pos + 8); closingElement === null && (openingElement.selfClosing = true); - return { - type: 'JSXElement', - openingElement, - children: deserializeVecJSXChild(pos + 16), - closingElement, - start, - end, - range: [start, end], - }; + node.openingElement = openingElement; + node.children = deserializeVecJSXChild(pos + 16); + node.closingElement = closingElement; + return node; } function deserializeJSXOpeningElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXOpeningElement', - name: deserializeJSXElementName(pos + 8), - attributes: deserializeVecJSXAttributeItem(pos + 32), - selfClosing: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXOpeningElement', + name: null, + attributes: null, + selfClosing: null, + start, + end, + range: [start, end], + }; + node.name = deserializeJSXElementName(pos + 8); + node.attributes = deserializeVecJSXAttributeItem(pos + 32); + node.selfClosing = false; + return node; } function deserializeJSXClosingElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXClosingElement', - name: deserializeJSXElementName(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXClosingElement', + name: null, + start, + end, + range: [start, end], + }; + node.name = deserializeJSXElementName(pos + 8); + return node; } function deserializeJSXFragment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXFragment', - openingFragment: deserializeJSXOpeningFragment(pos + 8), - children: deserializeVecJSXChild(pos + 16), - closingFragment: deserializeJSXClosingFragment(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXFragment', + openingFragment: null, + children: null, + closingFragment: null, + start, + end, + range: [start, end], + }; + node.openingFragment = deserializeJSXOpeningFragment(pos + 8); + node.children = deserializeVecJSXChild(pos + 16); + node.closingFragment = deserializeJSXClosingFragment(pos + 40); + return node; } function deserializeJSXOpeningFragment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXOpeningFragment', - attributes: [], - selfClosing: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXOpeningFragment', + attributes: null, + selfClosing: null, + start, + end, + range: [start, end], + }; + node.attributes = []; + node.selfClosing = false; + return node; } function deserializeJSXClosingFragment(pos) { @@ -2414,27 +2765,35 @@ function deserializeJSXElementName(pos) { } function deserializeJSXNamespacedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXNamespacedName', - namespace: deserializeJSXIdentifier(pos + 8), - name: deserializeJSXIdentifier(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXNamespacedName', + namespace: null, + name: null, + start, + end, + range: [start, end], + }; + node.namespace = deserializeJSXIdentifier(pos + 8); + node.name = deserializeJSXIdentifier(pos + 32); + return node; } function deserializeJSXMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXMemberExpression', - object: deserializeJSXMemberExpressionObject(pos + 8), - property: deserializeJSXIdentifier(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXMemberExpression', + object: null, + property: null, + start, + end, + range: [start, end], + }; + node.object = deserializeJSXMemberExpressionObject(pos + 8); + node.property = deserializeJSXIdentifier(pos + 24); + return node; } function deserializeJSXMemberExpressionObject(pos) { @@ -2465,14 +2824,17 @@ function deserializeJSXMemberExpressionObject(pos) { } function deserializeJSXExpressionContainer(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXExpressionContainer', - expression: deserializeJSXExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXExpressionContainer', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeJSXExpression(pos + 8); + return node; } function deserializeJSXExpression(pos) { @@ -2592,26 +2954,33 @@ function deserializeJSXAttributeItem(pos) { } function deserializeJSXAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXAttribute', - name: deserializeJSXAttributeName(pos + 8), - value: deserializeOptionJSXAttributeValue(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXAttribute', + name: null, + value: null, + start, + end, + range: [start, end], + }; + node.name = deserializeJSXAttributeName(pos + 8); + node.value = deserializeOptionJSXAttributeValue(pos + 24); + return node; } function deserializeJSXSpreadAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXSpreadAttribute', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXSpreadAttribute', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeJSXAttributeName(pos) { @@ -2669,16 +3038,19 @@ function deserializeJSXChild(pos) { } function deserializeJSXSpreadChild(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXSpreadChild', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; -} - + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXSpreadChild', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; +} + function deserializeJSXText(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4); return { @@ -2692,55 +3064,73 @@ function deserializeJSXText(pos) { } function deserializeTSThisParameter(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: 'this', - optional: false, - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 16), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.name = 'this'; + node.optional = false; + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + return node; } function deserializeTSEnumDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumDeclaration', - id: deserializeBindingIdentifier(pos + 8), - body: deserializeTSEnumBody(pos + 40), - const: deserializeBool(pos + 76), - declare: deserializeBool(pos + 77), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumDeclaration', + id: null, + body: null, + const: deserializeBool(pos + 76), + declare: deserializeBool(pos + 77), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.body = deserializeTSEnumBody(pos + 40); + return node; } function deserializeTSEnumBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumBody', - members: deserializeVecTSEnumMember(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumBody', + members: null, + start, + end, + range: [start, end], + }; + node.members = deserializeVecTSEnumMember(pos + 8); + return node; } function deserializeTSEnumMember(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumMember', - id: deserializeTSEnumMemberName(pos + 8), - initializer: deserializeOptionExpression(pos + 24), - computed: deserializeU8(pos + 8) > 1, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumMember', + id: null, + initializer: null, + computed: null, + start, + end, + range: [start, end], + }; + node.id = deserializeTSEnumMemberName(pos + 8); + node.initializer = deserializeOptionExpression(pos + 24); + node.computed = deserializeU8(pos + 8) > 1; + return node; } function deserializeTSEnumMemberName(pos) { @@ -2759,25 +3149,31 @@ function deserializeTSEnumMemberName(pos) { } function deserializeTSTypeAnnotation(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAnnotation', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAnnotation', + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSLiteralType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSLiteralType', - literal: deserializeTSLiteral(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSLiteralType', + literal: null, + start, + end, + range: [start, end], + }; + node.literal = deserializeTSLiteral(pos + 8); + return node; } function deserializeTSLiteral(pos) { @@ -2881,66 +3277,82 @@ function deserializeTSType(pos) { } function deserializeTSConditionalType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConditionalType', - checkType: deserializeTSType(pos + 8), - extendsType: deserializeTSType(pos + 24), - trueType: deserializeTSType(pos + 40), - falseType: deserializeTSType(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConditionalType', + checkType: null, + extendsType: null, + trueType: null, + falseType: null, + start, + end, + range: [start, end], + }; + node.checkType = deserializeTSType(pos + 8); + node.extendsType = deserializeTSType(pos + 24); + node.trueType = deserializeTSType(pos + 40); + node.falseType = deserializeTSType(pos + 56); + return node; } function deserializeTSUnionType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSUnionType', - types: deserializeVecTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSUnionType', + types: null, + start, + end, + range: [start, end], + }; + node.types = deserializeVecTSType(pos + 8); + return node; } function deserializeTSIntersectionType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIntersectionType', - types: deserializeVecTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIntersectionType', + types: null, + start, + end, + range: [start, end], + }; + node.types = deserializeVecTSType(pos + 8); + return node; } function deserializeTSParenthesizedType(pos) { - let node = deserializeTSType(pos + 8); + let node; { let start, end; node = { type: 'TSParenthesizedType', - typeAnnotation: node, + typeAnnotation: null, start: start = deserializeU32(pos), end: end = deserializeU32(pos + 4), range: [start, end], }; + node.typeAnnotation = deserializeTSType(pos + 8); } return node; } function deserializeTSTypeOperator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeOperator', - operator: deserializeTSTypeOperatorOperator(pos + 24), - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeOperator', + operator: deserializeTSTypeOperatorOperator(pos + 24), + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSTypeOperatorOperator(pos) { @@ -2957,72 +3369,92 @@ function deserializeTSTypeOperatorOperator(pos) { } function deserializeTSArrayType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSArrayType', - elementType: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSArrayType', + elementType: null, + start, + end, + range: [start, end], + }; + node.elementType = deserializeTSType(pos + 8); + return node; } function deserializeTSIndexedAccessType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIndexedAccessType', - objectType: deserializeTSType(pos + 8), - indexType: deserializeTSType(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIndexedAccessType', + objectType: null, + indexType: null, + start, + end, + range: [start, end], + }; + node.objectType = deserializeTSType(pos + 8); + node.indexType = deserializeTSType(pos + 24); + return node; } function deserializeTSTupleType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTupleType', - elementTypes: deserializeVecTSTupleElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTupleType', + elementTypes: null, + start, + end, + range: [start, end], + }; + node.elementTypes = deserializeVecTSTupleElement(pos + 8); + return node; } function deserializeTSNamedTupleMember(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNamedTupleMember', - label: deserializeIdentifierName(pos + 8), - elementType: deserializeTSTupleElement(pos + 32), - optional: deserializeBool(pos + 48), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNamedTupleMember', + label: null, + elementType: null, + optional: deserializeBool(pos + 48), + start, + end, + range: [start, end], + }; + node.label = deserializeIdentifierName(pos + 8); + node.elementType = deserializeTSTupleElement(pos + 32); + return node; } function deserializeTSOptionalType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSOptionalType', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSOptionalType', + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSRestType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSRestType', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSRestType', + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSTupleElement(pos) { @@ -3251,15 +3683,19 @@ function deserializeTSBigIntKeyword(pos) { } function deserializeTSTypeReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeReference', - typeName: deserializeTSTypeName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeReference', + typeName: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.typeName = deserializeTSTypeName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypeName(pos) { @@ -3276,110 +3712,145 @@ function deserializeTSTypeName(pos) { } function deserializeTSQualifiedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSQualifiedName', - left: deserializeTSTypeName(pos + 8), - right: deserializeIdentifierName(pos + 24), - start, - end, - range: [start, end], - }; -} + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeTSTypeName(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + return node; +} function deserializeTSTypeParameterInstantiation(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameterInstantiation', - params: deserializeVecTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameterInstantiation', + params: null, + start, + end, + range: [start, end], + }; + node.params = deserializeVecTSType(pos + 8); + return node; } function deserializeTSTypeParameter(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameter', - name: deserializeBindingIdentifier(pos + 8), - constraint: deserializeOptionTSType(pos + 40), - default: deserializeOptionTSType(pos + 56), - in: deserializeBool(pos + 72), - out: deserializeBool(pos + 73), - const: deserializeBool(pos + 74), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameter', + name: null, + constraint: null, + default: null, + in: deserializeBool(pos + 72), + out: deserializeBool(pos + 73), + const: deserializeBool(pos + 74), + start, + end, + range: [start, end], + }; + node.name = deserializeBindingIdentifier(pos + 8); + node.constraint = deserializeOptionTSType(pos + 40); + node.default = deserializeOptionTSType(pos + 56); + return node; } function deserializeTSTypeParameterDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameterDeclaration', - params: deserializeVecTSTypeParameter(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameterDeclaration', + params: null, + start, + end, + range: [start, end], + }; + node.params = deserializeVecTSTypeParameter(pos + 8); + return node; } function deserializeTSTypeAliasDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAliasDeclaration', - id: deserializeBindingIdentifier(pos + 8), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - typeAnnotation: deserializeTSType(pos + 48), - declare: deserializeBool(pos + 68), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAliasDeclaration', + id: null, + typeParameters: null, + typeAnnotation: null, + declare: deserializeBool(pos + 68), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.typeAnnotation = deserializeTSType(pos + 48); + return node; } function deserializeTSInterfaceDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceDeclaration', - id: deserializeBindingIdentifier(pos + 8), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - extends: deserializeVecTSInterfaceHeritage(pos + 48), - body: deserializeBoxTSInterfaceBody(pos + 72), - declare: deserializeBool(pos + 84), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceDeclaration', + id: null, + typeParameters: null, + extends: null, + body: null, + declare: deserializeBool(pos + 84), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.extends = deserializeVecTSInterfaceHeritage(pos + 48); + node.body = deserializeBoxTSInterfaceBody(pos + 72); + return node; } function deserializeTSInterfaceBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceBody', - body: deserializeVecTSSignature(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceBody', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecTSSignature(pos + 8); + return node; } function deserializeTSPropertySignature(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSPropertySignature', - computed: deserializeBool(pos + 32), - optional: deserializeBool(pos + 33), - readonly: deserializeBool(pos + 34), - key: deserializePropertyKey(pos + 8), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - accessibility: null, - static: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSPropertySignature', + computed: deserializeBool(pos + 32), + optional: deserializeBool(pos + 33), + readonly: deserializeBool(pos + 34), + key: null, + typeAnnotation: null, + accessibility: null, + static: null, + start, + end, + range: [start, end], + }; + node.key = deserializePropertyKey(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.accessibility = null; + node.static = false; + return node; } function deserializeTSSignature(pos) { @@ -3400,35 +3871,44 @@ function deserializeTSSignature(pos) { } function deserializeTSIndexSignature(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIndexSignature', - parameters: deserializeVecTSIndexSignatureName(pos + 8), - typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 32), - readonly: deserializeBool(pos + 40), - static: deserializeBool(pos + 41), - accessibility: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIndexSignature', + parameters: null, + typeAnnotation: null, + readonly: deserializeBool(pos + 40), + static: deserializeBool(pos + 41), + accessibility: null, + start, + end, + range: [start, end], + }; + node.parameters = deserializeVecTSIndexSignatureName(pos + 8); + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 32); + node.accessibility = null; + return node; } function deserializeTSCallSignatureDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSCallSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }, params = deserializeBoxFormalParameters(pos + 24), thisParam = deserializeOptionBoxTSThisParameter(pos + 16); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSCallSignatureDeclaration', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 32), - start, - end, - range: [start, end], - }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 32); + return node; } function deserializeTSMethodSignatureKind(pos) { @@ -3447,77 +3927,103 @@ function deserializeTSMethodSignatureKind(pos) { function deserializeTSMethodSignature(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSMethodSignature', + key: null, + computed: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + kind: deserializeTSMethodSignatureKind(pos + 62), + typeParameters: null, + params: null, + returnType: null, + accessibility: null, + readonly: null, + static: null, + start, + end, + range: [start, end], + }, params = deserializeBoxFormalParameters(pos + 40), thisParam = deserializeOptionBoxTSThisParameter(pos + 32); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSMethodSignature', - key: deserializePropertyKey(pos + 8), - computed: deserializeBool(pos + 60), - optional: deserializeBool(pos + 61), - kind: deserializeTSMethodSignatureKind(pos + 62), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 24), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 48), - accessibility: null, - readonly: false, - static: false, - start, - end, - range: [start, end], - }; + node.key = deserializePropertyKey(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 24); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.accessibility = null; + node.readonly = false; + node.static = false; + return node; } function deserializeTSConstructSignatureDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConstructSignatureDeclaration', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConstructSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSIndexSignatureName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSInterfaceHeritage(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceHeritage', - expression: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceHeritage', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypePredicate(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypePredicate', - parameterName: deserializeTSTypePredicateName(pos + 8), - asserts: deserializeBool(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypePredicate', + parameterName: null, + asserts: deserializeBool(pos + 32), + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.parameterName = deserializeTSTypePredicateName(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSTypePredicateName(pos) { @@ -3537,56 +4043,24 @@ function deserializeTSModuleDeclaration(pos) { start = deserializeU32(pos), end = deserializeU32(pos + 4), declare = deserializeBool(pos + 85), - id = deserializeTSModuleDeclarationName(pos + 8), + node, body = deserializeOptionTSModuleDeclarationBody(pos + 64); - // Flatten `body`, and nest `id` - if (body !== null && body.type === 'TSModuleDeclaration') { - let innerId = body.id; - if (innerId.type === 'Identifier') { - let start, end; - id = { - type: 'TSQualifiedName', - left: id, - right: innerId, - start: start = id.start, - end: end = innerId.end, - range: [start, end], - }; - } else { - // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of - // this module on left, and previous `left` of innermost `TSQualifiedName` on right - for (;;) { - innerId.start = innerId.range[0] = id.start; - if (innerId.left.type === 'Identifier') break; - innerId = innerId.left; - } - let start, end; - innerId.left = { - type: 'TSQualifiedName', - left: id, - right: innerId.left, - start: start = id.start, - end: end = innerId.left.end, - range: [start, end], - }; - id = body.id; - } - body = Object.hasOwn(body, 'body') ? body.body : null; - } - return body === null - ? { + if (body === null) { + node = { type: 'TSModuleDeclaration', - id, + id: null, kind, declare, global, start, end, range: [start, end], - } - : { + }; + node.id = deserializeTSModuleDeclarationName(pos + 8); + } else { + node = { type: 'TSModuleDeclaration', - id, + id: null, body, kind, declare, @@ -3595,6 +4069,47 @@ function deserializeTSModuleDeclaration(pos) { end, range: [start, end], }; + let id = deserializeTSModuleDeclarationName(pos + 8); + if (body.type === 'TSModuleBlock') node.id = id; + else { + let innerId = body.id; + if (innerId.type === 'Identifier') { + let start, end; + node.id = { + type: 'TSQualifiedName', + left: id, + right: innerId, + start: start = id.start, + end: end = innerId.end, + range: [start, end], + }; + } else { + // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of + // this module on left, and previous `left` of innermost `TSQualifiedName` on right + node.id = innerId; + let { start } = id; + for (;;) { + innerId.start = innerId.range[0] = start; + if (innerId.left.type === 'Identifier') break; + innerId = innerId.left; + } + let end, right = innerId.left; + innerId.left = { + type: 'TSQualifiedName', + left: id, + right, + start, + end: end = right.end, + range: [start, end], + }; + } + if (Object.hasOwn(body, 'body')) { + body = body.body; + node.body = body; + } else body = null; + } + } + return node; } function deserializeTSModuleDeclarationKind(pos) { @@ -3633,49 +4148,63 @@ function deserializeTSModuleDeclarationBody(pos) { } function deserializeTSModuleBlock(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), body = deserializeVecDirective(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSModuleBlock', + body: null, + start, + end, + range: [start, end], + }, + body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); - return { - type: 'TSModuleBlock', - body, - start, - end, - range: [start, end], - }; + node.body = body; + return node; } function deserializeTSTypeLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeLiteral', - members: deserializeVecTSSignature(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeLiteral', + members: null, + start, + end, + range: [start, end], + }; + node.members = deserializeVecTSSignature(pos + 8); + return node; } function deserializeTSInferType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInferType', - typeParameter: deserializeBoxTSTypeParameter(pos + 8), - start, - end, - range: [start, end], - }; -} - -function deserializeTSTypeQuery(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeQuery', - exprName: deserializeTSTypeQueryExprName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInferType', + typeParameter: null, + start, + end, + range: [start, end], + }; + node.typeParameter = deserializeBoxTSTypeParameter(pos + 8); + return node; +} + +function deserializeTSTypeQuery(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeQuery', + exprName: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.exprName = deserializeTSTypeQueryExprName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypeQueryExprName(pos) { @@ -3694,17 +4223,23 @@ function deserializeTSTypeQueryExprName(pos) { } function deserializeTSImportType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSImportType', - argument: deserializeTSType(pos + 8), - options: deserializeOptionBoxObjectExpression(pos + 24), - qualifier: deserializeOptionTSImportTypeQualifier(pos + 32), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 48), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSImportType', + argument: null, + options: null, + qualifier: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeTSType(pos + 8); + node.options = deserializeOptionBoxObjectExpression(pos + 24); + node.qualifier = deserializeOptionTSImportTypeQualifier(pos + 32); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 48); + return node; } function deserializeTSImportTypeQualifier(pos) { @@ -3719,66 +4254,87 @@ function deserializeTSImportTypeQualifier(pos) { } function deserializeTSImportTypeQualifiedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSQualifiedName', - left: deserializeTSImportTypeQualifier(pos + 8), - right: deserializeIdentifierName(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeTSImportTypeQualifier(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + return node; } function deserializeTSFunctionType(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSFunctionType', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }, params = deserializeBoxFormalParameters(pos + 24), thisParam = deserializeOptionBoxTSThisParameter(pos + 16); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSFunctionType', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params, - returnType: deserializeBoxTSTypeAnnotation(pos + 32), - start, - end, - range: [start, end], - }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeBoxTSTypeAnnotation(pos + 32); + return node; } function deserializeTSConstructorType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConstructorType', - abstract: deserializeBool(pos + 32), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConstructorType', + abstract: deserializeBool(pos + 32), + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSMappedType(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSMappedType', + key: null, + constraint: null, + nameType: null, + typeAnnotation: null, + optional: null, + readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), + start, + end, + range: [start, end], + }, typeParameter = deserializeBoxTSTypeParameter(pos + 8), + key = typeParameter.name, + { constraint } = typeParameter, optional = deserializeOptionTSMappedTypeModifierOperator(pos + 52); optional === null && (optional = false); - return { - type: 'TSMappedType', - key: typeParameter.name, - constraint: typeParameter.constraint, - nameType: deserializeOptionTSType(pos + 16), - typeAnnotation: deserializeOptionTSType(pos + 32), - optional, - readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), - start, - end, - range: [start, end], - }; + node.key = key; + node.constraint = constraint; + node.nameType = deserializeOptionTSType(pos + 16); + node.typeAnnotation = deserializeOptionTSType(pos + 32); + node.optional = optional; + return node; } function deserializeTSMappedTypeModifierOperator(pos) { @@ -3795,64 +4351,84 @@ function deserializeTSMappedTypeModifierOperator(pos) { } function deserializeTSTemplateLiteralType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTemplateLiteralType', - quasis: deserializeVecTemplateElement(pos + 8), - types: deserializeVecTSType(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTemplateLiteralType', + quasis: null, + types: null, + start, + end, + range: [start, end], + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.types = deserializeVecTSType(pos + 32); + return node; } function deserializeTSAsExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSAsExpression', - expression: deserializeExpression(pos + 8), - typeAnnotation: deserializeTSType(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSAsExpression', + expression: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + return node; } function deserializeTSSatisfiesExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSSatisfiesExpression', - expression: deserializeExpression(pos + 8), - typeAnnotation: deserializeTSType(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSSatisfiesExpression', + expression: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + return node; } function deserializeTSTypeAssertion(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAssertion', - typeAnnotation: deserializeTSType(pos + 8), - expression: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAssertion', + typeAnnotation: null, + expression: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + node.expression = deserializeExpression(pos + 24); + return node; } function deserializeTSImportEqualsDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSImportEqualsDeclaration', - id: deserializeBindingIdentifier(pos + 8), - moduleReference: deserializeTSModuleReference(pos + 40), - importKind: deserializeImportOrExportKind(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSImportEqualsDeclaration', + id: null, + moduleReference: null, + importKind: deserializeImportOrExportKind(pos + 56), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.moduleReference = deserializeTSModuleReference(pos + 40); + return node; } function deserializeTSModuleReference(pos) { @@ -3871,70 +4447,89 @@ function deserializeTSModuleReference(pos) { } function deserializeTSExternalModuleReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSExternalModuleReference', - expression: deserializeStringLiteral(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSExternalModuleReference', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeStringLiteral(pos + 8); + return node; } function deserializeTSNonNullExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNonNullExpression', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNonNullExpression', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeDecorator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Decorator', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Decorator', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeTSExportAssignment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSExportAssignment', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSExportAssignment', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeTSNamespaceExportDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNamespaceExportDeclaration', - id: deserializeIdentifierName(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNamespaceExportDeclaration', + id: null, + start, + end, + range: [start, end], + }; + node.id = deserializeIdentifierName(pos + 8); + return node; } function deserializeTSInstantiationExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInstantiationExpression', - expression: deserializeExpression(pos + 8), - typeArguments: deserializeBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInstantiationExpression', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeImportOrExportKind(pos) { @@ -3949,27 +4544,33 @@ function deserializeImportOrExportKind(pos) { } function deserializeJSDocNullableType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSJSDocNullableType', - typeAnnotation: deserializeTSType(pos + 8), - postfix: deserializeBool(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSJSDocNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeJSDocNonNullableType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSJSDocNonNullableType', - typeAnnotation: deserializeTSType(pos + 8), - postfix: deserializeBool(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSJSDocNonNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeJSDocUnknownType(pos) { @@ -3997,14 +4598,16 @@ function deserializeComment(pos) { let type = deserializeCommentKind(pos + 12), start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type, + value: null, + start, + end, + range: [start, end], + }, endCut = type === 'Line' ? 0 : 2; - return { - type, - value: sourceText.slice(start + 2, end - endCut), - start, - end, - range: [start, end], - }; + node.value = sourceText.slice(start + 2, end - endCut); + return node; } function deserializeNameSpan(pos) { diff --git a/napi/parser/generated/deserialize/js_range_parent.js b/napi/parser/generated/deserialize/js_range_parent.js new file mode 100644 index 0000000000000..432e005800d37 --- /dev/null +++ b/napi/parser/generated/deserialize/js_range_parent.js @@ -0,0 +1,6809 @@ +// Auto-generated code, DO NOT EDIT DIRECTLY! +// To edit this generated file you have to edit `tasks/ast_tools/src/generators/raw_transfer.rs`. + +let uint8, uint32, float64, sourceText, sourceIsAscii, sourceByteLen; +const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true }), + decodeStr = textDecoder.decode.bind(textDecoder), + { fromCodePoint } = String; +let parent = null; + +export function deserialize(buffer, sourceText, sourceByteLen) { + return deserializeWith(buffer, sourceText, sourceByteLen, deserializeRawTransferData); +} + +export function deserializeProgramOnly(buffer, sourceText, sourceByteLen) { + return deserializeWith(buffer, sourceText, sourceByteLen, deserializeProgram); +} + +function deserializeWith(buffer, sourceTextInput, sourceByteLenInput, deserialize) { + uint8 = buffer; + uint32 = buffer.uint32; + float64 = buffer.float64; + sourceText = sourceTextInput; + sourceByteLen = sourceByteLenInput; + sourceIsAscii = sourceText.length === sourceByteLen; + let data = deserialize(uint32[536870902]); + uint8 = + uint32 = + float64 = + sourceText = + void 0; + return data; +} + +function deserializeProgram(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + program = parent = { + type: 'Program', + body: null, + sourceType: deserializeModuleKind(pos + 125), + hashbang: null, + start, + end, + range: [start, end], + parent: null, + }; + program.hashbang = deserializeOptionHashbang(pos + 48); + (program.body = deserializeVecDirective(pos + 72)).push(...deserializeVecStatement(pos + 96)); + parent = null; + return program; +} + +function deserializeExpression(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Expression`); + } +} + +function deserializeIdentifierName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + name: deserializeStr(pos + 8), + start, + end, + range: [start, end], + parent, + }; + parent = previousParent; + return node; +} + +function deserializeIdentifierReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + name: deserializeStr(pos + 8), + start, + end, + range: [start, end], + parent, + }; + parent = previousParent; + return node; +} + +function deserializeBindingIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + name: deserializeStr(pos + 8), + start, + end, + range: [start, end], + parent, + }; + parent = previousParent; + return node; +} + +function deserializeLabelIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + name: deserializeStr(pos + 8), + start, + end, + range: [start, end], + parent, + }; + parent = previousParent; + return node; +} + +function deserializeThisExpression(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'ThisExpression', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeArrayExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayExpression', + elements: null, + start, + end, + range: [start, end], + parent, + }; + node.elements = deserializeVecArrayExpressionElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeArrayExpressionElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxSpreadElement(pos + 8); + case 65: + return deserializeElision(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ArrayExpressionElement`); + } +} + +function deserializeElision(pos) { + return null; +} + +function deserializeObjectExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectExpression', + properties: null, + start, + end, + range: [start, end], + parent, + }; + node.properties = deserializeVecObjectPropertyKind(pos + 8); + parent = previousParent; + return node; +} + +function deserializeObjectPropertyKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxObjectProperty(pos + 8); + case 1: + return deserializeBoxSpreadElement(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ObjectPropertyKind`); + } +} + +function deserializeObjectProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: deserializePropertyKind(pos + 40), + key: null, + value: null, + method: deserializeBool(pos + 41), + shorthand: deserializeBool(pos + 42), + computed: deserializeBool(pos + 43), + start, + end, + range: [start, end], + parent, + }; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializePropertyKey(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxIdentifierName(pos + 8); + case 65: + return deserializeBoxPrivateIdentifier(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyKey`); + } +} + +function deserializePropertyKind(pos) { + switch (uint8[pos]) { + case 0: + return 'init'; + case 1: + return 'get'; + case 2: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyKind`); + } +} + +function deserializeTemplateLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TemplateLiteral', + quasis: null, + expressions: null, + start, + end, + range: [start, end], + parent, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.expressions = deserializeVecExpression(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTaggedTemplateExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TaggedTemplateExpression', + tag: null, + quasi: null, + start, + end, + range: [start, end], + parent, + }; + node.tag = deserializeExpression(pos + 8); + node.quasi = deserializeTemplateLiteral(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTemplateElement(pos) { + let tail = deserializeBool(pos + 40), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + value = deserializeTemplateElementValue(pos + 8); + value.cooked !== null && deserializeBool(pos + 41) && + (value.cooked = value.cooked.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); + return { + type: 'TemplateElement', + value, + tail, + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTemplateElementValue(pos) { + return { + raw: deserializeStr(pos), + cooked: deserializeOptionStr(pos + 16), + }; +} + +function deserializeComputedMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 40), + computed: null, + start, + end, + range: [start, end], + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeExpression(pos + 24); + node.computed = true; + parent = previousParent; + return node; +} + +function deserializeStaticMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + range: [start, end], + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeIdentifierName(pos + 24); + node.computed = false; + parent = previousParent; + return node; +} + +function deserializePrivateFieldExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + range: [start, end], + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializePrivateIdentifier(pos + 24); + node.computed = false; + parent = previousParent; + return node; +} + +function deserializeCallExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'CallExpression', + callee: null, + arguments: null, + optional: deserializeBool(pos + 56), + start, + end, + range: [start, end], + parent, + }; + node.callee = deserializeExpression(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeNewExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'NewExpression', + callee: null, + arguments: null, + start, + end, + range: [start, end], + parent, + }; + node.callee = deserializeExpression(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeMetaProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MetaProperty', + meta: null, + property: null, + start, + end, + range: [start, end], + parent, + }; + node.meta = deserializeIdentifierName(pos + 8); + node.property = deserializeIdentifierName(pos + 32); + parent = previousParent; + return node; +} + +function deserializeSpreadElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SpreadElement', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeArgument(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxSpreadElement(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Argument`); + } +} + +function deserializeUpdateExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'UpdateExpression', + operator: deserializeUpdateOperator(pos + 24), + prefix: deserializeBool(pos + 25), + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeSimpleAssignmentTarget(pos + 8); + parent = previousParent; + return node; +} + +function deserializeUnaryExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'UnaryExpression', + operator: deserializeUnaryOperator(pos + 24), + argument: null, + prefix: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeExpression(pos + 8); + node.prefix = true; + parent = previousParent; + return node; +} + +function deserializeBinaryExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BinaryExpression', + left: null, + operator: deserializeBinaryOperator(pos + 40), + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializePrivateInExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BinaryExpression', + left: null, + operator: null, + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializePrivateIdentifier(pos + 8); + node.operator = 'in'; + node.right = deserializeExpression(pos + 32); + parent = previousParent; + return node; +} + +function deserializeLogicalExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'LogicalExpression', + left: null, + operator: deserializeLogicalOperator(pos + 40), + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeConditionalExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ConditionalExpression', + test: null, + consequent: null, + alternate: null, + start, + end, + range: [start, end], + parent, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeExpression(pos + 24); + node.alternate = deserializeExpression(pos + 40); + parent = previousParent; + return node; +} + +function deserializeAssignmentExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentExpression', + operator: deserializeAssignmentOperator(pos + 40), + left: null, + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeAssignmentTarget(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTarget`); + } +} + +function deserializeSimpleAssignmentTarget(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for SimpleAssignmentTarget`); + } +} + +function deserializeArrayAssignmentTarget(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayPattern', + elements: null, + start, + end, + range: [start, end], + parent, + }, + elements = deserializeVecOptionAssignmentTargetMaybeDefault(pos + 8), + rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); + rest !== null && elements.push(rest); + node.elements = elements; + parent = previousParent; + return node; +} + +function deserializeObjectAssignmentTarget(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectPattern', + properties: null, + start, + end, + range: [start, end], + parent, + }, + properties = deserializeVecAssignmentTargetProperty(pos + 8), + rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); + rest !== null && properties.push(rest); + node.properties = properties; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetRest(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'RestElement', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeAssignmentTarget(pos + 8); + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetMaybeDefault(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 16: + return deserializeBoxAssignmentTargetWithDefault(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTargetMaybeDefault`); + } +} + +function deserializeAssignmentTargetWithDefault(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentPattern', + left: null, + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetProperty(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxAssignmentTargetPropertyIdentifier(pos + 8); + case 1: + return deserializeBoxAssignmentTargetPropertyProperty(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTargetProperty`); + } +} + +function deserializeAssignmentTargetPropertyIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: null, + start, + end, + range: [start, end], + parent, + }, + key = deserializeIdentifierReference(pos + 8), + init = deserializeOptionExpression(pos + 40), + value = { ...key }; + if (init !== null) { + let left = value, previousParent = parent; + value = parent = { + type: 'AssignmentPattern', + left, + right: init, + start, + end, + range: [start, end], + parent, + }; + left.parent = value; + init.parent = value; + parent = previousParent; + } + node.kind = 'init'; + node.key = key; + node.value = value; + node.method = false; + node.shorthand = true; + node.computed = false; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetPropertyProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: deserializeBool(pos + 40), + start, + end, + range: [start, end], + parent, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeAssignmentTargetMaybeDefault(pos + 24); + node.method = false; + node.shorthand = false; + parent = previousParent; + return node; +} + +function deserializeSequenceExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SequenceExpression', + expressions: null, + start, + end, + range: [start, end], + parent, + }; + node.expressions = deserializeVecExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeSuper(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Super', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeAwaitExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AwaitExpression', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeChainExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ChainExpression', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeChainElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeChainElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxCallExpression(pos + 8); + case 1: + return deserializeBoxTSNonNullExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ChainElement`); + } +} + +function deserializeParenthesizedExpression(pos) { + let node; + { + let start, end, previousParent = parent; + node = parent = { + type: 'ParenthesizedExpression', + expression: null, + start: start = deserializeU32(pos), + end: end = deserializeU32(pos + 4), + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + } + return node; +} + +function deserializeStatement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBlockStatement(pos + 8); + case 1: + return deserializeBoxBreakStatement(pos + 8); + case 2: + return deserializeBoxContinueStatement(pos + 8); + case 3: + return deserializeBoxDebuggerStatement(pos + 8); + case 4: + return deserializeBoxDoWhileStatement(pos + 8); + case 5: + return deserializeBoxEmptyStatement(pos + 8); + case 6: + return deserializeBoxExpressionStatement(pos + 8); + case 7: + return deserializeBoxForInStatement(pos + 8); + case 8: + return deserializeBoxForOfStatement(pos + 8); + case 9: + return deserializeBoxForStatement(pos + 8); + case 10: + return deserializeBoxIfStatement(pos + 8); + case 11: + return deserializeBoxLabeledStatement(pos + 8); + case 12: + return deserializeBoxReturnStatement(pos + 8); + case 13: + return deserializeBoxSwitchStatement(pos + 8); + case 14: + return deserializeBoxThrowStatement(pos + 8); + case 15: + return deserializeBoxTryStatement(pos + 8); + case 16: + return deserializeBoxWhileStatement(pos + 8); + case 17: + return deserializeBoxWithStatement(pos + 8); + case 32: + return deserializeBoxVariableDeclaration(pos + 8); + case 33: + return deserializeBoxFunction(pos + 8); + case 34: + return deserializeBoxClass(pos + 8); + case 35: + return deserializeBoxTSTypeAliasDeclaration(pos + 8); + case 36: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + case 37: + return deserializeBoxTSEnumDeclaration(pos + 8); + case 38: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 39: + return deserializeBoxTSImportEqualsDeclaration(pos + 8); + case 64: + return deserializeBoxImportDeclaration(pos + 8); + case 65: + return deserializeBoxExportAllDeclaration(pos + 8); + case 66: + return deserializeBoxExportDefaultDeclaration(pos + 8); + case 67: + return deserializeBoxExportNamedDeclaration(pos + 8); + case 68: + return deserializeBoxTSExportAssignment(pos + 8); + case 69: + return deserializeBoxTSNamespaceExportDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Statement`); + } +} + +function deserializeDirective(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExpressionStatement', + expression: null, + directive: deserializeStr(pos + 56), + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeStringLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeHashbang(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Hashbang', + value: deserializeStr(pos + 8), + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeBlockStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BlockStatement', + body: null, + start, + end, + range: [start, end], + parent, + }; + node.body = deserializeVecStatement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeDeclaration(pos) { + switch (uint8[pos]) { + case 32: + return deserializeBoxVariableDeclaration(pos + 8); + case 33: + return deserializeBoxFunction(pos + 8); + case 34: + return deserializeBoxClass(pos + 8); + case 35: + return deserializeBoxTSTypeAliasDeclaration(pos + 8); + case 36: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + case 37: + return deserializeBoxTSEnumDeclaration(pos + 8); + case 38: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 39: + return deserializeBoxTSImportEqualsDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Declaration`); + } +} + +function deserializeVariableDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'VariableDeclaration', + kind: deserializeVariableDeclarationKind(pos + 32), + declarations: null, + start, + end, + range: [start, end], + parent, + }; + node.declarations = deserializeVecVariableDeclarator(pos + 8); + parent = previousParent; + return node; +} + +function deserializeVariableDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return 'var'; + case 1: + return 'let'; + case 2: + return 'const'; + case 3: + return 'using'; + case 4: + return 'await using'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for VariableDeclarationKind`); + } +} + +function deserializeVariableDeclarator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'VariableDeclarator', + id: null, + init: null, + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeBindingPattern(pos + 8); + node.init = deserializeOptionExpression(pos + 40); + parent = previousParent; + return node; +} + +function deserializeEmptyStatement(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'EmptyStatement', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeExpressionStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExpressionStatement', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeIfStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'IfStatement', + test: null, + consequent: null, + alternate: null, + start, + end, + range: [start, end], + parent, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeStatement(pos + 24); + node.alternate = deserializeOptionStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeDoWhileStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'DoWhileStatement', + body: null, + test: null, + start, + end, + range: [start, end], + parent, + }; + node.body = deserializeStatement(pos + 8); + node.test = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeWhileStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'WhileStatement', + test: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.test = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeForStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForStatement', + init: null, + test: null, + update: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.init = deserializeOptionForStatementInit(pos + 8); + node.test = deserializeOptionExpression(pos + 24); + node.update = deserializeOptionExpression(pos + 40); + node.body = deserializeStatement(pos + 56); + parent = previousParent; + return node; +} + +function deserializeForStatementInit(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxVariableDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ForStatementInit`); + } +} + +function deserializeForInStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForInStatement', + left: null, + right: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeForStatementLeft(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 16: + return deserializeBoxVariableDeclaration(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ForStatementLeft`); + } +} + +function deserializeForOfStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForOfStatement', + await: deserializeBool(pos + 60), + left: null, + right: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeContinueStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ContinueStatement', + label: null, + start, + end, + range: [start, end], + parent, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeBreakStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BreakStatement', + label: null, + start, + end, + range: [start, end], + parent, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeReturnStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ReturnStatement', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeOptionExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeWithStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'WithStatement', + object: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.object = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeSwitchStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SwitchStatement', + discriminant: null, + cases: null, + start, + end, + range: [start, end], + parent, + }; + node.discriminant = deserializeExpression(pos + 8); + node.cases = deserializeVecSwitchCase(pos + 24); + parent = previousParent; + return node; +} + +function deserializeSwitchCase(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SwitchCase', + test: null, + consequent: null, + start, + end, + range: [start, end], + parent, + }; + node.test = deserializeOptionExpression(pos + 8); + node.consequent = deserializeVecStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeLabeledStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'LabeledStatement', + label: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.label = deserializeLabelIdentifier(pos + 8); + node.body = deserializeStatement(pos + 32); + parent = previousParent; + return node; +} + +function deserializeThrowStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ThrowStatement', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTryStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TryStatement', + block: null, + handler: null, + finalizer: null, + start, + end, + range: [start, end], + parent, + }; + node.block = deserializeBoxBlockStatement(pos + 8); + node.handler = deserializeOptionBoxCatchClause(pos + 16); + node.finalizer = deserializeOptionBoxBlockStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeCatchClause(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'CatchClause', + param: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.param = deserializeOptionCatchParameter(pos + 8); + node.body = deserializeBoxBlockStatement(pos + 48); + parent = previousParent; + return node; +} + +function deserializeCatchParameter(pos) { + return deserializeBindingPattern(pos + 8); +} + +function deserializeDebuggerStatement(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'DebuggerStatement', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeBindingPattern(pos) { + return deserializeBindingPatternKind(pos); +} + +function deserializeBindingPatternKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBindingIdentifier(pos + 8); + case 1: + return deserializeBoxObjectPattern(pos + 8); + case 2: + return deserializeBoxArrayPattern(pos + 8); + case 3: + return deserializeBoxAssignmentPattern(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for BindingPatternKind`); + } +} + +function deserializeAssignmentPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentPattern', + left: null, + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeBindingPattern(pos + 8); + node.right = deserializeExpression(pos + 40); + parent = previousParent; + return node; +} + +function deserializeObjectPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectPattern', + properties: null, + start, + end, + range: [start, end], + parent, + }, + properties = deserializeVecBindingProperty(pos + 8), + rest = deserializeOptionBoxBindingRestElement(pos + 32); + rest !== null && properties.push(rest); + node.properties = properties; + parent = previousParent; + return node; +} + +function deserializeBindingProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: deserializeBool(pos + 56), + computed: deserializeBool(pos + 57), + start, + end, + range: [start, end], + parent, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeBindingPattern(pos + 24); + node.method = false; + parent = previousParent; + return node; +} + +function deserializeArrayPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayPattern', + elements: null, + start, + end, + range: [start, end], + parent, + }, + elements = deserializeVecOptionBindingPattern(pos + 8), + rest = deserializeOptionBoxBindingRestElement(pos + 32); + rest !== null && elements.push(rest); + node.elements = elements; + parent = previousParent; + return node; +} + +function deserializeBindingRestElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'RestElement', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeBindingPattern(pos + 8); + parent = previousParent; + return node; +} + +function deserializeFunction(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeFunctionType(pos + 84), + id: null, + generator: deserializeBool(pos + 85), + async: deserializeBool(pos + 86), + params: null, + body: null, + expression: null, + start, + end, + range: [start, end], + parent, + }, + params = deserializeBoxFormalParameters(pos + 56); + node.id = deserializeOptionBindingIdentifier(pos + 8); + node.params = params; + node.body = deserializeOptionBoxFunctionBody(pos + 72); + node.expression = false; + parent = previousParent; + return node; +} + +function deserializeFunctionType(pos) { + switch (uint8[pos]) { + case 0: + return 'FunctionDeclaration'; + case 1: + return 'FunctionExpression'; + case 2: + return 'TSDeclareFunction'; + case 3: + return 'TSEmptyBodyFunctionExpression'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for FunctionType`); + } +} + +function deserializeFormalParameters(pos) { + let params = deserializeVecFormalParameter(pos + 8); + if (uint32[pos + 32 >> 2] !== 0 && uint32[pos + 36 >> 2] !== 0) { + pos = uint32[pos + 32 >> 2]; + let start, + end, + previousParent = parent, + rest = parent = { + type: 'RestElement', + argument: null, + start: start = deserializeU32(pos), + end: end = deserializeU32(pos + 4), + range: [start, end], + parent, + }; + rest.argument = deserializeBindingPatternKind(pos + 8); + params.push(rest); + parent = previousParent; + } + return params; +} + +function deserializeFormalParameter(pos) { + let param; + param = deserializeBindingPatternKind(pos + 32); + return param; +} + +function deserializeFunctionBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BlockStatement', + body: null, + start, + end, + range: [start, end], + parent, + }, + body = deserializeVecDirective(pos + 8); + body.push(...deserializeVecStatement(pos + 32)); + node.body = body; + parent = previousParent; + return node; +} + +function deserializeArrowFunctionExpression(pos) { + let expression = deserializeBool(pos + 44), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrowFunctionExpression', + expression, + async: deserializeBool(pos + 45), + params: null, + body: null, + id: null, + generator: null, + start, + end, + range: [start, end], + parent, + }, + body = deserializeBoxFunctionBody(pos + 32); + if (expression === true) { + body = body.body[0].expression; + body.parent = parent; + } + node.params = deserializeBoxFormalParameters(pos + 16); + node.body = body; + node.id = null; + node.generator = false; + parent = previousParent; + return node; +} + +function deserializeYieldExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'YieldExpression', + delegate: deserializeBool(pos + 24), + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeOptionExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeClass(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeClassType(pos + 132), + decorators: null, + id: null, + superClass: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.id = deserializeOptionBindingIdentifier(pos + 32); + node.superClass = deserializeOptionExpression(pos + 72); + node.body = deserializeBoxClassBody(pos + 120); + parent = previousParent; + return node; +} + +function deserializeClassType(pos) { + switch (uint8[pos]) { + case 0: + return 'ClassDeclaration'; + case 1: + return 'ClassExpression'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ClassType`); + } +} + +function deserializeClassBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ClassBody', + body: null, + start, + end, + range: [start, end], + parent, + }; + node.body = deserializeVecClassElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeClassElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxStaticBlock(pos + 8); + case 1: + return deserializeBoxMethodDefinition(pos + 8); + case 2: + return deserializeBoxPropertyDefinition(pos + 8); + case 3: + return deserializeBoxAccessorProperty(pos + 8); + case 4: + return deserializeBoxTSIndexSignature(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ClassElement`); + } +} + +function deserializeMethodDefinition(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeMethodDefinitionType(pos + 56), + decorators: null, + key: null, + value: null, + kind: deserializeMethodDefinitionKind(pos + 57), + computed: deserializeBool(pos + 58), + static: deserializeBool(pos + 59), + start, + end, + range: [start, end], + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeBoxFunction(pos + 48); + parent = previousParent; + return node; +} + +function deserializeMethodDefinitionType(pos) { + switch (uint8[pos]) { + case 0: + return 'MethodDefinition'; + case 1: + return 'TSAbstractMethodDefinition'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for MethodDefinitionType`); + } +} + +function deserializePropertyDefinition(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializePropertyDefinitionType(pos + 72), + decorators: null, + key: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + start, + end, + range: [start, end], + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeOptionExpression(pos + 56); + parent = previousParent; + return node; +} + +function deserializePropertyDefinitionType(pos) { + switch (uint8[pos]) { + case 0: + return 'PropertyDefinition'; + case 1: + return 'TSAbstractPropertyDefinition'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyDefinitionType`); + } +} + +function deserializeMethodDefinitionKind(pos) { + switch (uint8[pos]) { + case 0: + return 'constructor'; + case 1: + return 'method'; + case 2: + return 'get'; + case 3: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for MethodDefinitionKind`); + } +} + +function deserializePrivateIdentifier(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'PrivateIdentifier', + name: deserializeStr(pos + 8), + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeStaticBlock(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'StaticBlock', + body: null, + start, + end, + range: [start, end], + parent, + }; + node.body = deserializeVecStatement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeAccessorPropertyType(pos) { + switch (uint8[pos]) { + case 0: + return 'AccessorProperty'; + case 1: + return 'TSAbstractAccessorProperty'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AccessorPropertyType`); + } +} + +function deserializeAccessorProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeAccessorPropertyType(pos + 72), + decorators: null, + key: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + start, + end, + range: [start, end], + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeOptionExpression(pos + 56); + parent = previousParent; + return node; +} + +function deserializeImportExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportExpression', + source: null, + options: null, + phase: deserializeOptionImportPhase(pos + 40), + start, + end, + range: [start, end], + parent, + }; + node.source = deserializeExpression(pos + 8); + node.options = deserializeOptionExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeImportDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportDeclaration', + specifiers: null, + source: null, + phase: deserializeOptionImportPhase(pos + 88), + attributes: null, + start, + end, + range: [start, end], + parent, + }, + specifiers = deserializeOptionVecImportDeclarationSpecifier(pos + 8); + specifiers === null && (specifiers = []); + let withClause = deserializeOptionBoxWithClause(pos + 80); + node.specifiers = specifiers; + node.source = deserializeStringLiteral(pos + 32); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeImportPhase(pos) { + switch (uint8[pos]) { + case 0: + return 'source'; + case 1: + return 'defer'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportPhase`); + } +} + +function deserializeImportDeclarationSpecifier(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxImportSpecifier(pos + 8); + case 1: + return deserializeBoxImportDefaultSpecifier(pos + 8); + case 2: + return deserializeBoxImportNamespaceSpecifier(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportDeclarationSpecifier`); + } +} + +function deserializeImportSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportSpecifier', + imported: null, + local: null, + start, + end, + range: [start, end], + parent, + }; + node.imported = deserializeModuleExportName(pos + 8); + node.local = deserializeBindingIdentifier(pos + 64); + parent = previousParent; + return node; +} + +function deserializeImportDefaultSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportDefaultSpecifier', + local: null, + start, + end, + range: [start, end], + parent, + }; + node.local = deserializeBindingIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeImportNamespaceSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportNamespaceSpecifier', + local: null, + start, + end, + range: [start, end], + parent, + }; + node.local = deserializeBindingIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeWithClause(pos) { + return { attributes: deserializeVecImportAttribute(pos + 8) }; +} + +function deserializeImportAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportAttribute', + key: null, + value: null, + start, + end, + range: [start, end], + parent, + }; + node.key = deserializeImportAttributeKey(pos + 8); + node.value = deserializeStringLiteral(pos + 64); + parent = previousParent; + return node; +} + +function deserializeImportAttributeKey(pos) { + switch (uint8[pos]) { + case 0: + return deserializeIdentifierName(pos + 8); + case 1: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportAttributeKey`); + } +} + +function deserializeExportNamedDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportNamedDeclaration', + declaration: null, + specifiers: null, + source: null, + attributes: null, + start, + end, + range: [start, end], + parent, + }, + withClause = deserializeOptionBoxWithClause(pos + 96); + node.declaration = deserializeOptionDeclaration(pos + 8); + node.specifiers = deserializeVecExportSpecifier(pos + 24); + node.source = deserializeOptionStringLiteral(pos + 48); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeExportDefaultDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportDefaultDeclaration', + declaration: null, + start, + end, + range: [start, end], + parent, + }; + node.declaration = deserializeExportDefaultDeclarationKind(pos + 8); + parent = previousParent; + return node; +} + +function deserializeExportAllDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportAllDeclaration', + exported: null, + source: null, + attributes: null, + start, + end, + range: [start, end], + parent, + }, + withClause = deserializeOptionBoxWithClause(pos + 112); + node.exported = deserializeOptionModuleExportName(pos + 8); + node.source = deserializeStringLiteral(pos + 64); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeExportSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportSpecifier', + local: null, + exported: null, + start, + end, + range: [start, end], + parent, + }; + node.local = deserializeModuleExportName(pos + 8); + node.exported = deserializeModuleExportName(pos + 64); + parent = previousParent; + return node; +} + +function deserializeExportDefaultDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxFunction(pos + 8); + case 65: + return deserializeBoxClass(pos + 8); + case 66: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportDefaultDeclarationKind`); + } +} + +function deserializeModuleExportName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeIdentifierName(pos + 8); + case 1: + return deserializeIdentifierReference(pos + 8); + case 2: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ModuleExportName`); + } +} + +function deserializeV8IntrinsicExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'V8IntrinsicExpression', + name: null, + arguments: null, + start, + end, + range: [start, end], + parent, + }; + node.name = deserializeIdentifierName(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeBooleanLiteral(pos) { + let value = deserializeBool(pos + 8), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value, + raw: null, + start, + end, + range: [start, end], + parent, + }; + node.raw = start === 0 && end === 0 ? null : value + ''; + parent = previousParent; + return node; +} + +function deserializeNullLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: null, + start, + end, + range: [start, end], + parent, + }; + node.value = null; + node.raw = start === 0 && end === 0 ? null : 'null'; + parent = previousParent; + return node; +} + +function deserializeNumericLiteral(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Literal', + value: deserializeF64(pos + 8), + raw: deserializeOptionStr(pos + 16), + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeStringLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + start, + end, + range: [start, end], + parent, + }, + value = deserializeStr(pos + 8); + deserializeBool(pos + 40) && + (value = value.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); + node.value = value; + parent = previousParent; + return node; +} + +function deserializeBigIntLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + bigint: null, + start, + end, + range: [start, end], + parent, + }, + bigint = deserializeStr(pos + 8); + node.value = BigInt(bigint); + node.bigint = bigint; + parent = previousParent; + return node; +} + +function deserializeRegExpLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 40), + regex: null, + start, + end, + range: [start, end], + parent, + }, + regex = deserializeRegExp(pos + 8), + value = null; + try { + value = new RegExp(regex.pattern, regex.flags); + } catch {} + node.value = value; + node.regex = regex; + parent = previousParent; + return node; +} + +function deserializeRegExp(pos) { + return { + pattern: deserializeStr(pos), + flags: deserializeRegExpFlags(pos + 24), + }; +} + +function deserializeRegExpFlags(pos) { + let flagBits = deserializeU8(pos), flags = ''; + // Alphabetical order + flagBits & 64 && (flags += 'd'); + flagBits & 1 && (flags += 'g'); + flagBits & 2 && (flags += 'i'); + flagBits & 4 && (flags += 'm'); + flagBits & 8 && (flags += 's'); + flagBits & 16 && (flags += 'u'); + flagBits & 128 && (flags += 'v'); + flagBits & 32 && (flags += 'y'); + return flags; +} + +function deserializeJSXElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXElement', + openingElement: null, + children: null, + closingElement: null, + start, + end, + range: [start, end], + parent, + }, + closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), + openingElement = deserializeBoxJSXOpeningElement(pos + 8); + closingElement === null && (openingElement.selfClosing = true); + node.openingElement = openingElement; + node.children = deserializeVecJSXChild(pos + 16); + node.closingElement = closingElement; + parent = previousParent; + return node; +} + +function deserializeJSXOpeningElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXOpeningElement', + name: null, + attributes: null, + selfClosing: null, + start, + end, + range: [start, end], + parent, + }; + node.name = deserializeJSXElementName(pos + 8); + node.attributes = deserializeVecJSXAttributeItem(pos + 32); + node.selfClosing = false; + parent = previousParent; + return node; +} + +function deserializeJSXClosingElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXClosingElement', + name: null, + start, + end, + range: [start, end], + parent, + }; + node.name = deserializeJSXElementName(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXFragment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXFragment', + openingFragment: null, + children: null, + closingFragment: null, + start, + end, + range: [start, end], + parent, + }; + node.openingFragment = deserializeJSXOpeningFragment(pos + 8); + node.children = deserializeVecJSXChild(pos + 16); + node.closingFragment = deserializeJSXClosingFragment(pos + 40); + parent = previousParent; + return node; +} + +function deserializeJSXOpeningFragment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXOpeningFragment', + attributes: null, + selfClosing: null, + start, + end, + range: [start, end], + parent, + }; + node.attributes = []; + node.selfClosing = false; + parent = previousParent; + return node; +} + +function deserializeJSXClosingFragment(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXClosingFragment', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeJSXElementName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXIdentifier(pos + 8); + case 1: + let ident = deserializeBoxIdentifierReference(pos + 8); + return { + type: 'JSXIdentifier', + name: ident.name, + start: ident.start, + end: ident.end, + range: ident.range, + parent, + }; + case 2: + return deserializeBoxJSXNamespacedName(pos + 8); + case 3: + return deserializeBoxJSXMemberExpression(pos + 8); + case 4: + let thisExpr = deserializeBoxThisExpression(pos + 8); + return { + type: 'JSXIdentifier', + name: 'this', + start: thisExpr.start, + end: thisExpr.end, + range: thisExpr.range, + parent, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXElementName`); + } +} + +function deserializeJSXNamespacedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXNamespacedName', + namespace: null, + name: null, + start, + end, + range: [start, end], + parent, + }; + node.namespace = deserializeJSXIdentifier(pos + 8); + node.name = deserializeJSXIdentifier(pos + 32); + parent = previousParent; + return node; +} + +function deserializeJSXMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXMemberExpression', + object: null, + property: null, + start, + end, + range: [start, end], + parent, + }; + node.object = deserializeJSXMemberExpressionObject(pos + 8); + node.property = deserializeJSXIdentifier(pos + 24); + parent = previousParent; + return node; +} + +function deserializeJSXMemberExpressionObject(pos) { + switch (uint8[pos]) { + case 0: + let ident = deserializeBoxIdentifierReference(pos + 8); + return { + type: 'JSXIdentifier', + name: ident.name, + start: ident.start, + end: ident.end, + range: ident.range, + parent, + }; + case 1: + return deserializeBoxJSXMemberExpression(pos + 8); + case 2: + let thisExpr = deserializeBoxThisExpression(pos + 8); + return { + type: 'JSXIdentifier', + name: 'this', + start: thisExpr.start, + end: thisExpr.end, + range: thisExpr.range, + parent, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXMemberExpressionObject`); + } +} + +function deserializeJSXExpressionContainer(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXExpressionContainer', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeJSXExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXExpression(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeJSXEmptyExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXExpression`); + } +} + +function deserializeJSXEmptyExpression(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXEmptyExpression', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeJSXAttributeItem(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXAttribute(pos + 8); + case 1: + return deserializeBoxJSXSpreadAttribute(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeItem`); + } +} + +function deserializeJSXAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXAttribute', + name: null, + value: null, + start, + end, + range: [start, end], + parent, + }; + node.name = deserializeJSXAttributeName(pos + 8); + node.value = deserializeOptionJSXAttributeValue(pos + 24); + parent = previousParent; + return node; +} + +function deserializeJSXSpreadAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXSpreadAttribute', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXAttributeName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXIdentifier(pos + 8); + case 1: + return deserializeBoxJSXNamespacedName(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeName`); + } +} + +function deserializeJSXAttributeValue(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxStringLiteral(pos + 8); + case 1: + return deserializeBoxJSXExpressionContainer(pos + 8); + case 2: + return deserializeBoxJSXElement(pos + 8); + case 3: + return deserializeBoxJSXFragment(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeValue`); + } +} + +function deserializeJSXIdentifier(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXIdentifier', + name: deserializeStr(pos + 8), + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeJSXChild(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXText(pos + 8); + case 1: + return deserializeBoxJSXElement(pos + 8); + case 2: + return deserializeBoxJSXFragment(pos + 8); + case 3: + return deserializeBoxJSXExpressionContainer(pos + 8); + case 4: + return deserializeBoxJSXSpreadChild(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXChild`); + } +} + +function deserializeJSXSpreadChild(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXSpreadChild', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXText(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXText', + value: deserializeStr(pos + 8), + raw: deserializeOptionStr(pos + 24), + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSThisParameter(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.name = 'this'; + node.optional = false; + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + parent = previousParent; + return node; +} + +function deserializeTSEnumDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumDeclaration', + id: null, + body: null, + const: deserializeBool(pos + 76), + declare: deserializeBool(pos + 77), + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.body = deserializeTSEnumBody(pos + 40); + parent = previousParent; + return node; +} + +function deserializeTSEnumBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumBody', + members: null, + start, + end, + range: [start, end], + parent, + }; + node.members = deserializeVecTSEnumMember(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSEnumMember(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumMember', + id: null, + initializer: null, + computed: null, + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeTSEnumMemberName(pos + 8); + node.initializer = deserializeOptionExpression(pos + 24); + node.computed = deserializeU8(pos + 8) > 1; + parent = previousParent; + return node; +} + +function deserializeTSEnumMemberName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeBoxStringLiteral(pos + 8); + case 2: + return deserializeBoxStringLiteral(pos + 8); + case 3: + return deserializeBoxTemplateLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSEnumMemberName`); + } +} + +function deserializeTSTypeAnnotation(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAnnotation', + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSLiteralType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSLiteralType', + literal: null, + start, + end, + range: [start, end], + parent, + }; + node.literal = deserializeTSLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSLiteral(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNumericLiteral(pos + 8); + case 2: + return deserializeBoxBigIntLiteral(pos + 8); + case 3: + return deserializeBoxStringLiteral(pos + 8); + case 4: + return deserializeBoxTemplateLiteral(pos + 8); + case 5: + return deserializeBoxUnaryExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSLiteral`); + } +} + +function deserializeTSType(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSAnyKeyword(pos + 8); + case 1: + return deserializeBoxTSBigIntKeyword(pos + 8); + case 2: + return deserializeBoxTSBooleanKeyword(pos + 8); + case 3: + return deserializeBoxTSIntrinsicKeyword(pos + 8); + case 4: + return deserializeBoxTSNeverKeyword(pos + 8); + case 5: + return deserializeBoxTSNullKeyword(pos + 8); + case 6: + return deserializeBoxTSNumberKeyword(pos + 8); + case 7: + return deserializeBoxTSObjectKeyword(pos + 8); + case 8: + return deserializeBoxTSStringKeyword(pos + 8); + case 9: + return deserializeBoxTSSymbolKeyword(pos + 8); + case 10: + return deserializeBoxTSThisType(pos + 8); + case 11: + return deserializeBoxTSUndefinedKeyword(pos + 8); + case 12: + return deserializeBoxTSUnknownKeyword(pos + 8); + case 13: + return deserializeBoxTSVoidKeyword(pos + 8); + case 14: + return deserializeBoxTSArrayType(pos + 8); + case 15: + return deserializeBoxTSConditionalType(pos + 8); + case 16: + return deserializeBoxTSConstructorType(pos + 8); + case 17: + return deserializeBoxTSFunctionType(pos + 8); + case 18: + return deserializeBoxTSImportType(pos + 8); + case 19: + return deserializeBoxTSIndexedAccessType(pos + 8); + case 20: + return deserializeBoxTSInferType(pos + 8); + case 21: + return deserializeBoxTSIntersectionType(pos + 8); + case 22: + return deserializeBoxTSLiteralType(pos + 8); + case 23: + return deserializeBoxTSMappedType(pos + 8); + case 24: + return deserializeBoxTSNamedTupleMember(pos + 8); + case 26: + return deserializeBoxTSTemplateLiteralType(pos + 8); + case 27: + return deserializeBoxTSTupleType(pos + 8); + case 28: + return deserializeBoxTSTypeLiteral(pos + 8); + case 29: + return deserializeBoxTSTypeOperator(pos + 8); + case 30: + return deserializeBoxTSTypePredicate(pos + 8); + case 31: + return deserializeBoxTSTypeQuery(pos + 8); + case 32: + return deserializeBoxTSTypeReference(pos + 8); + case 33: + return deserializeBoxTSUnionType(pos + 8); + case 34: + return deserializeBoxTSParenthesizedType(pos + 8); + case 35: + return deserializeBoxJSDocNullableType(pos + 8); + case 36: + return deserializeBoxJSDocNonNullableType(pos + 8); + case 37: + return deserializeBoxJSDocUnknownType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSType`); + } +} + +function deserializeTSConditionalType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConditionalType', + checkType: null, + extendsType: null, + trueType: null, + falseType: null, + start, + end, + range: [start, end], + parent, + }; + node.checkType = deserializeTSType(pos + 8); + node.extendsType = deserializeTSType(pos + 24); + node.trueType = deserializeTSType(pos + 40); + node.falseType = deserializeTSType(pos + 56); + parent = previousParent; + return node; +} + +function deserializeTSUnionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSUnionType', + types: null, + start, + end, + range: [start, end], + parent, + }; + node.types = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSIntersectionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIntersectionType', + types: null, + start, + end, + range: [start, end], + parent, + }; + node.types = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSParenthesizedType(pos) { + let node; + { + let start, end, previousParent = parent; + node = parent = { + type: 'TSParenthesizedType', + typeAnnotation: null, + start: start = deserializeU32(pos), + end: end = deserializeU32(pos + 4), + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + } + return node; +} + +function deserializeTSTypeOperator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeOperator', + operator: deserializeTSTypeOperatorOperator(pos + 24), + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeOperatorOperator(pos) { + switch (uint8[pos]) { + case 0: + return 'keyof'; + case 1: + return 'unique'; + case 2: + return 'readonly'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeOperatorOperator`); + } +} + +function deserializeTSArrayType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSArrayType', + elementType: null, + start, + end, + range: [start, end], + parent, + }; + node.elementType = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSIndexedAccessType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIndexedAccessType', + objectType: null, + indexType: null, + start, + end, + range: [start, end], + parent, + }; + node.objectType = deserializeTSType(pos + 8); + node.indexType = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTupleType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTupleType', + elementTypes: null, + start, + end, + range: [start, end], + parent, + }; + node.elementTypes = deserializeVecTSTupleElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNamedTupleMember(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNamedTupleMember', + label: null, + elementType: null, + optional: deserializeBool(pos + 48), + start, + end, + range: [start, end], + parent, + }; + node.label = deserializeIdentifierName(pos + 8); + node.elementType = deserializeTSTupleElement(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSOptionalType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSOptionalType', + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSRestType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSRestType', + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTupleElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSAnyKeyword(pos + 8); + case 1: + return deserializeBoxTSBigIntKeyword(pos + 8); + case 2: + return deserializeBoxTSBooleanKeyword(pos + 8); + case 3: + return deserializeBoxTSIntrinsicKeyword(pos + 8); + case 4: + return deserializeBoxTSNeverKeyword(pos + 8); + case 5: + return deserializeBoxTSNullKeyword(pos + 8); + case 6: + return deserializeBoxTSNumberKeyword(pos + 8); + case 7: + return deserializeBoxTSObjectKeyword(pos + 8); + case 8: + return deserializeBoxTSStringKeyword(pos + 8); + case 9: + return deserializeBoxTSSymbolKeyword(pos + 8); + case 10: + return deserializeBoxTSThisType(pos + 8); + case 11: + return deserializeBoxTSUndefinedKeyword(pos + 8); + case 12: + return deserializeBoxTSUnknownKeyword(pos + 8); + case 13: + return deserializeBoxTSVoidKeyword(pos + 8); + case 14: + return deserializeBoxTSArrayType(pos + 8); + case 15: + return deserializeBoxTSConditionalType(pos + 8); + case 16: + return deserializeBoxTSConstructorType(pos + 8); + case 17: + return deserializeBoxTSFunctionType(pos + 8); + case 18: + return deserializeBoxTSImportType(pos + 8); + case 19: + return deserializeBoxTSIndexedAccessType(pos + 8); + case 20: + return deserializeBoxTSInferType(pos + 8); + case 21: + return deserializeBoxTSIntersectionType(pos + 8); + case 22: + return deserializeBoxTSLiteralType(pos + 8); + case 23: + return deserializeBoxTSMappedType(pos + 8); + case 24: + return deserializeBoxTSNamedTupleMember(pos + 8); + case 26: + return deserializeBoxTSTemplateLiteralType(pos + 8); + case 27: + return deserializeBoxTSTupleType(pos + 8); + case 28: + return deserializeBoxTSTypeLiteral(pos + 8); + case 29: + return deserializeBoxTSTypeOperator(pos + 8); + case 30: + return deserializeBoxTSTypePredicate(pos + 8); + case 31: + return deserializeBoxTSTypeQuery(pos + 8); + case 32: + return deserializeBoxTSTypeReference(pos + 8); + case 33: + return deserializeBoxTSUnionType(pos + 8); + case 34: + return deserializeBoxTSParenthesizedType(pos + 8); + case 35: + return deserializeBoxJSDocNullableType(pos + 8); + case 36: + return deserializeBoxJSDocNonNullableType(pos + 8); + case 37: + return deserializeBoxJSDocUnknownType(pos + 8); + case 64: + return deserializeBoxTSOptionalType(pos + 8); + case 65: + return deserializeBoxTSRestType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTupleElement`); + } +} + +function deserializeTSAnyKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSAnyKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSStringKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSStringKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSBooleanKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSBooleanKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSNumberKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNumberKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSNeverKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNeverKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSIntrinsicKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSIntrinsicKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSUnknownKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSUnknownKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSNullKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNullKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSUndefinedKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSUndefinedKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSVoidKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSVoidKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSSymbolKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSSymbolKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSThisType(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSThisType', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSObjectKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSObjectKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSBigIntKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSBigIntKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSTypeReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeReference', + typeName: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }; + node.typeName = deserializeTSTypeName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeName`); + } +} + +function deserializeTSQualifiedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeTSTypeName(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameterInstantiation(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameterInstantiation', + params: null, + start, + end, + range: [start, end], + parent, + }; + node.params = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameter(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameter', + name: null, + constraint: null, + default: null, + in: deserializeBool(pos + 72), + out: deserializeBool(pos + 73), + const: deserializeBool(pos + 74), + start, + end, + range: [start, end], + parent, + }; + node.name = deserializeBindingIdentifier(pos + 8); + node.constraint = deserializeOptionTSType(pos + 40); + node.default = deserializeOptionTSType(pos + 56); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameterDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameterDeclaration', + params: null, + start, + end, + range: [start, end], + parent, + }; + node.params = deserializeVecTSTypeParameter(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeAliasDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAliasDeclaration', + id: null, + typeParameters: null, + typeAnnotation: null, + declare: deserializeBool(pos + 68), + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.typeAnnotation = deserializeTSType(pos + 48); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceDeclaration', + id: null, + typeParameters: null, + extends: null, + body: null, + declare: deserializeBool(pos + 84), + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.extends = deserializeVecTSInterfaceHeritage(pos + 48); + node.body = deserializeBoxTSInterfaceBody(pos + 72); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceBody', + body: null, + start, + end, + range: [start, end], + parent, + }; + node.body = deserializeVecTSSignature(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSPropertySignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSPropertySignature', + computed: deserializeBool(pos + 32), + optional: deserializeBool(pos + 33), + readonly: deserializeBool(pos + 34), + key: null, + typeAnnotation: null, + accessibility: null, + static: null, + start, + end, + range: [start, end], + parent, + }; + node.key = deserializePropertyKey(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.accessibility = null; + node.static = false; + parent = previousParent; + return node; +} + +function deserializeTSSignature(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSIndexSignature(pos + 8); + case 1: + return deserializeBoxTSPropertySignature(pos + 8); + case 2: + return deserializeBoxTSCallSignatureDeclaration(pos + 8); + case 3: + return deserializeBoxTSConstructSignatureDeclaration(pos + 8); + case 4: + return deserializeBoxTSMethodSignature(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSSignature`); + } +} + +function deserializeTSIndexSignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIndexSignature', + parameters: null, + typeAnnotation: null, + readonly: deserializeBool(pos + 40), + static: deserializeBool(pos + 41), + accessibility: null, + start, + end, + range: [start, end], + parent, + }; + node.parameters = deserializeVecTSIndexSignatureName(pos + 8); + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 32); + node.accessibility = null; + parent = previousParent; + return node; +} + +function deserializeTSCallSignatureDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSCallSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + parent, + }, + params = deserializeBoxFormalParameters(pos + 24), + thisParam = deserializeOptionBoxTSThisParameter(pos + 16); + thisParam !== null && params.unshift(thisParam); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSMethodSignatureKind(pos) { + switch (uint8[pos]) { + case 0: + return 'method'; + case 1: + return 'get'; + case 2: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSMethodSignatureKind`); + } +} + +function deserializeTSMethodSignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSMethodSignature', + key: null, + computed: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + kind: deserializeTSMethodSignatureKind(pos + 62), + typeParameters: null, + params: null, + returnType: null, + accessibility: null, + readonly: null, + static: null, + start, + end, + range: [start, end], + parent, + }, + params = deserializeBoxFormalParameters(pos + 40), + thisParam = deserializeOptionBoxTSThisParameter(pos + 32); + thisParam !== null && params.unshift(thisParam); + node.key = deserializePropertyKey(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 24); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.accessibility = null; + node.readonly = false; + node.static = false; + parent = previousParent; + return node; +} + +function deserializeTSConstructSignatureDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConstructSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + parent, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSIndexSignatureName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceHeritage(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceHeritage', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypePredicate(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypePredicate', + parameterName: null, + asserts: deserializeBool(pos + 32), + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.parameterName = deserializeTSTypePredicateName(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypePredicateName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeTSThisType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypePredicateName`); + } +} + +function deserializeTSModuleDeclaration(pos) { + let kind = deserializeTSModuleDeclarationKind(pos + 84), + global = kind === 'global', + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + declare = deserializeBool(pos + 85), + node, + previousParent = parent, + body = deserializeOptionTSModuleDeclarationBody(pos + 64); + if (body === null) { + node = parent = { + type: 'TSModuleDeclaration', + id: null, + kind, + declare, + global, + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeTSModuleDeclarationName(pos + 8); + } else { + node = parent = { + type: 'TSModuleDeclaration', + id: null, + body, + kind, + declare, + global, + start, + end, + range: [start, end], + parent, + }; + let id = deserializeTSModuleDeclarationName(pos + 8); + if (body.type === 'TSModuleBlock') { + node.id = id; + body.parent = node; + } else { + let innerId = body.id; + if (innerId.type === 'Identifier') { + let start, end; + id.parent = + innerId.parent = + node.id = + parent = + { + type: 'TSQualifiedName', + left: id, + right: innerId, + start: start = id.start, + end: end = innerId.end, + range: [start, end], + parent: node, + }; + } else { + // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of + // this module on left, and previous `left` of innermost `TSQualifiedName` on right + node.id = innerId; + innerId.parent = node; + let { start } = id; + for (;;) { + innerId.start = innerId.range[0] = start; + if (innerId.left.type === 'Identifier') break; + innerId = innerId.left; + } + let end, right = innerId.left; + id.parent = right.parent = innerId.left = { + type: 'TSQualifiedName', + left: id, + right, + start, + end: end = right.end, + range: [start, end], + parent: innerId, + }; + } + if (Object.hasOwn(body, 'body')) { + body = body.body; + node.body = body; + body.parent = node; + } else body = null; + } + } + parent = previousParent; + return node; +} + +function deserializeTSModuleDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return 'global'; + case 1: + return 'module'; + case 2: + return 'namespace'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationKind`); + } +} + +function deserializeTSModuleDeclarationName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBindingIdentifier(pos + 8); + case 1: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationName`); + } +} + +function deserializeTSModuleDeclarationBody(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 1: + return deserializeBoxTSModuleBlock(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationBody`); + } +} + +function deserializeTSModuleBlock(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSModuleBlock', + body: null, + start, + end, + range: [start, end], + parent, + }, + body = deserializeVecDirective(pos + 8); + body.push(...deserializeVecStatement(pos + 32)); + node.body = body; + parent = previousParent; + return node; +} + +function deserializeTSTypeLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeLiteral', + members: null, + start, + end, + range: [start, end], + parent, + }; + node.members = deserializeVecTSSignature(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSInferType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInferType', + typeParameter: null, + start, + end, + range: [start, end], + parent, + }; + node.typeParameter = deserializeBoxTSTypeParameter(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeQuery(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeQuery', + exprName: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }; + node.exprName = deserializeTSTypeQueryExprName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeQueryExprName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + case 3: + return deserializeBoxTSImportType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeQueryExprName`); + } +} + +function deserializeTSImportType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSImportType', + argument: null, + options: null, + qualifier: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeTSType(pos + 8); + node.options = deserializeOptionBoxObjectExpression(pos + 24); + node.qualifier = deserializeOptionTSImportTypeQualifier(pos + 32); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 48); + parent = previousParent; + return node; +} + +function deserializeTSImportTypeQualifier(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeBoxTSImportTypeQualifiedName(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSImportTypeQualifier`); + } +} + +function deserializeTSImportTypeQualifiedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeTSImportTypeQualifier(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSFunctionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSFunctionType', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + parent, + }, + params = deserializeBoxFormalParameters(pos + 24), + thisParam = deserializeOptionBoxTSThisParameter(pos + 16); + thisParam !== null && params.unshift(thisParam); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeBoxTSTypeAnnotation(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSConstructorType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConstructorType', + abstract: deserializeBool(pos + 32), + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + parent, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSMappedType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSMappedType', + key: null, + constraint: null, + nameType: null, + typeAnnotation: null, + optional: null, + readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), + start, + end, + range: [start, end], + parent, + }, + typeParameter = deserializeBoxTSTypeParameter(pos + 8), + key = typeParameter.name; + key.parent = parent; + let { constraint } = typeParameter; + constraint !== null && (constraint.parent = parent); + let optional = deserializeOptionTSMappedTypeModifierOperator(pos + 52); + optional === null && (optional = false); + node.key = key; + node.constraint = constraint; + node.nameType = deserializeOptionTSType(pos + 16); + node.typeAnnotation = deserializeOptionTSType(pos + 32); + node.optional = optional; + parent = previousParent; + return node; +} + +function deserializeTSMappedTypeModifierOperator(pos) { + switch (uint8[pos]) { + case 0: + return true; + case 1: + return '+'; + case 2: + return '-'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSMappedTypeModifierOperator`); + } +} + +function deserializeTSTemplateLiteralType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTemplateLiteralType', + quasis: null, + types: null, + start, + end, + range: [start, end], + parent, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.types = deserializeVecTSType(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSAsExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSAsExpression', + expression: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSSatisfiesExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSSatisfiesExpression', + expression: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeAssertion(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAssertion', + typeAnnotation: null, + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + node.expression = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSImportEqualsDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSImportEqualsDeclaration', + id: null, + moduleReference: null, + importKind: deserializeImportOrExportKind(pos + 56), + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.moduleReference = deserializeTSModuleReference(pos + 40); + parent = previousParent; + return node; +} + +function deserializeTSModuleReference(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + case 3: + return deserializeBoxTSExternalModuleReference(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleReference`); + } +} + +function deserializeTSExternalModuleReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSExternalModuleReference', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeStringLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNonNullExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNonNullExpression', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeDecorator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Decorator', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSExportAssignment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSExportAssignment', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNamespaceExportDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNamespaceExportDeclaration', + id: null, + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeIdentifierName(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSInstantiationExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInstantiationExpression', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeImportOrExportKind(pos) { + switch (uint8[pos]) { + case 0: + return 'value'; + case 1: + return 'type'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportOrExportKind`); + } +} + +function deserializeJSDocNullableType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSJSDocNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSDocNonNullableType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSJSDocNonNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSDocUnknownType(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSJSDocUnknownType', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeCommentKind(pos) { + switch (uint8[pos]) { + case 0: + return 'Line'; + case 1: + return 'Block'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for CommentKind`); + } +} + +function deserializeComment(pos) { + let type = deserializeCommentKind(pos + 12), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type, + value: null, + start, + end, + range: [start, end], + parent, + }, + endCut = type === 'Line' ? 0 : 2; + node.value = sourceText.slice(start + 2, end - endCut); + parent = previousParent; + return node; +} + +function deserializeNameSpan(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + value: deserializeStr(pos + 8), + start, + end, + range: [start, end], + }; +} + +function deserializeImportEntry(pos) { + return { + importName: deserializeImportImportName(pos + 32), + localName: deserializeNameSpan(pos + 64), + isType: deserializeBool(pos + 88), + }; +} + +function deserializeImportImportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + range: nameSpan.range, + }; + case 1: + return { + kind: 'NamespaceObject', + name: null, + start: null, + end: null, + range: [null, null], + }; + case 2: + var { start, end } = deserializeSpan(pos + 8); + return { + kind: 'Default', + name: null, + start, + end, + range: [start, end], + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportImportName`); + } +} + +function deserializeExportEntry(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeOptionNameSpan(pos + 16), + importName: deserializeExportImportName(pos + 40), + exportName: deserializeExportExportName(pos + 72), + localName: deserializeExportLocalName(pos + 104), + isType: deserializeBool(pos + 136), + start, + end, + range: [start, end], + }; +} + +function deserializeExportImportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + range: nameSpan.range, + }; + case 1: + return { + kind: 'All', + name: null, + start: null, + end: null, + range: [null, null], + }; + case 2: + return { + kind: 'AllButDefault', + name: null, + start: null, + end: null, + range: [null, null], + }; + case 3: + return { + kind: 'None', + name: null, + start: null, + end: null, + range: [null, null], + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportImportName`); + } +} + +function deserializeExportExportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + range: nameSpan.range, + }; + case 1: + var { start, end } = deserializeSpan(pos + 8); + return { + kind: 'Default', + name: null, + start, + end, + range: [start, end], + }; + case 2: + return { + kind: 'None', + name: null, + start: null, + end: null, + range: [null, null], + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportExportName`); + } +} + +function deserializeExportLocalName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + range: nameSpan.range, + }; + case 1: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Default', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + range: nameSpan.range, + }; + case 2: + return { + kind: 'None', + name: null, + start: null, + end: null, + range: [null, null], + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportLocalName`); + } +} + +function deserializeDynamicImport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeSpan(pos + 8), + start, + end, + range: [start, end], + }; +} + +function deserializeAssignmentOperator(pos) { + switch (uint8[pos]) { + case 0: + return '='; + case 1: + return '+='; + case 2: + return '-='; + case 3: + return '*='; + case 4: + return '/='; + case 5: + return '%='; + case 6: + return '**='; + case 7: + return '<<='; + case 8: + return '>>='; + case 9: + return '>>>='; + case 10: + return '|='; + case 11: + return '^='; + case 12: + return '&='; + case 13: + return '||='; + case 14: + return '&&='; + case 15: + return '??='; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentOperator`); + } +} + +function deserializeBinaryOperator(pos) { + switch (uint8[pos]) { + case 0: + return '=='; + case 1: + return '!='; + case 2: + return '==='; + case 3: + return '!=='; + case 4: + return '<'; + case 5: + return '<='; + case 6: + return '>'; + case 7: + return '>='; + case 8: + return '+'; + case 9: + return '-'; + case 10: + return '*'; + case 11: + return '/'; + case 12: + return '%'; + case 13: + return '**'; + case 14: + return '<<'; + case 15: + return '>>'; + case 16: + return '>>>'; + case 17: + return '|'; + case 18: + return '^'; + case 19: + return '&'; + case 20: + return 'in'; + case 21: + return 'instanceof'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for BinaryOperator`); + } +} + +function deserializeLogicalOperator(pos) { + switch (uint8[pos]) { + case 0: + return '||'; + case 1: + return '&&'; + case 2: + return '??'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for LogicalOperator`); + } +} + +function deserializeUnaryOperator(pos) { + switch (uint8[pos]) { + case 0: + return '+'; + case 1: + return '-'; + case 2: + return '!'; + case 3: + return '~'; + case 4: + return 'typeof'; + case 5: + return 'void'; + case 6: + return 'delete'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for UnaryOperator`); + } +} + +function deserializeUpdateOperator(pos) { + switch (uint8[pos]) { + case 0: + return '++'; + case 1: + return '--'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for UpdateOperator`); + } +} + +function deserializeSpan(pos) { + return { + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + }; +} + +function deserializeModuleKind(pos) { + switch (uint8[pos]) { + case 0: + return 'script'; + case 1: + return 'module'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ModuleKind`); + } +} + +function deserializeRawTransferData(pos) { + return { + program: deserializeProgram(pos), + comments: deserializeVecComment(pos + 128), + module: deserializeEcmaScriptModule(pos + 152), + errors: deserializeVecError(pos + 256), + }; +} + +function deserializeError(pos) { + return { + severity: deserializeErrorSeverity(pos + 72), + message: deserializeStr(pos), + labels: deserializeVecErrorLabel(pos + 16), + helpMessage: deserializeOptionStr(pos + 40), + codeframe: deserializeStr(pos + 56), + }; +} + +function deserializeErrorSeverity(pos) { + switch (uint8[pos]) { + case 0: + return 'Error'; + case 1: + return 'Warning'; + case 2: + return 'Advice'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ErrorSeverity`); + } +} + +function deserializeErrorLabel(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + message: deserializeOptionStr(pos + 8), + start, + end, + range: [start, end], + }; +} + +function deserializeEcmaScriptModule(pos) { + return { + hasModuleSyntax: deserializeBool(pos + 96), + staticImports: deserializeVecStaticImport(pos), + staticExports: deserializeVecStaticExport(pos + 24), + dynamicImports: deserializeVecDynamicImport(pos + 48), + importMetas: deserializeVecSpan(pos + 72), + }; +} + +function deserializeStaticImport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeNameSpan(pos + 8), + entries: deserializeVecImportEntry(pos + 32), + start, + end, + range: [start, end], + }; +} + +function deserializeStaticExport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + entries: deserializeVecExportEntry(pos + 8), + start, + end, + range: [start, end], + }; +} + +function deserializeU32(pos) { + return uint32[pos >> 2]; +} + +function deserializeU8(pos) { + return uint8[pos]; +} + +function deserializeStr(pos) { + let pos32 = pos >> 2, len = uint32[pos32 + 2]; + if (len === 0) return ''; + pos = uint32[pos32]; + if (sourceIsAscii && pos < sourceByteLen) return sourceText.substr(pos, len); + // Longer strings use `TextDecoder` + // TODO: Find best switch-over point + let end = pos + len; + if (len > 50) return decodeStr(uint8.subarray(pos, end)); + // Shorter strings decode by hand to avoid native call + let out = '', c; + do { + c = uint8[pos++]; + if (c < 128) out += fromCodePoint(c); + else { + out += decodeStr(uint8.subarray(pos - 1, end)); + break; + } + } while (pos < end); + return out; +} + +function deserializeVecComment(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeComment(pos)); + pos += 16; + } + return arr; +} + +function deserializeOptionHashbang(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeHashbang(pos); +} + +function deserializeVecDirective(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 72; + for (; pos !== endPos;) { + arr.push(deserializeDirective(pos)); + pos += 72; + } + return arr; +} + +function deserializeVecStatement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeStatement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxBooleanLiteral(pos) { + return deserializeBooleanLiteral(uint32[pos >> 2]); +} + +function deserializeBoxNullLiteral(pos) { + return deserializeNullLiteral(uint32[pos >> 2]); +} + +function deserializeBoxNumericLiteral(pos) { + return deserializeNumericLiteral(uint32[pos >> 2]); +} + +function deserializeBoxBigIntLiteral(pos) { + return deserializeBigIntLiteral(uint32[pos >> 2]); +} + +function deserializeBoxRegExpLiteral(pos) { + return deserializeRegExpLiteral(uint32[pos >> 2]); +} + +function deserializeBoxStringLiteral(pos) { + return deserializeStringLiteral(uint32[pos >> 2]); +} + +function deserializeBoxTemplateLiteral(pos) { + return deserializeTemplateLiteral(uint32[pos >> 2]); +} + +function deserializeBoxIdentifierReference(pos) { + return deserializeIdentifierReference(uint32[pos >> 2]); +} + +function deserializeBoxMetaProperty(pos) { + return deserializeMetaProperty(uint32[pos >> 2]); +} + +function deserializeBoxSuper(pos) { + return deserializeSuper(uint32[pos >> 2]); +} + +function deserializeBoxArrayExpression(pos) { + return deserializeArrayExpression(uint32[pos >> 2]); +} + +function deserializeBoxArrowFunctionExpression(pos) { + return deserializeArrowFunctionExpression(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentExpression(pos) { + return deserializeAssignmentExpression(uint32[pos >> 2]); +} + +function deserializeBoxAwaitExpression(pos) { + return deserializeAwaitExpression(uint32[pos >> 2]); +} + +function deserializeBoxBinaryExpression(pos) { + return deserializeBinaryExpression(uint32[pos >> 2]); +} + +function deserializeBoxCallExpression(pos) { + return deserializeCallExpression(uint32[pos >> 2]); +} + +function deserializeBoxChainExpression(pos) { + return deserializeChainExpression(uint32[pos >> 2]); +} + +function deserializeBoxClass(pos) { + return deserializeClass(uint32[pos >> 2]); +} + +function deserializeBoxConditionalExpression(pos) { + return deserializeConditionalExpression(uint32[pos >> 2]); +} + +function deserializeBoxFunction(pos) { + return deserializeFunction(uint32[pos >> 2]); +} + +function deserializeBoxImportExpression(pos) { + return deserializeImportExpression(uint32[pos >> 2]); +} + +function deserializeBoxLogicalExpression(pos) { + return deserializeLogicalExpression(uint32[pos >> 2]); +} + +function deserializeBoxNewExpression(pos) { + return deserializeNewExpression(uint32[pos >> 2]); +} + +function deserializeBoxObjectExpression(pos) { + return deserializeObjectExpression(uint32[pos >> 2]); +} + +function deserializeBoxParenthesizedExpression(pos) { + return deserializeParenthesizedExpression(uint32[pos >> 2]); +} + +function deserializeBoxSequenceExpression(pos) { + return deserializeSequenceExpression(uint32[pos >> 2]); +} + +function deserializeBoxTaggedTemplateExpression(pos) { + return deserializeTaggedTemplateExpression(uint32[pos >> 2]); +} + +function deserializeBoxThisExpression(pos) { + return deserializeThisExpression(uint32[pos >> 2]); +} + +function deserializeBoxUnaryExpression(pos) { + return deserializeUnaryExpression(uint32[pos >> 2]); +} + +function deserializeBoxUpdateExpression(pos) { + return deserializeUpdateExpression(uint32[pos >> 2]); +} + +function deserializeBoxYieldExpression(pos) { + return deserializeYieldExpression(uint32[pos >> 2]); +} + +function deserializeBoxPrivateInExpression(pos) { + return deserializePrivateInExpression(uint32[pos >> 2]); +} + +function deserializeBoxJSXElement(pos) { + return deserializeJSXElement(uint32[pos >> 2]); +} + +function deserializeBoxJSXFragment(pos) { + return deserializeJSXFragment(uint32[pos >> 2]); +} + +function deserializeBoxTSAsExpression(pos) { + return deserializeTSAsExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSSatisfiesExpression(pos) { + return deserializeTSSatisfiesExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeAssertion(pos) { + return deserializeTSTypeAssertion(uint32[pos >> 2]); +} + +function deserializeBoxTSNonNullExpression(pos) { + return deserializeTSNonNullExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSInstantiationExpression(pos) { + return deserializeTSInstantiationExpression(uint32[pos >> 2]); +} + +function deserializeBoxV8IntrinsicExpression(pos) { + return deserializeV8IntrinsicExpression(uint32[pos >> 2]); +} + +function deserializeVecArrayExpressionElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeArrayExpressionElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxSpreadElement(pos) { + return deserializeSpreadElement(uint32[pos >> 2]); +} + +function deserializeVecObjectPropertyKind(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeObjectPropertyKind(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxObjectProperty(pos) { + return deserializeObjectProperty(uint32[pos >> 2]); +} + +function deserializeBool(pos) { + return uint8[pos] === 1; +} + +function deserializeBoxIdentifierName(pos) { + return deserializeIdentifierName(uint32[pos >> 2]); +} + +function deserializeBoxPrivateIdentifier(pos) { + return deserializePrivateIdentifier(uint32[pos >> 2]); +} + +function deserializeVecTemplateElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 48; + for (; pos !== endPos;) { + arr.push(deserializeTemplateElement(pos)); + pos += 48; + } + return arr; +} + +function deserializeVecExpression(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeExpression(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSTypeParameterInstantiation(pos) { + return deserializeTSTypeParameterInstantiation(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeParameterInstantiation(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeParameterInstantiation(pos); +} + +function deserializeOptionStr(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeStr(pos); +} + +function deserializeBoxComputedMemberExpression(pos) { + return deserializeComputedMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxStaticMemberExpression(pos) { + return deserializeStaticMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxPrivateFieldExpression(pos) { + return deserializePrivateFieldExpression(uint32[pos >> 2]); +} + +function deserializeVecArgument(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeArgument(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxArrayAssignmentTarget(pos) { + return deserializeArrayAssignmentTarget(uint32[pos >> 2]); +} + +function deserializeBoxObjectAssignmentTarget(pos) { + return deserializeObjectAssignmentTarget(uint32[pos >> 2]); +} + +function deserializeOptionAssignmentTargetMaybeDefault(pos) { + if (uint8[pos] === 51) return null; + return deserializeAssignmentTargetMaybeDefault(pos); +} + +function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeOptionAssignmentTargetMaybeDefault(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxAssignmentTargetRest(pos) { + return deserializeAssignmentTargetRest(uint32[pos >> 2]); +} + +function deserializeOptionBoxAssignmentTargetRest(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxAssignmentTargetRest(pos); +} + +function deserializeVecAssignmentTargetProperty(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeAssignmentTargetProperty(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxAssignmentTargetWithDefault(pos) { + return deserializeAssignmentTargetWithDefault(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentTargetPropertyIdentifier(pos) { + return deserializeAssignmentTargetPropertyIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentTargetPropertyProperty(pos) { + return deserializeAssignmentTargetPropertyProperty(uint32[pos >> 2]); +} + +function deserializeOptionExpression(pos) { + if (uint8[pos] === 51) return null; + return deserializeExpression(pos); +} + +function deserializeBoxBlockStatement(pos) { + return deserializeBlockStatement(uint32[pos >> 2]); +} + +function deserializeBoxBreakStatement(pos) { + return deserializeBreakStatement(uint32[pos >> 2]); +} + +function deserializeBoxContinueStatement(pos) { + return deserializeContinueStatement(uint32[pos >> 2]); +} + +function deserializeBoxDebuggerStatement(pos) { + return deserializeDebuggerStatement(uint32[pos >> 2]); +} + +function deserializeBoxDoWhileStatement(pos) { + return deserializeDoWhileStatement(uint32[pos >> 2]); +} + +function deserializeBoxEmptyStatement(pos) { + return deserializeEmptyStatement(uint32[pos >> 2]); +} + +function deserializeBoxExpressionStatement(pos) { + return deserializeExpressionStatement(uint32[pos >> 2]); +} + +function deserializeBoxForInStatement(pos) { + return deserializeForInStatement(uint32[pos >> 2]); +} + +function deserializeBoxForOfStatement(pos) { + return deserializeForOfStatement(uint32[pos >> 2]); +} + +function deserializeBoxForStatement(pos) { + return deserializeForStatement(uint32[pos >> 2]); +} + +function deserializeBoxIfStatement(pos) { + return deserializeIfStatement(uint32[pos >> 2]); +} + +function deserializeBoxLabeledStatement(pos) { + return deserializeLabeledStatement(uint32[pos >> 2]); +} + +function deserializeBoxReturnStatement(pos) { + return deserializeReturnStatement(uint32[pos >> 2]); +} + +function deserializeBoxSwitchStatement(pos) { + return deserializeSwitchStatement(uint32[pos >> 2]); +} + +function deserializeBoxThrowStatement(pos) { + return deserializeThrowStatement(uint32[pos >> 2]); +} + +function deserializeBoxTryStatement(pos) { + return deserializeTryStatement(uint32[pos >> 2]); +} + +function deserializeBoxWhileStatement(pos) { + return deserializeWhileStatement(uint32[pos >> 2]); +} + +function deserializeBoxWithStatement(pos) { + return deserializeWithStatement(uint32[pos >> 2]); +} + +function deserializeBoxVariableDeclaration(pos) { + return deserializeVariableDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeAliasDeclaration(pos) { + return deserializeTSTypeAliasDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSInterfaceDeclaration(pos) { + return deserializeTSInterfaceDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSEnumDeclaration(pos) { + return deserializeTSEnumDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSModuleDeclaration(pos) { + return deserializeTSModuleDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSImportEqualsDeclaration(pos) { + return deserializeTSImportEqualsDeclaration(uint32[pos >> 2]); +} + +function deserializeVecVariableDeclarator(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 64; + for (; pos !== endPos;) { + arr.push(deserializeVariableDeclarator(pos)); + pos += 64; + } + return arr; +} + +function deserializeOptionStatement(pos) { + if (uint8[pos] === 70) return null; + return deserializeStatement(pos); +} + +function deserializeOptionForStatementInit(pos) { + if (uint8[pos] === 65) return null; + return deserializeForStatementInit(pos); +} + +function deserializeOptionLabelIdentifier(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeLabelIdentifier(pos); +} + +function deserializeVecSwitchCase(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 48; + for (; pos !== endPos;) { + arr.push(deserializeSwitchCase(pos)); + pos += 48; + } + return arr; +} + +function deserializeBoxCatchClause(pos) { + return deserializeCatchClause(uint32[pos >> 2]); +} + +function deserializeOptionBoxCatchClause(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxCatchClause(pos); +} + +function deserializeOptionBoxBlockStatement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxBlockStatement(pos); +} + +function deserializeOptionCatchParameter(pos) { + if (uint8[pos + 32] === 2) return null; + return deserializeCatchParameter(pos); +} + +function deserializeBoxTSTypeAnnotation(pos) { + return deserializeTSTypeAnnotation(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeAnnotation(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeAnnotation(pos); +} + +function deserializeBoxBindingIdentifier(pos) { + return deserializeBindingIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxObjectPattern(pos) { + return deserializeObjectPattern(uint32[pos >> 2]); +} + +function deserializeBoxArrayPattern(pos) { + return deserializeArrayPattern(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentPattern(pos) { + return deserializeAssignmentPattern(uint32[pos >> 2]); +} + +function deserializeVecBindingProperty(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 64; + for (; pos !== endPos;) { + arr.push(deserializeBindingProperty(pos)); + pos += 64; + } + return arr; +} + +function deserializeBoxBindingRestElement(pos) { + return deserializeBindingRestElement(uint32[pos >> 2]); +} + +function deserializeOptionBoxBindingRestElement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxBindingRestElement(pos); +} + +function deserializeOptionBindingPattern(pos) { + if (uint8[pos + 24] === 2) return null; + return deserializeBindingPattern(pos); +} + +function deserializeVecOptionBindingPattern(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeOptionBindingPattern(pos)); + pos += 32; + } + return arr; +} + +function deserializeOptionBindingIdentifier(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeBindingIdentifier(pos); +} + +function deserializeBoxTSTypeParameterDeclaration(pos) { + return deserializeTSTypeParameterDeclaration(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeParameterDeclaration(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeParameterDeclaration(pos); +} + +function deserializeBoxTSThisParameter(pos) { + return deserializeTSThisParameter(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSThisParameter(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSThisParameter(pos); +} + +function deserializeBoxFormalParameters(pos) { + return deserializeFormalParameters(uint32[pos >> 2]); +} + +function deserializeBoxFunctionBody(pos) { + return deserializeFunctionBody(uint32[pos >> 2]); +} + +function deserializeOptionBoxFunctionBody(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxFunctionBody(pos); +} + +function deserializeVecFormalParameter(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 72; + for (; pos !== endPos;) { + arr.push(deserializeFormalParameter(pos)); + pos += 72; + } + return arr; +} + +function deserializeVecDecorator(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 24; + for (; pos !== endPos;) { + arr.push(deserializeDecorator(pos)); + pos += 24; + } + return arr; +} + +function deserializeBoxClassBody(pos) { + return deserializeClassBody(uint32[pos >> 2]); +} + +function deserializeVecClassElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeClassElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxStaticBlock(pos) { + return deserializeStaticBlock(uint32[pos >> 2]); +} + +function deserializeBoxMethodDefinition(pos) { + return deserializeMethodDefinition(uint32[pos >> 2]); +} + +function deserializeBoxPropertyDefinition(pos) { + return deserializePropertyDefinition(uint32[pos >> 2]); +} + +function deserializeBoxAccessorProperty(pos) { + return deserializeAccessorProperty(uint32[pos >> 2]); +} + +function deserializeBoxTSIndexSignature(pos) { + return deserializeTSIndexSignature(uint32[pos >> 2]); +} + +function deserializeBoxImportDeclaration(pos) { + return deserializeImportDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportAllDeclaration(pos) { + return deserializeExportAllDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportDefaultDeclaration(pos) { + return deserializeExportDefaultDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportNamedDeclaration(pos) { + return deserializeExportNamedDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSExportAssignment(pos) { + return deserializeTSExportAssignment(uint32[pos >> 2]); +} + +function deserializeBoxTSNamespaceExportDeclaration(pos) { + return deserializeTSNamespaceExportDeclaration(uint32[pos >> 2]); +} + +function deserializeOptionImportPhase(pos) { + if (uint8[pos] === 2) return null; + return deserializeImportPhase(pos); +} + +function deserializeVecImportDeclarationSpecifier(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeImportDeclarationSpecifier(pos)); + pos += 16; + } + return arr; +} + +function deserializeOptionVecImportDeclarationSpecifier(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeVecImportDeclarationSpecifier(pos); +} + +function deserializeBoxWithClause(pos) { + return deserializeWithClause(uint32[pos >> 2]); +} + +function deserializeOptionBoxWithClause(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxWithClause(pos); +} + +function deserializeBoxImportSpecifier(pos) { + return deserializeImportSpecifier(uint32[pos >> 2]); +} + +function deserializeBoxImportDefaultSpecifier(pos) { + return deserializeImportDefaultSpecifier(uint32[pos >> 2]); +} + +function deserializeBoxImportNamespaceSpecifier(pos) { + return deserializeImportNamespaceSpecifier(uint32[pos >> 2]); +} + +function deserializeVecImportAttribute(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 112; + for (; pos !== endPos;) { + arr.push(deserializeImportAttribute(pos)); + pos += 112; + } + return arr; +} + +function deserializeOptionDeclaration(pos) { + if (uint8[pos] === 31) return null; + return deserializeDeclaration(pos); +} + +function deserializeVecExportSpecifier(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 128; + for (; pos !== endPos;) { + arr.push(deserializeExportSpecifier(pos)); + pos += 128; + } + return arr; +} + +function deserializeOptionStringLiteral(pos) { + if (uint8[pos + 40] === 2) return null; + return deserializeStringLiteral(pos); +} + +function deserializeOptionModuleExportName(pos) { + if (uint8[pos] === 3) return null; + return deserializeModuleExportName(pos); +} + +function deserializeF64(pos) { + return float64[pos >> 3]; +} + +function deserializeBoxJSXOpeningElement(pos) { + return deserializeJSXOpeningElement(uint32[pos >> 2]); +} + +function deserializeVecJSXChild(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeJSXChild(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxJSXClosingElement(pos) { + return deserializeJSXClosingElement(uint32[pos >> 2]); +} + +function deserializeOptionBoxJSXClosingElement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxJSXClosingElement(pos); +} + +function deserializeVecJSXAttributeItem(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeJSXAttributeItem(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxJSXIdentifier(pos) { + return deserializeJSXIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxJSXNamespacedName(pos) { + return deserializeJSXNamespacedName(uint32[pos >> 2]); +} + +function deserializeBoxJSXMemberExpression(pos) { + return deserializeJSXMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxJSXAttribute(pos) { + return deserializeJSXAttribute(uint32[pos >> 2]); +} + +function deserializeBoxJSXSpreadAttribute(pos) { + return deserializeJSXSpreadAttribute(uint32[pos >> 2]); +} + +function deserializeOptionJSXAttributeValue(pos) { + if (uint8[pos] === 4) return null; + return deserializeJSXAttributeValue(pos); +} + +function deserializeBoxJSXExpressionContainer(pos) { + return deserializeJSXExpressionContainer(uint32[pos >> 2]); +} + +function deserializeBoxJSXText(pos) { + return deserializeJSXText(uint32[pos >> 2]); +} + +function deserializeBoxJSXSpreadChild(pos) { + return deserializeJSXSpreadChild(uint32[pos >> 2]); +} + +function deserializeVecTSEnumMember(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 40; + for (; pos !== endPos;) { + arr.push(deserializeTSEnumMember(pos)); + pos += 40; + } + return arr; +} + +function deserializeBoxTSAnyKeyword(pos) { + return deserializeTSAnyKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSBigIntKeyword(pos) { + return deserializeTSBigIntKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSBooleanKeyword(pos) { + return deserializeTSBooleanKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSIntrinsicKeyword(pos) { + return deserializeTSIntrinsicKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNeverKeyword(pos) { + return deserializeTSNeverKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNullKeyword(pos) { + return deserializeTSNullKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNumberKeyword(pos) { + return deserializeTSNumberKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSObjectKeyword(pos) { + return deserializeTSObjectKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSStringKeyword(pos) { + return deserializeTSStringKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSSymbolKeyword(pos) { + return deserializeTSSymbolKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSUndefinedKeyword(pos) { + return deserializeTSUndefinedKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSUnknownKeyword(pos) { + return deserializeTSUnknownKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSVoidKeyword(pos) { + return deserializeTSVoidKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSArrayType(pos) { + return deserializeTSArrayType(uint32[pos >> 2]); +} + +function deserializeBoxTSConditionalType(pos) { + return deserializeTSConditionalType(uint32[pos >> 2]); +} + +function deserializeBoxTSConstructorType(pos) { + return deserializeTSConstructorType(uint32[pos >> 2]); +} + +function deserializeBoxTSFunctionType(pos) { + return deserializeTSFunctionType(uint32[pos >> 2]); +} + +function deserializeBoxTSImportType(pos) { + return deserializeTSImportType(uint32[pos >> 2]); +} + +function deserializeBoxTSIndexedAccessType(pos) { + return deserializeTSIndexedAccessType(uint32[pos >> 2]); +} + +function deserializeBoxTSInferType(pos) { + return deserializeTSInferType(uint32[pos >> 2]); +} + +function deserializeBoxTSIntersectionType(pos) { + return deserializeTSIntersectionType(uint32[pos >> 2]); +} + +function deserializeBoxTSLiteralType(pos) { + return deserializeTSLiteralType(uint32[pos >> 2]); +} + +function deserializeBoxTSMappedType(pos) { + return deserializeTSMappedType(uint32[pos >> 2]); +} + +function deserializeBoxTSNamedTupleMember(pos) { + return deserializeTSNamedTupleMember(uint32[pos >> 2]); +} + +function deserializeBoxTSTemplateLiteralType(pos) { + return deserializeTSTemplateLiteralType(uint32[pos >> 2]); +} + +function deserializeBoxTSThisType(pos) { + return deserializeTSThisType(uint32[pos >> 2]); +} + +function deserializeBoxTSTupleType(pos) { + return deserializeTSTupleType(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeLiteral(pos) { + return deserializeTSTypeLiteral(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeOperator(pos) { + return deserializeTSTypeOperator(uint32[pos >> 2]); +} + +function deserializeBoxTSTypePredicate(pos) { + return deserializeTSTypePredicate(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeQuery(pos) { + return deserializeTSTypeQuery(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeReference(pos) { + return deserializeTSTypeReference(uint32[pos >> 2]); +} + +function deserializeBoxTSUnionType(pos) { + return deserializeTSUnionType(uint32[pos >> 2]); +} + +function deserializeBoxTSParenthesizedType(pos) { + return deserializeTSParenthesizedType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocNullableType(pos) { + return deserializeJSDocNullableType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocNonNullableType(pos) { + return deserializeJSDocNonNullableType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocUnknownType(pos) { + return deserializeJSDocUnknownType(uint32[pos >> 2]); +} + +function deserializeVecTSType(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSType(pos)); + pos += 16; + } + return arr; +} + +function deserializeVecTSTupleElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSTupleElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSOptionalType(pos) { + return deserializeTSOptionalType(uint32[pos >> 2]); +} + +function deserializeBoxTSRestType(pos) { + return deserializeTSRestType(uint32[pos >> 2]); +} + +function deserializeBoxTSQualifiedName(pos) { + return deserializeTSQualifiedName(uint32[pos >> 2]); +} + +function deserializeOptionTSType(pos) { + if (uint8[pos] === 38) return null; + return deserializeTSType(pos); +} + +function deserializeVecTSTypeParameter(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 80; + for (; pos !== endPos;) { + arr.push(deserializeTSTypeParameter(pos)); + pos += 80; + } + return arr; +} + +function deserializeVecTSInterfaceHeritage(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeTSInterfaceHeritage(pos)); + pos += 32; + } + return arr; +} + +function deserializeBoxTSInterfaceBody(pos) { + return deserializeTSInterfaceBody(uint32[pos >> 2]); +} + +function deserializeVecTSSignature(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSSignature(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSPropertySignature(pos) { + return deserializeTSPropertySignature(uint32[pos >> 2]); +} + +function deserializeBoxTSCallSignatureDeclaration(pos) { + return deserializeTSCallSignatureDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSConstructSignatureDeclaration(pos) { + return deserializeTSConstructSignatureDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSMethodSignature(pos) { + return deserializeTSMethodSignature(uint32[pos >> 2]); +} + +function deserializeVecTSIndexSignatureName(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeTSIndexSignatureName(pos)); + pos += 32; + } + return arr; +} + +function deserializeOptionTSModuleDeclarationBody(pos) { + if (uint8[pos] === 2) return null; + return deserializeTSModuleDeclarationBody(pos); +} + +function deserializeBoxTSModuleBlock(pos) { + return deserializeTSModuleBlock(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeParameter(pos) { + return deserializeTSTypeParameter(uint32[pos >> 2]); +} + +function deserializeOptionBoxObjectExpression(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxObjectExpression(pos); +} + +function deserializeOptionTSImportTypeQualifier(pos) { + if (uint8[pos] === 2) return null; + return deserializeTSImportTypeQualifier(pos); +} + +function deserializeBoxTSImportTypeQualifiedName(pos) { + return deserializeTSImportTypeQualifiedName(uint32[pos >> 2]); +} + +function deserializeOptionTSMappedTypeModifierOperator(pos) { + if (uint8[pos] === 3) return null; + return deserializeTSMappedTypeModifierOperator(pos); +} + +function deserializeBoxTSExternalModuleReference(pos) { + return deserializeTSExternalModuleReference(uint32[pos >> 2]); +} + +function deserializeOptionNameSpan(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeNameSpan(pos); +} + +function deserializeVecError(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 80; + for (; pos !== endPos;) { + arr.push(deserializeError(pos)); + pos += 80; + } + return arr; +} + +function deserializeVecErrorLabel(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 24; + for (; pos !== endPos;) { + arr.push(deserializeErrorLabel(pos)); + pos += 24; + } + return arr; +} + +function deserializeVecStaticImport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 56; + for (; pos !== endPos;) { + arr.push(deserializeStaticImport(pos)); + pos += 56; + } + return arr; +} + +function deserializeVecStaticExport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeStaticExport(pos)); + pos += 32; + } + return arr; +} + +function deserializeVecDynamicImport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeDynamicImport(pos)); + pos += 16; + } + return arr; +} + +function deserializeVecSpan(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 8; + for (; pos !== endPos;) { + arr.push(deserializeSpan(pos)); + pos += 8; + } + return arr; +} + +function deserializeVecImportEntry(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 96; + for (; pos !== endPos;) { + arr.push(deserializeImportEntry(pos)); + pos += 96; + } + return arr; +} + +function deserializeVecExportEntry(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 144; + for (; pos !== endPos;) { + arr.push(deserializeExportEntry(pos)); + pos += 144; + } + return arr; +} diff --git a/napi/parser/generated/deserialize/ts.js b/napi/parser/generated/deserialize/ts.js index 36d0f2af094c2..08f5cdc215a27 100644 --- a/napi/parser/generated/deserialize/ts.js +++ b/napi/parser/generated/deserialize/ts.js @@ -31,28 +31,34 @@ function deserializeWith(buffer, sourceTextInput, sourceByteLenInput, deserializ } function deserializeProgram(pos) { - let body = deserializeVecDirective(pos + 72); + let end = deserializeU32(pos + 4), + program = { + type: 'Program', + body: null, + sourceType: deserializeModuleKind(pos + 125), + hashbang: null, + start: 0, + end, + }; + program.hashbang = deserializeOptionHashbang(pos + 48); + let body = program.body = deserializeVecDirective(pos + 72); body.push(...deserializeVecStatement(pos + 96)); - let end = deserializeU32(pos + 4), start; - if (body.length > 0) { - let first = body[0]; - start = first.start; - if (first.type === 'ExportNamedDeclaration' || first.type === 'ExportDefaultDeclaration') { - let { declaration } = first; - if (declaration !== null && declaration.type === 'ClassDeclaration' && declaration.decorators.length > 0) { - let decoratorStart = declaration.decorators[0].start; - decoratorStart < start && (start = decoratorStart); + { + let start; + if (body.length > 0) { + let first = body[0]; + start = first.start; + if (first.type === 'ExportNamedDeclaration' || first.type === 'ExportDefaultDeclaration') { + let { declaration } = first; + if (declaration !== null && declaration.type === 'ClassDeclaration' && declaration.decorators.length > 0) { + let decoratorStart = declaration.decorators[0].start; + decoratorStart < start && (start = decoratorStart); + } } - } - } else start = end; - return { - type: 'Program', - body, - sourceType: deserializeModuleKind(pos + 125), - hashbang: deserializeOptionHashbang(pos + 48), - start, - end, - }; + } else start = end; + program.start = start; + } + return program; } function deserializeExpression(pos) { @@ -149,55 +155,75 @@ function deserializeExpression(pos) { } function deserializeIdentifierName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeIdentifierReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeBindingIdentifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeLabelIdentifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeThisExpression(pos) { @@ -210,13 +236,16 @@ function deserializeThisExpression(pos) { } function deserializeArrayExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ArrayExpression', - elements: deserializeVecArrayExpressionElement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ArrayExpression', + elements: null, + start, + end, + }; + node.elements = deserializeVecArrayExpressionElement(pos + 8); + return node; } function deserializeArrayExpressionElement(pos) { @@ -321,13 +350,16 @@ function deserializeElision(pos) { } function deserializeObjectExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ObjectExpression', - properties: deserializeVecObjectPropertyKind(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ObjectExpression', + properties: null, + start, + end, + }; + node.properties = deserializeVecObjectPropertyKind(pos + 8); + return node; } function deserializeObjectPropertyKind(pos) { @@ -342,19 +374,24 @@ function deserializeObjectPropertyKind(pos) { } function deserializeObjectProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: deserializePropertyKind(pos + 40), - key: deserializePropertyKey(pos + 8), - value: deserializeExpression(pos + 24), - method: deserializeBool(pos + 41), - shorthand: deserializeBool(pos + 42), - computed: deserializeBool(pos + 43), - optional: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: deserializePropertyKind(pos + 40), + key: null, + value: null, + method: deserializeBool(pos + 41), + shorthand: deserializeBool(pos + 42), + computed: deserializeBool(pos + 43), + optional: null, + start, + end, + }; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeExpression(pos + 24); + node.optional = false; + return node; } function deserializePropertyKey(pos) { @@ -468,26 +505,35 @@ function deserializePropertyKind(pos) { } function deserializeTemplateLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TemplateLiteral', - quasis: deserializeVecTemplateElement(pos + 8), - expressions: deserializeVecExpression(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TemplateLiteral', + quasis: null, + expressions: null, + start, + end, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.expressions = deserializeVecExpression(pos + 32); + return node; } function deserializeTaggedTemplateExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TaggedTemplateExpression', - tag: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - quasi: deserializeTemplateLiteral(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TaggedTemplateExpression', + tag: null, + typeArguments: null, + quasi: null, + start, + end, + }; + node.tag = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.quasi = deserializeTemplateLiteral(pos + 32); + return node; } function deserializeTemplateElement(pos) { @@ -514,88 +560,120 @@ function deserializeTemplateElementValue(pos) { } function deserializeComputedMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializeExpression(pos + 24), - optional: deserializeBool(pos + 40), - computed: true, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 40), + computed: null, + start, + end, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeExpression(pos + 24); + node.computed = true; + return node; } function deserializeStaticMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializeIdentifierName(pos + 24), - optional: deserializeBool(pos + 48), - computed: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeIdentifierName(pos + 24); + node.computed = false; + return node; } function deserializePrivateFieldExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializePrivateIdentifier(pos + 24), - optional: deserializeBool(pos + 48), - computed: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializePrivateIdentifier(pos + 24); + node.computed = false; + return node; } function deserializeCallExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'CallExpression', - callee: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - arguments: deserializeVecArgument(pos + 32), - optional: deserializeBool(pos + 56), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'CallExpression', + callee: null, + typeArguments: null, + arguments: null, + optional: deserializeBool(pos + 56), + start, + end, + }; + node.callee = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeNewExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'NewExpression', - callee: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - arguments: deserializeVecArgument(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'NewExpression', + callee: null, + typeArguments: null, + arguments: null, + start, + end, + }; + node.callee = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeMetaProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MetaProperty', - meta: deserializeIdentifierName(pos + 8), - property: deserializeIdentifierName(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MetaProperty', + meta: null, + property: null, + start, + end, + }; + node.meta = deserializeIdentifierName(pos + 8); + node.property = deserializeIdentifierName(pos + 32); + return node; } function deserializeSpreadElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SpreadElement', - argument: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SpreadElement', + argument: null, + start, + end, + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeArgument(pos) { @@ -694,87 +772,116 @@ function deserializeArgument(pos) { } function deserializeUpdateExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'UpdateExpression', - operator: deserializeUpdateOperator(pos + 24), - prefix: deserializeBool(pos + 25), - argument: deserializeSimpleAssignmentTarget(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'UpdateExpression', + operator: deserializeUpdateOperator(pos + 24), + prefix: deserializeBool(pos + 25), + argument: null, + start, + end, + }; + node.argument = deserializeSimpleAssignmentTarget(pos + 8); + return node; } function deserializeUnaryExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'UnaryExpression', - operator: deserializeUnaryOperator(pos + 24), - argument: deserializeExpression(pos + 8), - prefix: true, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'UnaryExpression', + operator: deserializeUnaryOperator(pos + 24), + argument: null, + prefix: null, + start, + end, + }; + node.argument = deserializeExpression(pos + 8); + node.prefix = true; + return node; } function deserializeBinaryExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BinaryExpression', - left: deserializeExpression(pos + 8), - operator: deserializeBinaryOperator(pos + 40), - right: deserializeExpression(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BinaryExpression', + left: null, + operator: deserializeBinaryOperator(pos + 40), + right: null, + start, + end, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializePrivateInExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BinaryExpression', - left: deserializePrivateIdentifier(pos + 8), - operator: 'in', - right: deserializeExpression(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BinaryExpression', + left: null, + operator: null, + right: null, + start, + end, + }; + node.left = deserializePrivateIdentifier(pos + 8); + node.operator = 'in'; + node.right = deserializeExpression(pos + 32); + return node; } function deserializeLogicalExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'LogicalExpression', - left: deserializeExpression(pos + 8), - operator: deserializeLogicalOperator(pos + 40), - right: deserializeExpression(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'LogicalExpression', + left: null, + operator: deserializeLogicalOperator(pos + 40), + right: null, + start, + end, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeConditionalExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ConditionalExpression', - test: deserializeExpression(pos + 8), - consequent: deserializeExpression(pos + 24), - alternate: deserializeExpression(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ConditionalExpression', + test: null, + consequent: null, + alternate: null, + start, + end, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeExpression(pos + 24); + node.alternate = deserializeExpression(pos + 40); + return node; } function deserializeAssignmentExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentExpression', - operator: deserializeAssignmentOperator(pos + 40), - left: deserializeAssignmentTarget(pos + 8), - right: deserializeExpression(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentExpression', + operator: deserializeAssignmentOperator(pos + 40), + left: null, + right: null, + start, + end, + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeAssignmentTarget(pos) { @@ -830,49 +937,66 @@ function deserializeSimpleAssignmentTarget(pos) { function deserializeArrayAssignmentTarget(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrayPattern', + decorators: null, + elements: null, + optional: null, + typeAnnotation: null, + start, + end, + }, elements = deserializeVecOptionAssignmentTargetMaybeDefault(pos + 8), rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); rest !== null && elements.push(rest); - return { - type: 'ArrayPattern', - decorators: [], - elements, - optional: false, - typeAnnotation: null, - start, - end, - }; + node.decorators = []; + node.elements = elements; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeObjectAssignmentTarget(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ObjectPattern', + decorators: null, + properties: null, + optional: null, + typeAnnotation: null, + start, + end, + }, properties = deserializeVecAssignmentTargetProperty(pos + 8), rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); rest !== null && properties.push(rest); - return { - type: 'ObjectPattern', - decorators: [], - properties, - optional: false, - typeAnnotation: null, - start, - end, - }; + node.decorators = []; + node.properties = properties; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeAssignmentTargetRest(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'RestElement', - decorators: [], - argument: deserializeAssignmentTarget(pos + 8), - optional: false, - typeAnnotation: null, - value: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'RestElement', + decorators: null, + argument: null, + optional: null, + typeAnnotation: null, + value: null, + start, + end, + }; + node.decorators = []; + node.argument = deserializeAssignmentTarget(pos + 8); + node.optional = false; + node.typeAnnotation = null; + node.value = null; + return node; } function deserializeAssignmentTargetMaybeDefault(pos) { @@ -905,17 +1029,24 @@ function deserializeAssignmentTargetMaybeDefault(pos) { } function deserializeAssignmentTargetWithDefault(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentPattern', - decorators: [], - left: deserializeAssignmentTarget(pos + 8), - right: deserializeExpression(pos + 24), - optional: false, - typeAnnotation: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentPattern', + decorators: null, + left: null, + right: null, + optional: null, + typeAnnotation: null, + start, + end, + }; + node.decorators = []; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeAssignmentTargetProperty(pos) { @@ -930,58 +1061,78 @@ function deserializeAssignmentTargetProperty(pos) { } function deserializeAssignmentTargetPropertyIdentifier(pos) { - let key = deserializeIdentifierReference(pos + 8), - start = deserializeU32(pos), + let start = deserializeU32(pos), end = deserializeU32(pos + 4), - init = deserializeOptionExpression(pos + 40), - keyCopy = { ...key }; - return { - type: 'Property', - kind: 'init', - key, - value: init === null ? keyCopy : { - type: 'AssignmentPattern', - decorators: [], - left: keyCopy, - right: init, - optional: false, - typeAnnotation: null, + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: null, + optional: null, start, end, }, - method: false, - shorthand: true, - computed: false, + key = deserializeIdentifierReference(pos + 8), + init = deserializeOptionExpression(pos + 40), + value = { ...key }; + init !== null && (value = { + type: 'AssignmentPattern', + decorators: [], + left: value, + right: init, optional: false, + typeAnnotation: null, start, end, - }; + }); + node.kind = 'init'; + node.key = key; + node.value = value; + node.method = false; + node.shorthand = true; + node.computed = false; + node.optional = false; + return node; } function deserializeAssignmentTargetPropertyProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: 'init', - key: deserializePropertyKey(pos + 8), - value: deserializeAssignmentTargetMaybeDefault(pos + 24), - method: false, - shorthand: false, - computed: deserializeBool(pos + 40), - optional: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: deserializeBool(pos + 40), + optional: null, + start, + end, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeAssignmentTargetMaybeDefault(pos + 24); + node.method = false; + node.shorthand = false; + node.optional = false; + return node; } function deserializeSequenceExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SequenceExpression', - expressions: deserializeVecExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SequenceExpression', + expressions: null, + start, + end, + }; + node.expressions = deserializeVecExpression(pos + 8); + return node; } function deserializeSuper(pos) { @@ -994,23 +1145,29 @@ function deserializeSuper(pos) { } function deserializeAwaitExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AwaitExpression', - argument: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AwaitExpression', + argument: null, + start, + end, + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeChainExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ChainExpression', - expression: deserializeChainElement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ChainExpression', + expression: null, + start, + end, + }; + node.expression = deserializeChainElement(pos + 8); + return node; } function deserializeChainElement(pos) { @@ -1031,13 +1188,14 @@ function deserializeChainElement(pos) { } function deserializeParenthesizedExpression(pos) { - let node = deserializeExpression(pos + 8); + let node; node = { type: 'ParenthesizedExpression', - expression: node, + expression: null, start: deserializeU32(pos), end: deserializeU32(pos + 4), }; + node.expression = deserializeExpression(pos + 8); return node; } @@ -1113,14 +1271,17 @@ function deserializeStatement(pos) { } function deserializeDirective(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExpressionStatement', - expression: deserializeStringLiteral(pos + 8), - directive: deserializeStr(pos + 56), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExpressionStatement', + expression: null, + directive: deserializeStr(pos + 56), + start, + end, + }; + node.expression = deserializeStringLiteral(pos + 8); + return node; } function deserializeHashbang(pos) { @@ -1134,13 +1295,16 @@ function deserializeHashbang(pos) { } function deserializeBlockStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BlockStatement', - body: deserializeVecStatement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BlockStatement', + body: null, + start, + end, + }; + node.body = deserializeVecStatement(pos + 8); + return node; } function deserializeDeclaration(pos) { @@ -1167,15 +1331,18 @@ function deserializeDeclaration(pos) { } function deserializeVariableDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'VariableDeclaration', - kind: deserializeVariableDeclarationKind(pos + 32), - declarations: deserializeVecVariableDeclarator(pos + 8), - declare: deserializeBool(pos + 33), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'VariableDeclaration', + kind: deserializeVariableDeclarationKind(pos + 32), + declarations: null, + declare: deserializeBool(pos + 33), + start, + end, + }; + node.declarations = deserializeVecVariableDeclarator(pos + 8); + return node; } function deserializeVariableDeclarationKind(pos) { @@ -1196,15 +1363,19 @@ function deserializeVariableDeclarationKind(pos) { } function deserializeVariableDeclarator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'VariableDeclarator', - id: deserializeBindingPattern(pos + 8), - init: deserializeOptionExpression(pos + 40), - definite: deserializeBool(pos + 57), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'VariableDeclarator', + id: null, + init: null, + definite: deserializeBool(pos + 57), + start, + end, + }; + node.id = deserializeBindingPattern(pos + 8); + node.init = deserializeOptionExpression(pos + 40); + return node; } function deserializeEmptyStatement(pos) { @@ -1217,61 +1388,84 @@ function deserializeEmptyStatement(pos) { } function deserializeExpressionStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExpressionStatement', - expression: deserializeExpression(pos + 8), - directive: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExpressionStatement', + expression: null, + directive: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + node.directive = null; + return node; } function deserializeIfStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'IfStatement', - test: deserializeExpression(pos + 8), - consequent: deserializeStatement(pos + 24), - alternate: deserializeOptionStatement(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'IfStatement', + test: null, + consequent: null, + alternate: null, + start, + end, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeStatement(pos + 24); + node.alternate = deserializeOptionStatement(pos + 40); + return node; } function deserializeDoWhileStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'DoWhileStatement', - body: deserializeStatement(pos + 8), - test: deserializeExpression(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'DoWhileStatement', + body: null, + test: null, + start, + end, + }; + node.body = deserializeStatement(pos + 8); + node.test = deserializeExpression(pos + 24); + return node; } function deserializeWhileStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'WhileStatement', - test: deserializeExpression(pos + 8), - body: deserializeStatement(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'WhileStatement', + test: null, + body: null, + start, + end, + }; + node.test = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + return node; } function deserializeForStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForStatement', - init: deserializeOptionForStatementInit(pos + 8), - test: deserializeOptionExpression(pos + 24), - update: deserializeOptionExpression(pos + 40), - body: deserializeStatement(pos + 56), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForStatement', + init: null, + test: null, + update: null, + body: null, + start, + end, + }; + node.init = deserializeOptionForStatementInit(pos + 8); + node.test = deserializeOptionExpression(pos + 24); + node.update = deserializeOptionExpression(pos + 40); + node.body = deserializeStatement(pos + 56); + return node; } function deserializeForStatementInit(pos) { @@ -1370,15 +1564,20 @@ function deserializeForStatementInit(pos) { } function deserializeForInStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForInStatement', - left: deserializeForStatementLeft(pos + 8), - right: deserializeExpression(pos + 24), - body: deserializeStatement(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForInStatement', + left: null, + right: null, + body: null, + start, + end, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + return node; } function deserializeForStatementLeft(pos) { @@ -1411,123 +1610,165 @@ function deserializeForStatementLeft(pos) { } function deserializeForOfStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForOfStatement', - await: deserializeBool(pos + 60), - left: deserializeForStatementLeft(pos + 8), - right: deserializeExpression(pos + 24), - body: deserializeStatement(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForOfStatement', + await: deserializeBool(pos + 60), + left: null, + right: null, + body: null, + start, + end, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + return node; } function deserializeContinueStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ContinueStatement', - label: deserializeOptionLabelIdentifier(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ContinueStatement', + label: null, + start, + end, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + return node; } function deserializeBreakStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BreakStatement', - label: deserializeOptionLabelIdentifier(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BreakStatement', + label: null, + start, + end, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + return node; } function deserializeReturnStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ReturnStatement', - argument: deserializeOptionExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ReturnStatement', + argument: null, + start, + end, + }; + node.argument = deserializeOptionExpression(pos + 8); + return node; } function deserializeWithStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'WithStatement', - object: deserializeExpression(pos + 8), - body: deserializeStatement(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'WithStatement', + object: null, + body: null, + start, + end, + }; + node.object = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + return node; } function deserializeSwitchStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SwitchStatement', - discriminant: deserializeExpression(pos + 8), - cases: deserializeVecSwitchCase(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SwitchStatement', + discriminant: null, + cases: null, + start, + end, + }; + node.discriminant = deserializeExpression(pos + 8); + node.cases = deserializeVecSwitchCase(pos + 24); + return node; } function deserializeSwitchCase(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SwitchCase', - test: deserializeOptionExpression(pos + 8), - consequent: deserializeVecStatement(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SwitchCase', + test: null, + consequent: null, + start, + end, + }; + node.test = deserializeOptionExpression(pos + 8); + node.consequent = deserializeVecStatement(pos + 24); + return node; } function deserializeLabeledStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'LabeledStatement', - label: deserializeLabelIdentifier(pos + 8), - body: deserializeStatement(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'LabeledStatement', + label: null, + body: null, + start, + end, + }; + node.label = deserializeLabelIdentifier(pos + 8); + node.body = deserializeStatement(pos + 32); + return node; } function deserializeThrowStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ThrowStatement', - argument: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ThrowStatement', + argument: null, + start, + end, + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeTryStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TryStatement', - block: deserializeBoxBlockStatement(pos + 8), - handler: deserializeOptionBoxCatchClause(pos + 16), - finalizer: deserializeOptionBoxBlockStatement(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TryStatement', + block: null, + handler: null, + finalizer: null, + start, + end, + }; + node.block = deserializeBoxBlockStatement(pos + 8); + node.handler = deserializeOptionBoxCatchClause(pos + 16); + node.finalizer = deserializeOptionBoxBlockStatement(pos + 24); + return node; } function deserializeCatchClause(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'CatchClause', - param: deserializeOptionCatchParameter(pos + 8), - body: deserializeBoxBlockStatement(pos + 48), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'CatchClause', + param: null, + body: null, + start, + end, + }; + node.param = deserializeOptionCatchParameter(pos + 8); + node.body = deserializeBoxBlockStatement(pos + 48); + return node; } function deserializeCatchParameter(pos) { @@ -1566,103 +1807,143 @@ function deserializeBindingPatternKind(pos) { } function deserializeAssignmentPattern(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentPattern', - decorators: [], - left: deserializeBindingPattern(pos + 8), - right: deserializeExpression(pos + 40), - optional: false, - typeAnnotation: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentPattern', + decorators: null, + left: null, + right: null, + optional: null, + typeAnnotation: null, + start, + end, + }; + node.decorators = []; + node.left = deserializeBindingPattern(pos + 8); + node.right = deserializeExpression(pos + 40); + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeObjectPattern(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ObjectPattern', + decorators: null, + properties: null, + optional: null, + typeAnnotation: null, + start, + end, + }, properties = deserializeVecBindingProperty(pos + 8), rest = deserializeOptionBoxBindingRestElement(pos + 32); rest !== null && properties.push(rest); - return { - type: 'ObjectPattern', - decorators: [], - properties, - optional: false, - typeAnnotation: null, - start, - end, - }; + node.decorators = []; + node.properties = properties; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeBindingProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: 'init', - key: deserializePropertyKey(pos + 8), - value: deserializeBindingPattern(pos + 24), - method: false, - shorthand: deserializeBool(pos + 56), - computed: deserializeBool(pos + 57), - optional: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: deserializeBool(pos + 56), + computed: deserializeBool(pos + 57), + optional: null, + start, + end, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeBindingPattern(pos + 24); + node.method = false; + node.optional = false; + return node; } function deserializeArrayPattern(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrayPattern', + decorators: null, + elements: null, + optional: null, + typeAnnotation: null, + start, + end, + }, elements = deserializeVecOptionBindingPattern(pos + 8), rest = deserializeOptionBoxBindingRestElement(pos + 32); rest !== null && elements.push(rest); - return { - type: 'ArrayPattern', - decorators: [], - elements, - optional: false, - typeAnnotation: null, - start, - end, - }; + node.decorators = []; + node.elements = elements; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeBindingRestElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'RestElement', - decorators: [], - argument: deserializeBindingPattern(pos + 8), - optional: false, - typeAnnotation: null, - value: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'RestElement', + decorators: null, + argument: null, + optional: null, + typeAnnotation: null, + value: null, + start, + end, + }; + node.decorators = []; + node.argument = deserializeBindingPattern(pos + 8); + node.optional = false; + node.typeAnnotation = null; + node.value = null; + return node; } function deserializeFunction(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), params = deserializeBoxFormalParameters(pos + 56); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeFunctionType(pos + 84), + id: null, + generator: deserializeBool(pos + 85), + async: deserializeBool(pos + 86), + declare: deserializeBool(pos + 87), + typeParameters: null, + params: null, + returnType: null, + body: null, + expression: null, + start, + end, + }, + params = deserializeBoxFormalParameters(pos + 56); { let thisParam = deserializeOptionBoxTSThisParameter(pos + 48); thisParam !== null && params.unshift(thisParam); } - return { - type: deserializeFunctionType(pos + 84), - id: deserializeOptionBindingIdentifier(pos + 8), - generator: deserializeBool(pos + 85), - async: deserializeBool(pos + 86), - declare: deserializeBool(pos + 87), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 64), - body: deserializeOptionBoxFunctionBody(pos + 72), - expression: false, - start, - end, - }; + node.id = deserializeOptionBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 64); + node.body = deserializeOptionBoxFunctionBody(pos + 72); + node.expression = false; + return node; } function deserializeFunctionType(pos) { @@ -1684,16 +1965,19 @@ function deserializeFormalParameters(pos) { let params = deserializeVecFormalParameter(pos + 8); if (uint32[pos + 32 >> 2] !== 0 && uint32[pos + 36 >> 2] !== 0) { pos = uint32[pos + 32 >> 2]; - params.push({ + let rest = { type: 'RestElement', decorators: [], - argument: deserializeBindingPatternKind(pos + 8), + argument: null, optional: deserializeBool(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), + typeAnnotation: null, value: null, start: deserializeU32(pos), end: deserializeU32(pos + 4), - }); + }; + rest.argument = deserializeBindingPatternKind(pos + 8); + rest.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + params.push(rest); } return params; } @@ -1709,79 +1993,107 @@ function deserializeFormalParameter(pos) { param.decorators = deserializeVecDecorator(pos + 8); param.optional = deserializeBool(pos + 56); param.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); - } else {param = { + } else { + param = { type: 'TSParameterProperty', accessibility, - decorators: deserializeVecDecorator(pos + 8), + decorators: null, override, - parameter: deserializeBindingPattern(pos + 32), + parameter: null, readonly, static: false, start: deserializeU32(pos), end: deserializeU32(pos + 4), - };} + }; + param.decorators = deserializeVecDecorator(pos + 8); + param.parameter = deserializeBindingPattern(pos + 32); + } } return param; } function deserializeFunctionBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), body = deserializeVecDirective(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BlockStatement', + body: null, + start, + end, + }, + body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); - return { - type: 'BlockStatement', - body, - start, - end, - }; + node.body = body; + return node; } function deserializeArrowFunctionExpression(pos) { let expression = deserializeBool(pos + 44), start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrowFunctionExpression', + expression, + async: deserializeBool(pos + 45), + typeParameters: null, + params: null, + returnType: null, + body: null, + id: null, + generator: null, + start, + end, + }, body = deserializeBoxFunctionBody(pos + 32); - return { - type: 'ArrowFunctionExpression', - expression, - async: deserializeBool(pos + 45), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 24), - body: expression ? body.body[0].expression : body, - id: null, - generator: false, - start, - end, - }; + expression === true && (body = body.body[0].expression); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.body = body; + node.id = null; + node.generator = false; + return node; } function deserializeYieldExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'YieldExpression', - delegate: deserializeBool(pos + 24), - argument: deserializeOptionExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'YieldExpression', + delegate: deserializeBool(pos + 24), + argument: null, + start, + end, + }; + node.argument = deserializeOptionExpression(pos + 8); + return node; } function deserializeClass(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeClassType(pos + 132), - decorators: deserializeVecDecorator(pos + 8), - id: deserializeOptionBindingIdentifier(pos + 32), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 64), - superClass: deserializeOptionExpression(pos + 72), - superTypeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 88), - implements: deserializeVecTSClassImplements(pos + 96), - body: deserializeBoxClassBody(pos + 120), - abstract: deserializeBool(pos + 133), - declare: deserializeBool(pos + 134), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeClassType(pos + 132), + decorators: null, + id: null, + typeParameters: null, + superClass: null, + superTypeArguments: null, + implements: null, + body: null, + abstract: deserializeBool(pos + 133), + declare: deserializeBool(pos + 134), + start, + end, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.id = deserializeOptionBindingIdentifier(pos + 32); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 64); + node.superClass = deserializeOptionExpression(pos + 72); + node.superTypeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 88); + node.implements = deserializeVecTSClassImplements(pos + 96); + node.body = deserializeBoxClassBody(pos + 120); + return node; } function deserializeClassType(pos) { @@ -1796,13 +2108,16 @@ function deserializeClassType(pos) { } function deserializeClassBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ClassBody', - body: deserializeVecClassElement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ClassBody', + body: null, + start, + end, + }; + node.body = deserializeVecClassElement(pos + 8); + return node; } function deserializeClassElement(pos) { @@ -1823,21 +2138,26 @@ function deserializeClassElement(pos) { } function deserializeMethodDefinition(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeMethodDefinitionType(pos + 56), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - value: deserializeBoxFunction(pos + 48), - kind: deserializeMethodDefinitionKind(pos + 57), - computed: deserializeBool(pos + 58), - static: deserializeBool(pos + 59), - override: deserializeBool(pos + 60), - optional: deserializeBool(pos + 61), - accessibility: deserializeOptionTSAccessibility(pos + 62), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeMethodDefinitionType(pos + 56), + decorators: null, + key: null, + value: null, + kind: deserializeMethodDefinitionKind(pos + 57), + computed: deserializeBool(pos + 58), + static: deserializeBool(pos + 59), + override: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + accessibility: deserializeOptionTSAccessibility(pos + 62), + start, + end, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeBoxFunction(pos + 48); + return node; } function deserializeMethodDefinitionType(pos) { @@ -1852,24 +2172,30 @@ function deserializeMethodDefinitionType(pos) { } function deserializePropertyDefinition(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializePropertyDefinitionType(pos + 72), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 48), - value: deserializeOptionExpression(pos + 56), - computed: deserializeBool(pos + 73), - static: deserializeBool(pos + 74), - declare: deserializeBool(pos + 75), - override: deserializeBool(pos + 76), - optional: deserializeBool(pos + 77), - definite: deserializeBool(pos + 78), - readonly: deserializeBool(pos + 79), - accessibility: deserializeOptionTSAccessibility(pos + 80), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializePropertyDefinitionType(pos + 72), + decorators: null, + key: null, + typeAnnotation: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + declare: deserializeBool(pos + 75), + override: deserializeBool(pos + 76), + optional: deserializeBool(pos + 77), + definite: deserializeBool(pos + 78), + readonly: deserializeBool(pos + 79), + accessibility: deserializeOptionTSAccessibility(pos + 80), + start, + end, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.value = deserializeOptionExpression(pos + 56); + return node; } function deserializePropertyDefinitionType(pos) { @@ -1909,13 +2235,16 @@ function deserializePrivateIdentifier(pos) { } function deserializeStaticBlock(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'StaticBlock', - body: deserializeVecStatement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'StaticBlock', + body: null, + start, + end, + }; + node.body = deserializeVecStatement(pos + 8); + return node; } function deserializeAccessorPropertyType(pos) { @@ -1930,54 +2259,71 @@ function deserializeAccessorPropertyType(pos) { } function deserializeAccessorProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeAccessorPropertyType(pos + 72), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 48), - value: deserializeOptionExpression(pos + 56), - computed: deserializeBool(pos + 73), - static: deserializeBool(pos + 74), - override: deserializeBool(pos + 75), - definite: deserializeBool(pos + 76), - accessibility: deserializeOptionTSAccessibility(pos + 77), - declare: false, - optional: false, - readonly: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeAccessorPropertyType(pos + 72), + decorators: null, + key: null, + typeAnnotation: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + override: deserializeBool(pos + 75), + definite: deserializeBool(pos + 76), + accessibility: deserializeOptionTSAccessibility(pos + 77), + declare: null, + optional: null, + readonly: null, + start, + end, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.value = deserializeOptionExpression(pos + 56); + node.declare = false; + node.optional = false; + node.readonly = false; + return node; } function deserializeImportExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportExpression', - source: deserializeExpression(pos + 8), - options: deserializeOptionExpression(pos + 24), - phase: deserializeOptionImportPhase(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportExpression', + source: null, + options: null, + phase: deserializeOptionImportPhase(pos + 40), + start, + end, + }; + node.source = deserializeExpression(pos + 8); + node.options = deserializeOptionExpression(pos + 24); + return node; } function deserializeImportDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ImportDeclaration', + specifiers: null, + source: null, + phase: deserializeOptionImportPhase(pos + 88), + attributes: null, + importKind: deserializeImportOrExportKind(pos + 89), + start, + end, + }, specifiers = deserializeOptionVecImportDeclarationSpecifier(pos + 8); specifiers === null && (specifiers = []); let withClause = deserializeOptionBoxWithClause(pos + 80); - return { - type: 'ImportDeclaration', - specifiers, - source: deserializeStringLiteral(pos + 32), - phase: deserializeOptionImportPhase(pos + 88), - attributes: withClause === null ? [] : withClause.attributes, - importKind: deserializeImportOrExportKind(pos + 89), - start, - end, - }; + node.specifiers = specifiers; + node.source = deserializeStringLiteral(pos + 32); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeImportPhase(pos) { @@ -2005,35 +2351,45 @@ function deserializeImportDeclarationSpecifier(pos) { } function deserializeImportSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportSpecifier', - imported: deserializeModuleExportName(pos + 8), - local: deserializeBindingIdentifier(pos + 64), - importKind: deserializeImportOrExportKind(pos + 96), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportSpecifier', + imported: null, + local: null, + importKind: deserializeImportOrExportKind(pos + 96), + start, + end, + }; + node.imported = deserializeModuleExportName(pos + 8); + node.local = deserializeBindingIdentifier(pos + 64); + return node; } function deserializeImportDefaultSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportDefaultSpecifier', - local: deserializeBindingIdentifier(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportDefaultSpecifier', + local: null, + start, + end, + }; + node.local = deserializeBindingIdentifier(pos + 8); + return node; } function deserializeImportNamespaceSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportNamespaceSpecifier', - local: deserializeBindingIdentifier(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportNamespaceSpecifier', + local: null, + start, + end, + }; + node.local = deserializeBindingIdentifier(pos + 8); + return node; } function deserializeWithClause(pos) { @@ -2041,14 +2397,18 @@ function deserializeWithClause(pos) { } function deserializeImportAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportAttribute', - key: deserializeImportAttributeKey(pos + 8), - value: deserializeStringLiteral(pos + 64), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportAttribute', + key: null, + value: null, + start, + end, + }; + node.key = deserializeImportAttributeKey(pos + 8); + node.value = deserializeStringLiteral(pos + 64); + return node; } function deserializeImportAttributeKey(pos) { @@ -2063,55 +2423,74 @@ function deserializeImportAttributeKey(pos) { } function deserializeExportNamedDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), withClause = deserializeOptionBoxWithClause(pos + 96); - return { - type: 'ExportNamedDeclaration', - declaration: deserializeOptionDeclaration(pos + 8), - specifiers: deserializeVecExportSpecifier(pos + 24), - source: deserializeOptionStringLiteral(pos + 48), - exportKind: deserializeImportOrExportKind(pos + 104), - attributes: withClause === null ? [] : withClause.attributes, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportNamedDeclaration', + declaration: null, + specifiers: null, + source: null, + exportKind: deserializeImportOrExportKind(pos + 104), + attributes: null, + start, + end, + }, + withClause = deserializeOptionBoxWithClause(pos + 96); + node.declaration = deserializeOptionDeclaration(pos + 8); + node.specifiers = deserializeVecExportSpecifier(pos + 24); + node.source = deserializeOptionStringLiteral(pos + 48); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeExportDefaultDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExportDefaultDeclaration', - declaration: deserializeExportDefaultDeclarationKind(pos + 8), - exportKind: 'value', - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportDefaultDeclaration', + declaration: null, + exportKind: null, + start, + end, + }; + node.declaration = deserializeExportDefaultDeclarationKind(pos + 8); + node.exportKind = 'value'; + return node; } function deserializeExportAllDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ExportAllDeclaration', + exported: null, + source: null, + attributes: null, + exportKind: deserializeImportOrExportKind(pos + 120), + start, + end, + }, withClause = deserializeOptionBoxWithClause(pos + 112); - return { - type: 'ExportAllDeclaration', - exported: deserializeOptionModuleExportName(pos + 8), - source: deserializeStringLiteral(pos + 64), - attributes: withClause === null ? [] : withClause.attributes, - exportKind: deserializeImportOrExportKind(pos + 120), - start, - end, - }; + node.exported = deserializeOptionModuleExportName(pos + 8); + node.source = deserializeStringLiteral(pos + 64); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeExportSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExportSpecifier', - local: deserializeModuleExportName(pos + 8), - exported: deserializeModuleExportName(pos + 64), - exportKind: deserializeImportOrExportKind(pos + 120), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportSpecifier', + local: null, + exported: null, + exportKind: deserializeImportOrExportKind(pos + 120), + start, + end, + }; + node.local = deserializeModuleExportName(pos + 8); + node.exported = deserializeModuleExportName(pos + 64); + return node; } function deserializeExportDefaultDeclarationKind(pos) { @@ -2227,36 +2606,48 @@ function deserializeModuleExportName(pos) { } function deserializeV8IntrinsicExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'V8IntrinsicExpression', - name: deserializeIdentifierName(pos + 8), - arguments: deserializeVecArgument(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'V8IntrinsicExpression', + name: null, + arguments: null, + start, + end, + }; + node.name = deserializeIdentifierName(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeBooleanLiteral(pos) { - let value = deserializeBool(pos + 8), start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Literal', - value, - raw: start === 0 && end === 0 ? null : value + '', - start, - end, - }; + let value = deserializeBool(pos + 8), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value, + raw: null, + start, + end, + }; + node.raw = start === 0 && end === 0 ? null : value + ''; + return node; } function deserializeNullLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Literal', - value: null, - raw: start === 0 && end === 0 ? null : 'null', - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: null, + start, + end, + }; + node.value = null; + node.raw = start === 0 && end === 0 ? null : 'null'; + return node; } function deserializeNumericLiteral(pos) { @@ -2271,43 +2662,58 @@ function deserializeNumericLiteral(pos) { } function deserializeStringLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), value = deserializeStr(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + start, + end, + }, + value = deserializeStr(pos + 8); deserializeBool(pos + 40) && (value = value.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); - return { - type: 'Literal', - value, - raw: deserializeOptionStr(pos + 24), - start, - end, - }; -} - -function deserializeBigIntLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), bigint = deserializeStr(pos + 8); - return { - type: 'Literal', - value: BigInt(bigint), - raw: deserializeOptionStr(pos + 24), - bigint, - start, - end, - }; + node.value = value; + return node; +} + +function deserializeBigIntLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + bigint: null, + start, + end, + }, + bigint = deserializeStr(pos + 8); + node.value = BigInt(bigint); + node.bigint = bigint; + return node; } function deserializeRegExpLiteral(pos) { - let regex = deserializeRegExp(pos + 8), start = deserializeU32(pos), end = deserializeU32(pos + 4), value = null; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 40), + regex: null, + start, + end, + }, + regex = deserializeRegExp(pos + 8), + value = null; try { value = new RegExp(regex.pattern, regex.flags); } catch {} - return { - type: 'Literal', - value, - raw: deserializeOptionStr(pos + 40), - regex, - start, - end, - }; + node.value = value; + node.regex = regex; + return node; } function deserializeRegExp(pos) { @@ -2332,54 +2738,72 @@ function deserializeRegExpFlags(pos) { } function deserializeJSXElement(pos) { - let closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), - start = deserializeU32(pos), + let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'JSXElement', + openingElement: null, + children: null, + closingElement: null, + start, + end, + }, + closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), openingElement = deserializeBoxJSXOpeningElement(pos + 8); closingElement === null && (openingElement.selfClosing = true); - return { - type: 'JSXElement', - openingElement, - children: deserializeVecJSXChild(pos + 16), - closingElement, - start, - end, - }; + node.openingElement = openingElement; + node.children = deserializeVecJSXChild(pos + 16); + node.closingElement = closingElement; + return node; } function deserializeJSXOpeningElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXOpeningElement', - name: deserializeJSXElementName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - attributes: deserializeVecJSXAttributeItem(pos + 32), - selfClosing: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXOpeningElement', + name: null, + typeArguments: null, + attributes: null, + selfClosing: null, + start, + end, + }; + node.name = deserializeJSXElementName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.attributes = deserializeVecJSXAttributeItem(pos + 32); + node.selfClosing = false; + return node; } function deserializeJSXClosingElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXClosingElement', - name: deserializeJSXElementName(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXClosingElement', + name: null, + start, + end, + }; + node.name = deserializeJSXElementName(pos + 8); + return node; } function deserializeJSXFragment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXFragment', - openingFragment: deserializeJSXOpeningFragment(pos + 8), - children: deserializeVecJSXChild(pos + 16), - closingFragment: deserializeJSXClosingFragment(pos + 40), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXFragment', + openingFragment: null, + children: null, + closingFragment: null, + start, + end, + }; + node.openingFragment = deserializeJSXOpeningFragment(pos + 8); + node.children = deserializeVecJSXChild(pos + 16); + node.closingFragment = deserializeJSXClosingFragment(pos + 40); + return node; } function deserializeJSXOpeningFragment(pos) { @@ -2430,25 +2854,33 @@ function deserializeJSXElementName(pos) { } function deserializeJSXNamespacedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXNamespacedName', - namespace: deserializeJSXIdentifier(pos + 8), - name: deserializeJSXIdentifier(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXNamespacedName', + namespace: null, + name: null, + start, + end, + }; + node.namespace = deserializeJSXIdentifier(pos + 8); + node.name = deserializeJSXIdentifier(pos + 32); + return node; } function deserializeJSXMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXMemberExpression', - object: deserializeJSXMemberExpressionObject(pos + 8), - property: deserializeJSXIdentifier(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXMemberExpression', + object: null, + property: null, + start, + end, + }; + node.object = deserializeJSXMemberExpressionObject(pos + 8); + node.property = deserializeJSXIdentifier(pos + 24); + return node; } function deserializeJSXMemberExpressionObject(pos) { @@ -2477,13 +2909,16 @@ function deserializeJSXMemberExpressionObject(pos) { } function deserializeJSXExpressionContainer(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXExpressionContainer', - expression: deserializeJSXExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXExpressionContainer', + expression: null, + start, + end, + }; + node.expression = deserializeJSXExpression(pos + 8); + return node; } function deserializeJSXExpression(pos) { @@ -2602,24 +3037,31 @@ function deserializeJSXAttributeItem(pos) { } function deserializeJSXAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXAttribute', - name: deserializeJSXAttributeName(pos + 8), - value: deserializeOptionJSXAttributeValue(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXAttribute', + name: null, + value: null, + start, + end, + }; + node.name = deserializeJSXAttributeName(pos + 8); + node.value = deserializeOptionJSXAttributeValue(pos + 24); + return node; } function deserializeJSXSpreadAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXSpreadAttribute', - argument: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXSpreadAttribute', + argument: null, + start, + end, + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeJSXAttributeName(pos) { @@ -2676,13 +3118,16 @@ function deserializeJSXChild(pos) { } function deserializeJSXSpreadChild(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXSpreadChild', - expression: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXSpreadChild', + expression: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeJSXText(pos) { @@ -2697,51 +3142,69 @@ function deserializeJSXText(pos) { } function deserializeTSThisParameter(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: 'this', - optional: false, - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 16), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: null, + optional: null, + typeAnnotation: null, + start, + end, + }; + node.decorators = []; + node.name = 'this'; + node.optional = false; + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + return node; } function deserializeTSEnumDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumDeclaration', - id: deserializeBindingIdentifier(pos + 8), - body: deserializeTSEnumBody(pos + 40), - const: deserializeBool(pos + 76), - declare: deserializeBool(pos + 77), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumDeclaration', + id: null, + body: null, + const: deserializeBool(pos + 76), + declare: deserializeBool(pos + 77), + start, + end, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.body = deserializeTSEnumBody(pos + 40); + return node; } function deserializeTSEnumBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumBody', - members: deserializeVecTSEnumMember(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumBody', + members: null, + start, + end, + }; + node.members = deserializeVecTSEnumMember(pos + 8); + return node; } function deserializeTSEnumMember(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumMember', - id: deserializeTSEnumMemberName(pos + 8), - initializer: deserializeOptionExpression(pos + 24), - computed: deserializeU8(pos + 8) > 1, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumMember', + id: null, + initializer: null, + computed: null, + start, + end, + }; + node.id = deserializeTSEnumMemberName(pos + 8); + node.initializer = deserializeOptionExpression(pos + 24); + node.computed = deserializeU8(pos + 8) > 1; + return node; } function deserializeTSEnumMemberName(pos) { @@ -2760,23 +3223,29 @@ function deserializeTSEnumMemberName(pos) { } function deserializeTSTypeAnnotation(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAnnotation', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAnnotation', + typeAnnotation: null, + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSLiteralType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSLiteralType', - literal: deserializeTSLiteral(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSLiteralType', + literal: null, + start, + end, + }; + node.literal = deserializeTSLiteral(pos + 8); + return node; } function deserializeTSLiteral(pos) { @@ -2880,58 +3349,74 @@ function deserializeTSType(pos) { } function deserializeTSConditionalType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConditionalType', - checkType: deserializeTSType(pos + 8), - extendsType: deserializeTSType(pos + 24), - trueType: deserializeTSType(pos + 40), - falseType: deserializeTSType(pos + 56), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConditionalType', + checkType: null, + extendsType: null, + trueType: null, + falseType: null, + start, + end, + }; + node.checkType = deserializeTSType(pos + 8); + node.extendsType = deserializeTSType(pos + 24); + node.trueType = deserializeTSType(pos + 40); + node.falseType = deserializeTSType(pos + 56); + return node; } function deserializeTSUnionType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSUnionType', - types: deserializeVecTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSUnionType', + types: null, + start, + end, + }; + node.types = deserializeVecTSType(pos + 8); + return node; } function deserializeTSIntersectionType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIntersectionType', - types: deserializeVecTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIntersectionType', + types: null, + start, + end, + }; + node.types = deserializeVecTSType(pos + 8); + return node; } function deserializeTSParenthesizedType(pos) { - let node = deserializeTSType(pos + 8); + let node; node = { type: 'TSParenthesizedType', - typeAnnotation: node, + typeAnnotation: null, start: deserializeU32(pos), end: deserializeU32(pos + 4), }; + node.typeAnnotation = deserializeTSType(pos + 8); return node; } function deserializeTSTypeOperator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeOperator', - operator: deserializeTSTypeOperatorOperator(pos + 24), - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeOperator', + operator: deserializeTSTypeOperatorOperator(pos + 24), + typeAnnotation: null, + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSTypeOperatorOperator(pos) { @@ -2948,66 +3433,86 @@ function deserializeTSTypeOperatorOperator(pos) { } function deserializeTSArrayType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSArrayType', - elementType: deserializeTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSArrayType', + elementType: null, + start, + end, + }; + node.elementType = deserializeTSType(pos + 8); + return node; } function deserializeTSIndexedAccessType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIndexedAccessType', - objectType: deserializeTSType(pos + 8), - indexType: deserializeTSType(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIndexedAccessType', + objectType: null, + indexType: null, + start, + end, + }; + node.objectType = deserializeTSType(pos + 8); + node.indexType = deserializeTSType(pos + 24); + return node; } function deserializeTSTupleType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTupleType', - elementTypes: deserializeVecTSTupleElement(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTupleType', + elementTypes: null, + start, + end, + }; + node.elementTypes = deserializeVecTSTupleElement(pos + 8); + return node; } function deserializeTSNamedTupleMember(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNamedTupleMember', - label: deserializeIdentifierName(pos + 8), - elementType: deserializeTSTupleElement(pos + 32), - optional: deserializeBool(pos + 48), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNamedTupleMember', + label: null, + elementType: null, + optional: deserializeBool(pos + 48), + start, + end, + }; + node.label = deserializeIdentifierName(pos + 8); + node.elementType = deserializeTSTupleElement(pos + 32); + return node; } function deserializeTSOptionalType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSOptionalType', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSOptionalType', + typeAnnotation: null, + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSRestType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSRestType', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSRestType', + typeAnnotation: null, + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSTupleElement(pos) { @@ -3222,14 +3727,18 @@ function deserializeTSBigIntKeyword(pos) { } function deserializeTSTypeReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeReference', - typeName: deserializeTSTypeName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeReference', + typeName: null, + typeArguments: null, + start, + end, + }; + node.typeName = deserializeTSTypeName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypeName(pos) { @@ -3246,62 +3755,82 @@ function deserializeTSTypeName(pos) { } function deserializeTSQualifiedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSQualifiedName', - left: deserializeTSTypeName(pos + 8), - right: deserializeIdentifierName(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + }; + node.left = deserializeTSTypeName(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + return node; } function deserializeTSTypeParameterInstantiation(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameterInstantiation', - params: deserializeVecTSType(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameterInstantiation', + params: null, + start, + end, + }; + node.params = deserializeVecTSType(pos + 8); + return node; } function deserializeTSTypeParameter(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameter', - name: deserializeBindingIdentifier(pos + 8), - constraint: deserializeOptionTSType(pos + 40), - default: deserializeOptionTSType(pos + 56), - in: deserializeBool(pos + 72), - out: deserializeBool(pos + 73), - const: deserializeBool(pos + 74), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameter', + name: null, + constraint: null, + default: null, + in: deserializeBool(pos + 72), + out: deserializeBool(pos + 73), + const: deserializeBool(pos + 74), + start, + end, + }; + node.name = deserializeBindingIdentifier(pos + 8); + node.constraint = deserializeOptionTSType(pos + 40); + node.default = deserializeOptionTSType(pos + 56); + return node; } function deserializeTSTypeParameterDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameterDeclaration', - params: deserializeVecTSTypeParameter(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameterDeclaration', + params: null, + start, + end, + }; + node.params = deserializeVecTSTypeParameter(pos + 8); + return node; } function deserializeTSTypeAliasDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAliasDeclaration', - id: deserializeBindingIdentifier(pos + 8), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - typeAnnotation: deserializeTSType(pos + 48), - declare: deserializeBool(pos + 68), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAliasDeclaration', + id: null, + typeParameters: null, + typeAnnotation: null, + declare: deserializeBool(pos + 68), + start, + end, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.typeAnnotation = deserializeTSType(pos + 48); + return node; } function deserializeTSAccessibility(pos) { @@ -3318,24 +3847,34 @@ function deserializeTSAccessibility(pos) { } function deserializeTSClassImplements(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), expression = deserializeTSTypeName(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSClassImplements', + expression: null, + typeArguments: null, + start, + end, + }, + expression = deserializeTSTypeName(pos + 8); if (expression.type === 'TSQualifiedName') { let object = expression.left, - parent = expression = { + { right } = expression, + previous = expression = { type: 'MemberExpression', object, - property: expression.right, + property: right, optional: false, computed: false, start: expression.start, end: expression.end, }; for (; object.type === 'TSQualifiedName';) { - let { left } = object; - parent = parent.object = { + let { left, right } = object; + previous = previous.object = { type: 'MemberExpression', object: left, - property: object.right, + property: right, optional: false, computed: false, start: object.start, @@ -3344,53 +3883,64 @@ function deserializeTSClassImplements(pos) { object = left; } } - return { - type: 'TSClassImplements', - expression, - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - }; + node.expression = expression; + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSInterfaceDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceDeclaration', - id: deserializeBindingIdentifier(pos + 8), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - extends: deserializeVecTSInterfaceHeritage(pos + 48), - body: deserializeBoxTSInterfaceBody(pos + 72), - declare: deserializeBool(pos + 84), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceDeclaration', + id: null, + typeParameters: null, + extends: null, + body: null, + declare: deserializeBool(pos + 84), + start, + end, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.extends = deserializeVecTSInterfaceHeritage(pos + 48); + node.body = deserializeBoxTSInterfaceBody(pos + 72); + return node; } function deserializeTSInterfaceBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceBody', - body: deserializeVecTSSignature(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceBody', + body: null, + start, + end, + }; + node.body = deserializeVecTSSignature(pos + 8); + return node; } function deserializeTSPropertySignature(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSPropertySignature', - computed: deserializeBool(pos + 32), - optional: deserializeBool(pos + 33), - readonly: deserializeBool(pos + 34), - key: deserializePropertyKey(pos + 8), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - accessibility: null, - static: false, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSPropertySignature', + computed: deserializeBool(pos + 32), + optional: deserializeBool(pos + 33), + readonly: deserializeBool(pos + 34), + key: null, + typeAnnotation: null, + accessibility: null, + static: null, + start, + end, + }; + node.key = deserializePropertyKey(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.accessibility = null; + node.static = false; + return node; } function deserializeTSSignature(pos) { @@ -3411,33 +3961,42 @@ function deserializeTSSignature(pos) { } function deserializeTSIndexSignature(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIndexSignature', - parameters: deserializeVecTSIndexSignatureName(pos + 8), - typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 32), - readonly: deserializeBool(pos + 40), - static: deserializeBool(pos + 41), - accessibility: null, - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIndexSignature', + parameters: null, + typeAnnotation: null, + readonly: deserializeBool(pos + 40), + static: deserializeBool(pos + 41), + accessibility: null, + start, + end, + }; + node.parameters = deserializeVecTSIndexSignatureName(pos + 8); + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 32); + node.accessibility = null; + return node; } function deserializeTSCallSignatureDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSCallSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + }, params = deserializeBoxFormalParameters(pos + 24), thisParam = deserializeOptionBoxTSThisParameter(pos + 16); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSCallSignatureDeclaration', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 32), - start, - end, - }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 32); + return node; } function deserializeTSMethodSignatureKind(pos) { @@ -3456,72 +4015,98 @@ function deserializeTSMethodSignatureKind(pos) { function deserializeTSMethodSignature(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSMethodSignature', + key: null, + computed: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + kind: deserializeTSMethodSignatureKind(pos + 62), + typeParameters: null, + params: null, + returnType: null, + accessibility: null, + readonly: null, + static: null, + start, + end, + }, params = deserializeBoxFormalParameters(pos + 40), thisParam = deserializeOptionBoxTSThisParameter(pos + 32); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSMethodSignature', - key: deserializePropertyKey(pos + 8), - computed: deserializeBool(pos + 60), - optional: deserializeBool(pos + 61), - kind: deserializeTSMethodSignatureKind(pos + 62), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 24), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 48), - accessibility: null, - readonly: false, - static: false, - start, - end, - }; + node.key = deserializePropertyKey(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 24); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.accessibility = null; + node.readonly = false; + node.static = false; + return node; } function deserializeTSConstructSignatureDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConstructSignatureDeclaration', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConstructSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSIndexSignatureName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSInterfaceHeritage(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceHeritage', - expression: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceHeritage', + expression: null, + typeArguments: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypePredicate(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypePredicate', - parameterName: deserializeTSTypePredicateName(pos + 8), - asserts: deserializeBool(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypePredicate', + parameterName: null, + asserts: deserializeBool(pos + 32), + typeAnnotation: null, + start, + end, + }; + node.parameterName = deserializeTSTypePredicateName(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSTypePredicateName(pos) { @@ -3541,51 +4126,23 @@ function deserializeTSModuleDeclaration(pos) { start = deserializeU32(pos), end = deserializeU32(pos + 4), declare = deserializeBool(pos + 85), - id = deserializeTSModuleDeclarationName(pos + 8), + node, body = deserializeOptionTSModuleDeclarationBody(pos + 64); - // Flatten `body`, and nest `id` - if (body !== null && body.type === 'TSModuleDeclaration') { - let innerId = body.id; - if (innerId.type === 'Identifier') { - id = { - type: 'TSQualifiedName', - left: id, - right: innerId, - start: id.start, - end: innerId.end, - }; - } else { - // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of - // this module on left, and previous `left` of innermost `TSQualifiedName` on right - for (;;) { - innerId.start = id.start; - if (innerId.left.type === 'Identifier') break; - innerId = innerId.left; - } - innerId.left = { - type: 'TSQualifiedName', - left: id, - right: innerId.left, - start: id.start, - end: innerId.left.end, - }; - id = body.id; - } - body = Object.hasOwn(body, 'body') ? body.body : null; - } - return body === null - ? { + if (body === null) { + node = { type: 'TSModuleDeclaration', - id, + id: null, kind, declare, global, start, end, - } - : { + }; + node.id = deserializeTSModuleDeclarationName(pos + 8); + } else { + node = { type: 'TSModuleDeclaration', - id, + id: null, body, kind, declare, @@ -3593,6 +4150,44 @@ function deserializeTSModuleDeclaration(pos) { start, end, }; + let id = deserializeTSModuleDeclarationName(pos + 8); + if (body.type === 'TSModuleBlock') node.id = id; + else { + let innerId = body.id; + if (innerId.type === 'Identifier') { + node.id = { + type: 'TSQualifiedName', + left: id, + right: innerId, + start: id.start, + end: innerId.end, + }; + } else { + // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of + // this module on left, and previous `left` of innermost `TSQualifiedName` on right + node.id = innerId; + let { start } = id; + for (;;) { + innerId.start = start; + if (innerId.left.type === 'Identifier') break; + innerId = innerId.left; + } + let right = innerId.left; + innerId.left = { + type: 'TSQualifiedName', + left: id, + right, + start, + end: right.end, + }; + } + if (Object.hasOwn(body, 'body')) { + body = body.body; + node.body = body; + } else body = null; + } + } + return node; } function deserializeTSModuleDeclarationKind(pos) { @@ -3631,45 +4226,59 @@ function deserializeTSModuleDeclarationBody(pos) { } function deserializeTSModuleBlock(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), body = deserializeVecDirective(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSModuleBlock', + body: null, + start, + end, + }, + body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); - return { - type: 'TSModuleBlock', - body, - start, - end, - }; + node.body = body; + return node; } function deserializeTSTypeLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeLiteral', - members: deserializeVecTSSignature(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeLiteral', + members: null, + start, + end, + }; + node.members = deserializeVecTSSignature(pos + 8); + return node; } function deserializeTSInferType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInferType', - typeParameter: deserializeBoxTSTypeParameter(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInferType', + typeParameter: null, + start, + end, + }; + node.typeParameter = deserializeBoxTSTypeParameter(pos + 8); + return node; } function deserializeTSTypeQuery(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeQuery', - exprName: deserializeTSTypeQueryExprName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeQuery', + exprName: null, + typeArguments: null, + start, + end, + }; + node.exprName = deserializeTSTypeQueryExprName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypeQueryExprName(pos) { @@ -3688,16 +4297,22 @@ function deserializeTSTypeQueryExprName(pos) { } function deserializeTSImportType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSImportType', - argument: deserializeTSType(pos + 8), - options: deserializeOptionBoxObjectExpression(pos + 24), - qualifier: deserializeOptionTSImportTypeQualifier(pos + 32), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 48), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSImportType', + argument: null, + options: null, + qualifier: null, + typeArguments: null, + start, + end, + }; + node.argument = deserializeTSType(pos + 8); + node.options = deserializeOptionBoxObjectExpression(pos + 24); + node.qualifier = deserializeOptionTSImportTypeQualifier(pos + 32); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 48); + return node; } function deserializeTSImportTypeQualifier(pos) { @@ -3712,62 +4327,83 @@ function deserializeTSImportTypeQualifier(pos) { } function deserializeTSImportTypeQualifiedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSQualifiedName', - left: deserializeTSImportTypeQualifier(pos + 8), - right: deserializeIdentifierName(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + }; + node.left = deserializeTSImportTypeQualifier(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + return node; } function deserializeTSFunctionType(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSFunctionType', + typeParameters: null, + params: null, + returnType: null, + start, + end, + }, params = deserializeBoxFormalParameters(pos + 24), thisParam = deserializeOptionBoxTSThisParameter(pos + 16); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSFunctionType', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params, - returnType: deserializeBoxTSTypeAnnotation(pos + 32), - start, - end, - }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeBoxTSTypeAnnotation(pos + 32); + return node; } function deserializeTSConstructorType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConstructorType', - abstract: deserializeBool(pos + 32), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeBoxTSTypeAnnotation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConstructorType', + abstract: deserializeBool(pos + 32), + typeParameters: null, + params: null, + returnType: null, + start, + end, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSMappedType(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSMappedType', + key: null, + constraint: null, + nameType: null, + typeAnnotation: null, + optional: null, + readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), + start, + end, + }, typeParameter = deserializeBoxTSTypeParameter(pos + 8), + key = typeParameter.name, + { constraint } = typeParameter, optional = deserializeOptionTSMappedTypeModifierOperator(pos + 52); optional === null && (optional = false); - return { - type: 'TSMappedType', - key: typeParameter.name, - constraint: typeParameter.constraint, - nameType: deserializeOptionTSType(pos + 16), - typeAnnotation: deserializeOptionTSType(pos + 32), - optional, - readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), - start, - end, - }; + node.key = key; + node.constraint = constraint; + node.nameType = deserializeOptionTSType(pos + 16); + node.typeAnnotation = deserializeOptionTSType(pos + 32); + node.optional = optional; + return node; } function deserializeTSMappedTypeModifierOperator(pos) { @@ -3784,59 +4420,79 @@ function deserializeTSMappedTypeModifierOperator(pos) { } function deserializeTSTemplateLiteralType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTemplateLiteralType', - quasis: deserializeVecTemplateElement(pos + 8), - types: deserializeVecTSType(pos + 32), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTemplateLiteralType', + quasis: null, + types: null, + start, + end, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.types = deserializeVecTSType(pos + 32); + return node; } function deserializeTSAsExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSAsExpression', - expression: deserializeExpression(pos + 8), - typeAnnotation: deserializeTSType(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSAsExpression', + expression: null, + typeAnnotation: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + return node; } function deserializeTSSatisfiesExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSSatisfiesExpression', - expression: deserializeExpression(pos + 8), - typeAnnotation: deserializeTSType(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSSatisfiesExpression', + expression: null, + typeAnnotation: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + return node; } function deserializeTSTypeAssertion(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAssertion', - typeAnnotation: deserializeTSType(pos + 8), - expression: deserializeExpression(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAssertion', + typeAnnotation: null, + expression: null, + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + node.expression = deserializeExpression(pos + 24); + return node; } function deserializeTSImportEqualsDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSImportEqualsDeclaration', - id: deserializeBindingIdentifier(pos + 8), - moduleReference: deserializeTSModuleReference(pos + 40), - importKind: deserializeImportOrExportKind(pos + 56), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSImportEqualsDeclaration', + id: null, + moduleReference: null, + importKind: deserializeImportOrExportKind(pos + 56), + start, + end, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.moduleReference = deserializeTSModuleReference(pos + 40); + return node; } function deserializeTSModuleReference(pos) { @@ -3855,64 +4511,83 @@ function deserializeTSModuleReference(pos) { } function deserializeTSExternalModuleReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSExternalModuleReference', - expression: deserializeStringLiteral(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSExternalModuleReference', + expression: null, + start, + end, + }; + node.expression = deserializeStringLiteral(pos + 8); + return node; } function deserializeTSNonNullExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNonNullExpression', - expression: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNonNullExpression', + expression: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeDecorator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Decorator', - expression: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Decorator', + expression: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeTSExportAssignment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSExportAssignment', - expression: deserializeExpression(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSExportAssignment', + expression: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeTSNamespaceExportDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNamespaceExportDeclaration', - id: deserializeIdentifierName(pos + 8), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNamespaceExportDeclaration', + id: null, + start, + end, + }; + node.id = deserializeIdentifierName(pos + 8); + return node; } function deserializeTSInstantiationExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInstantiationExpression', - expression: deserializeExpression(pos + 8), - typeArguments: deserializeBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInstantiationExpression', + expression: null, + typeArguments: null, + start, + end, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeImportOrExportKind(pos) { @@ -3927,25 +4602,31 @@ function deserializeImportOrExportKind(pos) { } function deserializeJSDocNullableType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSJSDocNullableType', - typeAnnotation: deserializeTSType(pos + 8), - postfix: deserializeBool(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSJSDocNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeJSDocNonNullableType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSJSDocNonNullableType', - typeAnnotation: deserializeTSType(pos + 8), - postfix: deserializeBool(pos + 24), - start, - end, - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSJSDocNonNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeJSDocUnknownType(pos) { @@ -3972,13 +4653,15 @@ function deserializeComment(pos) { let type = deserializeCommentKind(pos + 12), start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type, + value: null, + start, + end, + }, endCut = type === 'Line' ? 0 : 2; - return { - type, - value: sourceText.slice(start + 2, end - endCut), - start, - end, - }; + node.value = sourceText.slice(start + 2, end - endCut); + return node; } function deserializeNameSpan(pos) { diff --git a/napi/parser/generated/deserialize/ts_parent.js b/napi/parser/generated/deserialize/ts_parent.js new file mode 100644 index 0000000000000..80b41121feac0 --- /dev/null +++ b/napi/parser/generated/deserialize/ts_parent.js @@ -0,0 +1,6879 @@ +// Auto-generated code, DO NOT EDIT DIRECTLY! +// To edit this generated file you have to edit `tasks/ast_tools/src/generators/raw_transfer.rs`. + +let uint8, uint32, float64, sourceText, sourceIsAscii, sourceByteLen; +const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true }), + decodeStr = textDecoder.decode.bind(textDecoder), + { fromCodePoint } = String; +let parent = null; + +export function deserialize(buffer, sourceText, sourceByteLen) { + return deserializeWith(buffer, sourceText, sourceByteLen, deserializeRawTransferData); +} + +export function deserializeProgramOnly(buffer, sourceText, sourceByteLen) { + return deserializeWith(buffer, sourceText, sourceByteLen, deserializeProgram); +} + +function deserializeWith(buffer, sourceTextInput, sourceByteLenInput, deserialize) { + uint8 = buffer; + uint32 = buffer.uint32; + float64 = buffer.float64; + sourceText = sourceTextInput; + sourceByteLen = sourceByteLenInput; + sourceIsAscii = sourceText.length === sourceByteLen; + let data = deserialize(uint32[536870902]); + uint8 = + uint32 = + float64 = + sourceText = + void 0; + return data; +} + +function deserializeProgram(pos) { + let end = deserializeU32(pos + 4), + program = parent = { + type: 'Program', + body: null, + sourceType: deserializeModuleKind(pos + 125), + hashbang: null, + start: 0, + end, + parent: null, + }; + program.hashbang = deserializeOptionHashbang(pos + 48); + let body = program.body = deserializeVecDirective(pos + 72); + body.push(...deserializeVecStatement(pos + 96)); + { + let start; + if (body.length > 0) { + let first = body[0]; + start = first.start; + if (first.type === 'ExportNamedDeclaration' || first.type === 'ExportDefaultDeclaration') { + let { declaration } = first; + if (declaration !== null && declaration.type === 'ClassDeclaration' && declaration.decorators.length > 0) { + let decoratorStart = declaration.decorators[0].start; + decoratorStart < start && (start = decoratorStart); + } + } + } else start = end; + program.start = start; + } + parent = null; + return program; +} + +function deserializeExpression(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Expression`); + } +} + +function deserializeIdentifierName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeIdentifierReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeBindingIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeLabelIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeThisExpression(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'ThisExpression', + start, + end, + parent, + }; +} + +function deserializeArrayExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayExpression', + elements: null, + start, + end, + parent, + }; + node.elements = deserializeVecArrayExpressionElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeArrayExpressionElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxSpreadElement(pos + 8); + case 65: + return deserializeElision(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ArrayExpressionElement`); + } +} + +function deserializeElision(pos) { + return null; +} + +function deserializeObjectExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectExpression', + properties: null, + start, + end, + parent, + }; + node.properties = deserializeVecObjectPropertyKind(pos + 8); + parent = previousParent; + return node; +} + +function deserializeObjectPropertyKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxObjectProperty(pos + 8); + case 1: + return deserializeBoxSpreadElement(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ObjectPropertyKind`); + } +} + +function deserializeObjectProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: deserializePropertyKind(pos + 40), + key: null, + value: null, + method: deserializeBool(pos + 41), + shorthand: deserializeBool(pos + 42), + computed: deserializeBool(pos + 43), + optional: null, + start, + end, + parent, + }; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeExpression(pos + 24); + node.optional = false; + parent = previousParent; + return node; +} + +function deserializePropertyKey(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxIdentifierName(pos + 8); + case 65: + return deserializeBoxPrivateIdentifier(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyKey`); + } +} + +function deserializePropertyKind(pos) { + switch (uint8[pos]) { + case 0: + return 'init'; + case 1: + return 'get'; + case 2: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyKind`); + } +} + +function deserializeTemplateLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TemplateLiteral', + quasis: null, + expressions: null, + start, + end, + parent, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.expressions = deserializeVecExpression(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTaggedTemplateExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TaggedTemplateExpression', + tag: null, + typeArguments: null, + quasi: null, + start, + end, + parent, + }; + node.tag = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.quasi = deserializeTemplateLiteral(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTemplateElement(pos) { + let tail = deserializeBool(pos + 40), + start = deserializeU32(pos) - 1, + end = deserializeU32(pos + 4) + 2 - tail, + value = deserializeTemplateElementValue(pos + 8); + value.cooked !== null && deserializeBool(pos + 41) && + (value.cooked = value.cooked.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); + return { + type: 'TemplateElement', + value, + tail, + start, + end, + parent, + }; +} + +function deserializeTemplateElementValue(pos) { + return { + raw: deserializeStr(pos), + cooked: deserializeOptionStr(pos + 16), + }; +} + +function deserializeComputedMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 40), + computed: null, + start, + end, + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeExpression(pos + 24); + node.computed = true; + parent = previousParent; + return node; +} + +function deserializeStaticMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeIdentifierName(pos + 24); + node.computed = false; + parent = previousParent; + return node; +} + +function deserializePrivateFieldExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializePrivateIdentifier(pos + 24); + node.computed = false; + parent = previousParent; + return node; +} + +function deserializeCallExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'CallExpression', + callee: null, + typeArguments: null, + arguments: null, + optional: deserializeBool(pos + 56), + start, + end, + parent, + }; + node.callee = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeNewExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'NewExpression', + callee: null, + typeArguments: null, + arguments: null, + start, + end, + parent, + }; + node.callee = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeMetaProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MetaProperty', + meta: null, + property: null, + start, + end, + parent, + }; + node.meta = deserializeIdentifierName(pos + 8); + node.property = deserializeIdentifierName(pos + 32); + parent = previousParent; + return node; +} + +function deserializeSpreadElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SpreadElement', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeArgument(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxSpreadElement(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Argument`); + } +} + +function deserializeUpdateExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'UpdateExpression', + operator: deserializeUpdateOperator(pos + 24), + prefix: deserializeBool(pos + 25), + argument: null, + start, + end, + parent, + }; + node.argument = deserializeSimpleAssignmentTarget(pos + 8); + parent = previousParent; + return node; +} + +function deserializeUnaryExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'UnaryExpression', + operator: deserializeUnaryOperator(pos + 24), + argument: null, + prefix: null, + start, + end, + parent, + }; + node.argument = deserializeExpression(pos + 8); + node.prefix = true; + parent = previousParent; + return node; +} + +function deserializeBinaryExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BinaryExpression', + left: null, + operator: deserializeBinaryOperator(pos + 40), + right: null, + start, + end, + parent, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializePrivateInExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BinaryExpression', + left: null, + operator: null, + right: null, + start, + end, + parent, + }; + node.left = deserializePrivateIdentifier(pos + 8); + node.operator = 'in'; + node.right = deserializeExpression(pos + 32); + parent = previousParent; + return node; +} + +function deserializeLogicalExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'LogicalExpression', + left: null, + operator: deserializeLogicalOperator(pos + 40), + right: null, + start, + end, + parent, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeConditionalExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ConditionalExpression', + test: null, + consequent: null, + alternate: null, + start, + end, + parent, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeExpression(pos + 24); + node.alternate = deserializeExpression(pos + 40); + parent = previousParent; + return node; +} + +function deserializeAssignmentExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentExpression', + operator: deserializeAssignmentOperator(pos + 40), + left: null, + right: null, + start, + end, + parent, + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeAssignmentTarget(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTarget`); + } +} + +function deserializeSimpleAssignmentTarget(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for SimpleAssignmentTarget`); + } +} + +function deserializeArrayAssignmentTarget(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayPattern', + decorators: null, + elements: null, + optional: null, + typeAnnotation: null, + start, + end, + parent, + }, + elements = deserializeVecOptionAssignmentTargetMaybeDefault(pos + 8), + rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); + rest !== null && elements.push(rest); + node.decorators = []; + node.elements = elements; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeObjectAssignmentTarget(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectPattern', + decorators: null, + properties: null, + optional: null, + typeAnnotation: null, + start, + end, + parent, + }, + properties = deserializeVecAssignmentTargetProperty(pos + 8), + rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); + rest !== null && properties.push(rest); + node.decorators = []; + node.properties = properties; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetRest(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'RestElement', + decorators: null, + argument: null, + optional: null, + typeAnnotation: null, + value: null, + start, + end, + parent, + }; + node.decorators = []; + node.argument = deserializeAssignmentTarget(pos + 8); + node.optional = false; + node.typeAnnotation = null; + node.value = null; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetMaybeDefault(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 16: + return deserializeBoxAssignmentTargetWithDefault(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTargetMaybeDefault`); + } +} + +function deserializeAssignmentTargetWithDefault(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentPattern', + decorators: null, + left: null, + right: null, + optional: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.decorators = []; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetProperty(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxAssignmentTargetPropertyIdentifier(pos + 8); + case 1: + return deserializeBoxAssignmentTargetPropertyProperty(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTargetProperty`); + } +} + +function deserializeAssignmentTargetPropertyIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: null, + optional: null, + start, + end, + parent, + }, + key = deserializeIdentifierReference(pos + 8), + init = deserializeOptionExpression(pos + 40), + value = { ...key }; + if (init !== null) { + let left = value, previousParent = parent; + value = parent = { + type: 'AssignmentPattern', + decorators: [], + left, + right: init, + optional: false, + typeAnnotation: null, + start, + end, + parent, + }; + left.parent = value; + init.parent = value; + parent = previousParent; + } + node.kind = 'init'; + node.key = key; + node.value = value; + node.method = false; + node.shorthand = true; + node.computed = false; + node.optional = false; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetPropertyProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: deserializeBool(pos + 40), + optional: null, + start, + end, + parent, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeAssignmentTargetMaybeDefault(pos + 24); + node.method = false; + node.shorthand = false; + node.optional = false; + parent = previousParent; + return node; +} + +function deserializeSequenceExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SequenceExpression', + expressions: null, + start, + end, + parent, + }; + node.expressions = deserializeVecExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeSuper(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Super', + start, + end, + parent, + }; +} + +function deserializeAwaitExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AwaitExpression', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeChainExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ChainExpression', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeChainElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeChainElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxCallExpression(pos + 8); + case 1: + return deserializeBoxTSNonNullExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ChainElement`); + } +} + +function deserializeParenthesizedExpression(pos) { + let node; + { + let previousParent = parent; + node = parent = { + type: 'ParenthesizedExpression', + expression: null, + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + } + return node; +} + +function deserializeStatement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBlockStatement(pos + 8); + case 1: + return deserializeBoxBreakStatement(pos + 8); + case 2: + return deserializeBoxContinueStatement(pos + 8); + case 3: + return deserializeBoxDebuggerStatement(pos + 8); + case 4: + return deserializeBoxDoWhileStatement(pos + 8); + case 5: + return deserializeBoxEmptyStatement(pos + 8); + case 6: + return deserializeBoxExpressionStatement(pos + 8); + case 7: + return deserializeBoxForInStatement(pos + 8); + case 8: + return deserializeBoxForOfStatement(pos + 8); + case 9: + return deserializeBoxForStatement(pos + 8); + case 10: + return deserializeBoxIfStatement(pos + 8); + case 11: + return deserializeBoxLabeledStatement(pos + 8); + case 12: + return deserializeBoxReturnStatement(pos + 8); + case 13: + return deserializeBoxSwitchStatement(pos + 8); + case 14: + return deserializeBoxThrowStatement(pos + 8); + case 15: + return deserializeBoxTryStatement(pos + 8); + case 16: + return deserializeBoxWhileStatement(pos + 8); + case 17: + return deserializeBoxWithStatement(pos + 8); + case 32: + return deserializeBoxVariableDeclaration(pos + 8); + case 33: + return deserializeBoxFunction(pos + 8); + case 34: + return deserializeBoxClass(pos + 8); + case 35: + return deserializeBoxTSTypeAliasDeclaration(pos + 8); + case 36: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + case 37: + return deserializeBoxTSEnumDeclaration(pos + 8); + case 38: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 39: + return deserializeBoxTSImportEqualsDeclaration(pos + 8); + case 64: + return deserializeBoxImportDeclaration(pos + 8); + case 65: + return deserializeBoxExportAllDeclaration(pos + 8); + case 66: + return deserializeBoxExportDefaultDeclaration(pos + 8); + case 67: + return deserializeBoxExportNamedDeclaration(pos + 8); + case 68: + return deserializeBoxTSExportAssignment(pos + 8); + case 69: + return deserializeBoxTSNamespaceExportDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Statement`); + } +} + +function deserializeDirective(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExpressionStatement', + expression: null, + directive: deserializeStr(pos + 56), + start, + end, + parent, + }; + node.expression = deserializeStringLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeHashbang(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Hashbang', + value: deserializeStr(pos + 8), + start, + end, + parent, + }; +} + +function deserializeBlockStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BlockStatement', + body: null, + start, + end, + parent, + }; + node.body = deserializeVecStatement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeDeclaration(pos) { + switch (uint8[pos]) { + case 32: + return deserializeBoxVariableDeclaration(pos + 8); + case 33: + return deserializeBoxFunction(pos + 8); + case 34: + return deserializeBoxClass(pos + 8); + case 35: + return deserializeBoxTSTypeAliasDeclaration(pos + 8); + case 36: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + case 37: + return deserializeBoxTSEnumDeclaration(pos + 8); + case 38: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 39: + return deserializeBoxTSImportEqualsDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Declaration`); + } +} + +function deserializeVariableDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'VariableDeclaration', + kind: deserializeVariableDeclarationKind(pos + 32), + declarations: null, + declare: deserializeBool(pos + 33), + start, + end, + parent, + }; + node.declarations = deserializeVecVariableDeclarator(pos + 8); + parent = previousParent; + return node; +} + +function deserializeVariableDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return 'var'; + case 1: + return 'let'; + case 2: + return 'const'; + case 3: + return 'using'; + case 4: + return 'await using'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for VariableDeclarationKind`); + } +} + +function deserializeVariableDeclarator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'VariableDeclarator', + id: null, + init: null, + definite: deserializeBool(pos + 57), + start, + end, + parent, + }; + node.id = deserializeBindingPattern(pos + 8); + node.init = deserializeOptionExpression(pos + 40); + parent = previousParent; + return node; +} + +function deserializeEmptyStatement(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'EmptyStatement', + start, + end, + parent, + }; +} + +function deserializeExpressionStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExpressionStatement', + expression: null, + directive: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.directive = null; + parent = previousParent; + return node; +} + +function deserializeIfStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'IfStatement', + test: null, + consequent: null, + alternate: null, + start, + end, + parent, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeStatement(pos + 24); + node.alternate = deserializeOptionStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeDoWhileStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'DoWhileStatement', + body: null, + test: null, + start, + end, + parent, + }; + node.body = deserializeStatement(pos + 8); + node.test = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeWhileStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'WhileStatement', + test: null, + body: null, + start, + end, + parent, + }; + node.test = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeForStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForStatement', + init: null, + test: null, + update: null, + body: null, + start, + end, + parent, + }; + node.init = deserializeOptionForStatementInit(pos + 8); + node.test = deserializeOptionExpression(pos + 24); + node.update = deserializeOptionExpression(pos + 40); + node.body = deserializeStatement(pos + 56); + parent = previousParent; + return node; +} + +function deserializeForStatementInit(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxVariableDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ForStatementInit`); + } +} + +function deserializeForInStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForInStatement', + left: null, + right: null, + body: null, + start, + end, + parent, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeForStatementLeft(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 16: + return deserializeBoxVariableDeclaration(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ForStatementLeft`); + } +} + +function deserializeForOfStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForOfStatement', + await: deserializeBool(pos + 60), + left: null, + right: null, + body: null, + start, + end, + parent, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeContinueStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ContinueStatement', + label: null, + start, + end, + parent, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeBreakStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BreakStatement', + label: null, + start, + end, + parent, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeReturnStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ReturnStatement', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeOptionExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeWithStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'WithStatement', + object: null, + body: null, + start, + end, + parent, + }; + node.object = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeSwitchStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SwitchStatement', + discriminant: null, + cases: null, + start, + end, + parent, + }; + node.discriminant = deserializeExpression(pos + 8); + node.cases = deserializeVecSwitchCase(pos + 24); + parent = previousParent; + return node; +} + +function deserializeSwitchCase(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SwitchCase', + test: null, + consequent: null, + start, + end, + parent, + }; + node.test = deserializeOptionExpression(pos + 8); + node.consequent = deserializeVecStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeLabeledStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'LabeledStatement', + label: null, + body: null, + start, + end, + parent, + }; + node.label = deserializeLabelIdentifier(pos + 8); + node.body = deserializeStatement(pos + 32); + parent = previousParent; + return node; +} + +function deserializeThrowStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ThrowStatement', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTryStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TryStatement', + block: null, + handler: null, + finalizer: null, + start, + end, + parent, + }; + node.block = deserializeBoxBlockStatement(pos + 8); + node.handler = deserializeOptionBoxCatchClause(pos + 16); + node.finalizer = deserializeOptionBoxBlockStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeCatchClause(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'CatchClause', + param: null, + body: null, + start, + end, + parent, + }; + node.param = deserializeOptionCatchParameter(pos + 8); + node.body = deserializeBoxBlockStatement(pos + 48); + parent = previousParent; + return node; +} + +function deserializeCatchParameter(pos) { + return deserializeBindingPattern(pos + 8); +} + +function deserializeDebuggerStatement(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'DebuggerStatement', + start, + end, + parent, + }; +} + +function deserializeBindingPattern(pos) { + let pattern = deserializeBindingPatternKind(pos); + { + let previousParent = parent; + parent = pattern; + pattern.optional = deserializeBool(pos + 24); + pattern.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + parent = previousParent; + } + return pattern; +} + +function deserializeBindingPatternKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBindingIdentifier(pos + 8); + case 1: + return deserializeBoxObjectPattern(pos + 8); + case 2: + return deserializeBoxArrayPattern(pos + 8); + case 3: + return deserializeBoxAssignmentPattern(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for BindingPatternKind`); + } +} + +function deserializeAssignmentPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentPattern', + decorators: null, + left: null, + right: null, + optional: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.decorators = []; + node.left = deserializeBindingPattern(pos + 8); + node.right = deserializeExpression(pos + 40); + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeObjectPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectPattern', + decorators: null, + properties: null, + optional: null, + typeAnnotation: null, + start, + end, + parent, + }, + properties = deserializeVecBindingProperty(pos + 8), + rest = deserializeOptionBoxBindingRestElement(pos + 32); + rest !== null && properties.push(rest); + node.decorators = []; + node.properties = properties; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeBindingProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: deserializeBool(pos + 56), + computed: deserializeBool(pos + 57), + optional: null, + start, + end, + parent, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeBindingPattern(pos + 24); + node.method = false; + node.optional = false; + parent = previousParent; + return node; +} + +function deserializeArrayPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayPattern', + decorators: null, + elements: null, + optional: null, + typeAnnotation: null, + start, + end, + parent, + }, + elements = deserializeVecOptionBindingPattern(pos + 8), + rest = deserializeOptionBoxBindingRestElement(pos + 32); + rest !== null && elements.push(rest); + node.decorators = []; + node.elements = elements; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeBindingRestElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'RestElement', + decorators: null, + argument: null, + optional: null, + typeAnnotation: null, + value: null, + start, + end, + parent, + }; + node.decorators = []; + node.argument = deserializeBindingPattern(pos + 8); + node.optional = false; + node.typeAnnotation = null; + node.value = null; + parent = previousParent; + return node; +} + +function deserializeFunction(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeFunctionType(pos + 84), + id: null, + generator: deserializeBool(pos + 85), + async: deserializeBool(pos + 86), + declare: deserializeBool(pos + 87), + typeParameters: null, + params: null, + returnType: null, + body: null, + expression: null, + start, + end, + parent, + }, + params = deserializeBoxFormalParameters(pos + 56); + { + let thisParam = deserializeOptionBoxTSThisParameter(pos + 48); + thisParam !== null && params.unshift(thisParam); + } + node.id = deserializeOptionBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 64); + node.body = deserializeOptionBoxFunctionBody(pos + 72); + node.expression = false; + parent = previousParent; + return node; +} + +function deserializeFunctionType(pos) { + switch (uint8[pos]) { + case 0: + return 'FunctionDeclaration'; + case 1: + return 'FunctionExpression'; + case 2: + return 'TSDeclareFunction'; + case 3: + return 'TSEmptyBodyFunctionExpression'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for FunctionType`); + } +} + +function deserializeFormalParameters(pos) { + let params = deserializeVecFormalParameter(pos + 8); + if (uint32[pos + 32 >> 2] !== 0 && uint32[pos + 36 >> 2] !== 0) { + pos = uint32[pos + 32 >> 2]; + let previousParent = parent, + rest = parent = { + type: 'RestElement', + decorators: [], + argument: null, + optional: deserializeBool(pos + 32), + typeAnnotation: null, + value: null, + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + parent, + }; + rest.argument = deserializeBindingPatternKind(pos + 8); + rest.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + params.push(rest); + parent = previousParent; + } + return params; +} + +function deserializeFormalParameter(pos) { + let param; + { + let accessibility = deserializeOptionTSAccessibility(pos + 64), + readonly = deserializeBool(pos + 65), + override = deserializeBool(pos + 66), + previousParent = parent; + if (accessibility === null && !readonly && !override) { + param = parent = deserializeBindingPatternKind(pos + 32); + param.decorators = deserializeVecDecorator(pos + 8); + param.optional = deserializeBool(pos + 56); + param.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + } else { + param = parent = { + type: 'TSParameterProperty', + accessibility, + decorators: null, + override, + parameter: null, + readonly, + static: false, + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + parent, + }; + param.decorators = deserializeVecDecorator(pos + 8); + param.parameter = deserializeBindingPattern(pos + 32); + } + parent = previousParent; + } + return param; +} + +function deserializeFunctionBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BlockStatement', + body: null, + start, + end, + parent, + }, + body = deserializeVecDirective(pos + 8); + body.push(...deserializeVecStatement(pos + 32)); + node.body = body; + parent = previousParent; + return node; +} + +function deserializeArrowFunctionExpression(pos) { + let expression = deserializeBool(pos + 44), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrowFunctionExpression', + expression, + async: deserializeBool(pos + 45), + typeParameters: null, + params: null, + returnType: null, + body: null, + id: null, + generator: null, + start, + end, + parent, + }, + body = deserializeBoxFunctionBody(pos + 32); + if (expression === true) { + body = body.body[0].expression; + body.parent = parent; + } + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.body = body; + node.id = null; + node.generator = false; + parent = previousParent; + return node; +} + +function deserializeYieldExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'YieldExpression', + delegate: deserializeBool(pos + 24), + argument: null, + start, + end, + parent, + }; + node.argument = deserializeOptionExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeClass(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeClassType(pos + 132), + decorators: null, + id: null, + typeParameters: null, + superClass: null, + superTypeArguments: null, + implements: null, + body: null, + abstract: deserializeBool(pos + 133), + declare: deserializeBool(pos + 134), + start, + end, + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.id = deserializeOptionBindingIdentifier(pos + 32); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 64); + node.superClass = deserializeOptionExpression(pos + 72); + node.superTypeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 88); + node.implements = deserializeVecTSClassImplements(pos + 96); + node.body = deserializeBoxClassBody(pos + 120); + parent = previousParent; + return node; +} + +function deserializeClassType(pos) { + switch (uint8[pos]) { + case 0: + return 'ClassDeclaration'; + case 1: + return 'ClassExpression'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ClassType`); + } +} + +function deserializeClassBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ClassBody', + body: null, + start, + end, + parent, + }; + node.body = deserializeVecClassElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeClassElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxStaticBlock(pos + 8); + case 1: + return deserializeBoxMethodDefinition(pos + 8); + case 2: + return deserializeBoxPropertyDefinition(pos + 8); + case 3: + return deserializeBoxAccessorProperty(pos + 8); + case 4: + return deserializeBoxTSIndexSignature(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ClassElement`); + } +} + +function deserializeMethodDefinition(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeMethodDefinitionType(pos + 56), + decorators: null, + key: null, + value: null, + kind: deserializeMethodDefinitionKind(pos + 57), + computed: deserializeBool(pos + 58), + static: deserializeBool(pos + 59), + override: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + accessibility: deserializeOptionTSAccessibility(pos + 62), + start, + end, + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeBoxFunction(pos + 48); + parent = previousParent; + return node; +} + +function deserializeMethodDefinitionType(pos) { + switch (uint8[pos]) { + case 0: + return 'MethodDefinition'; + case 1: + return 'TSAbstractMethodDefinition'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for MethodDefinitionType`); + } +} + +function deserializePropertyDefinition(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializePropertyDefinitionType(pos + 72), + decorators: null, + key: null, + typeAnnotation: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + declare: deserializeBool(pos + 75), + override: deserializeBool(pos + 76), + optional: deserializeBool(pos + 77), + definite: deserializeBool(pos + 78), + readonly: deserializeBool(pos + 79), + accessibility: deserializeOptionTSAccessibility(pos + 80), + start, + end, + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.value = deserializeOptionExpression(pos + 56); + parent = previousParent; + return node; +} + +function deserializePropertyDefinitionType(pos) { + switch (uint8[pos]) { + case 0: + return 'PropertyDefinition'; + case 1: + return 'TSAbstractPropertyDefinition'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyDefinitionType`); + } +} + +function deserializeMethodDefinitionKind(pos) { + switch (uint8[pos]) { + case 0: + return 'constructor'; + case 1: + return 'method'; + case 2: + return 'get'; + case 3: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for MethodDefinitionKind`); + } +} + +function deserializePrivateIdentifier(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'PrivateIdentifier', + name: deserializeStr(pos + 8), + start, + end, + parent, + }; +} + +function deserializeStaticBlock(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'StaticBlock', + body: null, + start, + end, + parent, + }; + node.body = deserializeVecStatement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeAccessorPropertyType(pos) { + switch (uint8[pos]) { + case 0: + return 'AccessorProperty'; + case 1: + return 'TSAbstractAccessorProperty'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AccessorPropertyType`); + } +} + +function deserializeAccessorProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeAccessorPropertyType(pos + 72), + decorators: null, + key: null, + typeAnnotation: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + override: deserializeBool(pos + 75), + definite: deserializeBool(pos + 76), + accessibility: deserializeOptionTSAccessibility(pos + 77), + declare: null, + optional: null, + readonly: null, + start, + end, + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.value = deserializeOptionExpression(pos + 56); + node.declare = false; + node.optional = false; + node.readonly = false; + parent = previousParent; + return node; +} + +function deserializeImportExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportExpression', + source: null, + options: null, + phase: deserializeOptionImportPhase(pos + 40), + start, + end, + parent, + }; + node.source = deserializeExpression(pos + 8); + node.options = deserializeOptionExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeImportDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportDeclaration', + specifiers: null, + source: null, + phase: deserializeOptionImportPhase(pos + 88), + attributes: null, + importKind: deserializeImportOrExportKind(pos + 89), + start, + end, + parent, + }, + specifiers = deserializeOptionVecImportDeclarationSpecifier(pos + 8); + specifiers === null && (specifiers = []); + let withClause = deserializeOptionBoxWithClause(pos + 80); + node.specifiers = specifiers; + node.source = deserializeStringLiteral(pos + 32); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeImportPhase(pos) { + switch (uint8[pos]) { + case 0: + return 'source'; + case 1: + return 'defer'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportPhase`); + } +} + +function deserializeImportDeclarationSpecifier(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxImportSpecifier(pos + 8); + case 1: + return deserializeBoxImportDefaultSpecifier(pos + 8); + case 2: + return deserializeBoxImportNamespaceSpecifier(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportDeclarationSpecifier`); + } +} + +function deserializeImportSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportSpecifier', + imported: null, + local: null, + importKind: deserializeImportOrExportKind(pos + 96), + start, + end, + parent, + }; + node.imported = deserializeModuleExportName(pos + 8); + node.local = deserializeBindingIdentifier(pos + 64); + parent = previousParent; + return node; +} + +function deserializeImportDefaultSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportDefaultSpecifier', + local: null, + start, + end, + parent, + }; + node.local = deserializeBindingIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeImportNamespaceSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportNamespaceSpecifier', + local: null, + start, + end, + parent, + }; + node.local = deserializeBindingIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeWithClause(pos) { + return { attributes: deserializeVecImportAttribute(pos + 8) }; +} + +function deserializeImportAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportAttribute', + key: null, + value: null, + start, + end, + parent, + }; + node.key = deserializeImportAttributeKey(pos + 8); + node.value = deserializeStringLiteral(pos + 64); + parent = previousParent; + return node; +} + +function deserializeImportAttributeKey(pos) { + switch (uint8[pos]) { + case 0: + return deserializeIdentifierName(pos + 8); + case 1: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportAttributeKey`); + } +} + +function deserializeExportNamedDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportNamedDeclaration', + declaration: null, + specifiers: null, + source: null, + exportKind: deserializeImportOrExportKind(pos + 104), + attributes: null, + start, + end, + parent, + }, + withClause = deserializeOptionBoxWithClause(pos + 96); + node.declaration = deserializeOptionDeclaration(pos + 8); + node.specifiers = deserializeVecExportSpecifier(pos + 24); + node.source = deserializeOptionStringLiteral(pos + 48); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeExportDefaultDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportDefaultDeclaration', + declaration: null, + exportKind: null, + start, + end, + parent, + }; + node.declaration = deserializeExportDefaultDeclarationKind(pos + 8); + node.exportKind = 'value'; + parent = previousParent; + return node; +} + +function deserializeExportAllDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportAllDeclaration', + exported: null, + source: null, + attributes: null, + exportKind: deserializeImportOrExportKind(pos + 120), + start, + end, + parent, + }, + withClause = deserializeOptionBoxWithClause(pos + 112); + node.exported = deserializeOptionModuleExportName(pos + 8); + node.source = deserializeStringLiteral(pos + 64); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeExportSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportSpecifier', + local: null, + exported: null, + exportKind: deserializeImportOrExportKind(pos + 120), + start, + end, + parent, + }; + node.local = deserializeModuleExportName(pos + 8); + node.exported = deserializeModuleExportName(pos + 64); + parent = previousParent; + return node; +} + +function deserializeExportDefaultDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxFunction(pos + 8); + case 65: + return deserializeBoxClass(pos + 8); + case 66: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportDefaultDeclarationKind`); + } +} + +function deserializeModuleExportName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeIdentifierName(pos + 8); + case 1: + return deserializeIdentifierReference(pos + 8); + case 2: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ModuleExportName`); + } +} + +function deserializeV8IntrinsicExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'V8IntrinsicExpression', + name: null, + arguments: null, + start, + end, + parent, + }; + node.name = deserializeIdentifierName(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeBooleanLiteral(pos) { + let value = deserializeBool(pos + 8), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value, + raw: null, + start, + end, + parent, + }; + node.raw = start === 0 && end === 0 ? null : value + ''; + parent = previousParent; + return node; +} + +function deserializeNullLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: null, + start, + end, + parent, + }; + node.value = null; + node.raw = start === 0 && end === 0 ? null : 'null'; + parent = previousParent; + return node; +} + +function deserializeNumericLiteral(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Literal', + value: deserializeF64(pos + 8), + raw: deserializeOptionStr(pos + 16), + start, + end, + parent, + }; +} + +function deserializeStringLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + start, + end, + parent, + }, + value = deserializeStr(pos + 8); + deserializeBool(pos + 40) && + (value = value.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); + node.value = value; + parent = previousParent; + return node; +} + +function deserializeBigIntLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + bigint: null, + start, + end, + parent, + }, + bigint = deserializeStr(pos + 8); + node.value = BigInt(bigint); + node.bigint = bigint; + parent = previousParent; + return node; +} + +function deserializeRegExpLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 40), + regex: null, + start, + end, + parent, + }, + regex = deserializeRegExp(pos + 8), + value = null; + try { + value = new RegExp(regex.pattern, regex.flags); + } catch {} + node.value = value; + node.regex = regex; + parent = previousParent; + return node; +} + +function deserializeRegExp(pos) { + return { + pattern: deserializeStr(pos), + flags: deserializeRegExpFlags(pos + 24), + }; +} + +function deserializeRegExpFlags(pos) { + let flagBits = deserializeU8(pos), flags = ''; + // Alphabetical order + flagBits & 64 && (flags += 'd'); + flagBits & 1 && (flags += 'g'); + flagBits & 2 && (flags += 'i'); + flagBits & 4 && (flags += 'm'); + flagBits & 8 && (flags += 's'); + flagBits & 16 && (flags += 'u'); + flagBits & 128 && (flags += 'v'); + flagBits & 32 && (flags += 'y'); + return flags; +} + +function deserializeJSXElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXElement', + openingElement: null, + children: null, + closingElement: null, + start, + end, + parent, + }, + closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), + openingElement = deserializeBoxJSXOpeningElement(pos + 8); + closingElement === null && (openingElement.selfClosing = true); + node.openingElement = openingElement; + node.children = deserializeVecJSXChild(pos + 16); + node.closingElement = closingElement; + parent = previousParent; + return node; +} + +function deserializeJSXOpeningElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXOpeningElement', + name: null, + typeArguments: null, + attributes: null, + selfClosing: null, + start, + end, + parent, + }; + node.name = deserializeJSXElementName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.attributes = deserializeVecJSXAttributeItem(pos + 32); + node.selfClosing = false; + parent = previousParent; + return node; +} + +function deserializeJSXClosingElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXClosingElement', + name: null, + start, + end, + parent, + }; + node.name = deserializeJSXElementName(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXFragment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXFragment', + openingFragment: null, + children: null, + closingFragment: null, + start, + end, + parent, + }; + node.openingFragment = deserializeJSXOpeningFragment(pos + 8); + node.children = deserializeVecJSXChild(pos + 16); + node.closingFragment = deserializeJSXClosingFragment(pos + 40); + parent = previousParent; + return node; +} + +function deserializeJSXOpeningFragment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXOpeningFragment', + start, + end, + parent, + }; + parent = previousParent; + return node; +} + +function deserializeJSXClosingFragment(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXClosingFragment', + start, + end, + parent, + }; +} + +function deserializeJSXElementName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXIdentifier(pos + 8); + case 1: + let ident = deserializeBoxIdentifierReference(pos + 8); + return { + type: 'JSXIdentifier', + name: ident.name, + start: ident.start, + end: ident.end, + parent, + }; + case 2: + return deserializeBoxJSXNamespacedName(pos + 8); + case 3: + return deserializeBoxJSXMemberExpression(pos + 8); + case 4: + let thisExpr = deserializeBoxThisExpression(pos + 8); + return { + type: 'JSXIdentifier', + name: 'this', + start: thisExpr.start, + end: thisExpr.end, + parent, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXElementName`); + } +} + +function deserializeJSXNamespacedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXNamespacedName', + namespace: null, + name: null, + start, + end, + parent, + }; + node.namespace = deserializeJSXIdentifier(pos + 8); + node.name = deserializeJSXIdentifier(pos + 32); + parent = previousParent; + return node; +} + +function deserializeJSXMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXMemberExpression', + object: null, + property: null, + start, + end, + parent, + }; + node.object = deserializeJSXMemberExpressionObject(pos + 8); + node.property = deserializeJSXIdentifier(pos + 24); + parent = previousParent; + return node; +} + +function deserializeJSXMemberExpressionObject(pos) { + switch (uint8[pos]) { + case 0: + let ident = deserializeBoxIdentifierReference(pos + 8); + return { + type: 'JSXIdentifier', + name: ident.name, + start: ident.start, + end: ident.end, + parent, + }; + case 1: + return deserializeBoxJSXMemberExpression(pos + 8); + case 2: + let thisExpr = deserializeBoxThisExpression(pos + 8); + return { + type: 'JSXIdentifier', + name: 'this', + start: thisExpr.start, + end: thisExpr.end, + parent, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXMemberExpressionObject`); + } +} + +function deserializeJSXExpressionContainer(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXExpressionContainer', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeJSXExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXExpression(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeJSXEmptyExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXExpression`); + } +} + +function deserializeJSXEmptyExpression(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXEmptyExpression', + start, + end, + parent, + }; +} + +function deserializeJSXAttributeItem(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXAttribute(pos + 8); + case 1: + return deserializeBoxJSXSpreadAttribute(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeItem`); + } +} + +function deserializeJSXAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXAttribute', + name: null, + value: null, + start, + end, + parent, + }; + node.name = deserializeJSXAttributeName(pos + 8); + node.value = deserializeOptionJSXAttributeValue(pos + 24); + parent = previousParent; + return node; +} + +function deserializeJSXSpreadAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXSpreadAttribute', + argument: null, + start, + end, + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXAttributeName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXIdentifier(pos + 8); + case 1: + return deserializeBoxJSXNamespacedName(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeName`); + } +} + +function deserializeJSXAttributeValue(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxStringLiteral(pos + 8); + case 1: + return deserializeBoxJSXExpressionContainer(pos + 8); + case 2: + return deserializeBoxJSXElement(pos + 8); + case 3: + return deserializeBoxJSXFragment(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeValue`); + } +} + +function deserializeJSXIdentifier(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXIdentifier', + name: deserializeStr(pos + 8), + start, + end, + parent, + }; +} + +function deserializeJSXChild(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXText(pos + 8); + case 1: + return deserializeBoxJSXElement(pos + 8); + case 2: + return deserializeBoxJSXFragment(pos + 8); + case 3: + return deserializeBoxJSXExpressionContainer(pos + 8); + case 4: + return deserializeBoxJSXSpreadChild(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXChild`); + } +} + +function deserializeJSXSpreadChild(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXSpreadChild', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXText(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXText', + value: deserializeStr(pos + 8), + raw: deserializeOptionStr(pos + 24), + start, + end, + parent, + }; +} + +function deserializeTSThisParameter(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: null, + optional: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.decorators = []; + node.name = 'this'; + node.optional = false; + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + parent = previousParent; + return node; +} + +function deserializeTSEnumDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumDeclaration', + id: null, + body: null, + const: deserializeBool(pos + 76), + declare: deserializeBool(pos + 77), + start, + end, + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.body = deserializeTSEnumBody(pos + 40); + parent = previousParent; + return node; +} + +function deserializeTSEnumBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumBody', + members: null, + start, + end, + parent, + }; + node.members = deserializeVecTSEnumMember(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSEnumMember(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumMember', + id: null, + initializer: null, + computed: null, + start, + end, + parent, + }; + node.id = deserializeTSEnumMemberName(pos + 8); + node.initializer = deserializeOptionExpression(pos + 24); + node.computed = deserializeU8(pos + 8) > 1; + parent = previousParent; + return node; +} + +function deserializeTSEnumMemberName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeBoxStringLiteral(pos + 8); + case 2: + return deserializeBoxStringLiteral(pos + 8); + case 3: + return deserializeBoxTemplateLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSEnumMemberName`); + } +} + +function deserializeTSTypeAnnotation(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAnnotation', + typeAnnotation: null, + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSLiteralType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSLiteralType', + literal: null, + start, + end, + parent, + }; + node.literal = deserializeTSLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSLiteral(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNumericLiteral(pos + 8); + case 2: + return deserializeBoxBigIntLiteral(pos + 8); + case 3: + return deserializeBoxStringLiteral(pos + 8); + case 4: + return deserializeBoxTemplateLiteral(pos + 8); + case 5: + return deserializeBoxUnaryExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSLiteral`); + } +} + +function deserializeTSType(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSAnyKeyword(pos + 8); + case 1: + return deserializeBoxTSBigIntKeyword(pos + 8); + case 2: + return deserializeBoxTSBooleanKeyword(pos + 8); + case 3: + return deserializeBoxTSIntrinsicKeyword(pos + 8); + case 4: + return deserializeBoxTSNeverKeyword(pos + 8); + case 5: + return deserializeBoxTSNullKeyword(pos + 8); + case 6: + return deserializeBoxTSNumberKeyword(pos + 8); + case 7: + return deserializeBoxTSObjectKeyword(pos + 8); + case 8: + return deserializeBoxTSStringKeyword(pos + 8); + case 9: + return deserializeBoxTSSymbolKeyword(pos + 8); + case 10: + return deserializeBoxTSThisType(pos + 8); + case 11: + return deserializeBoxTSUndefinedKeyword(pos + 8); + case 12: + return deserializeBoxTSUnknownKeyword(pos + 8); + case 13: + return deserializeBoxTSVoidKeyword(pos + 8); + case 14: + return deserializeBoxTSArrayType(pos + 8); + case 15: + return deserializeBoxTSConditionalType(pos + 8); + case 16: + return deserializeBoxTSConstructorType(pos + 8); + case 17: + return deserializeBoxTSFunctionType(pos + 8); + case 18: + return deserializeBoxTSImportType(pos + 8); + case 19: + return deserializeBoxTSIndexedAccessType(pos + 8); + case 20: + return deserializeBoxTSInferType(pos + 8); + case 21: + return deserializeBoxTSIntersectionType(pos + 8); + case 22: + return deserializeBoxTSLiteralType(pos + 8); + case 23: + return deserializeBoxTSMappedType(pos + 8); + case 24: + return deserializeBoxTSNamedTupleMember(pos + 8); + case 26: + return deserializeBoxTSTemplateLiteralType(pos + 8); + case 27: + return deserializeBoxTSTupleType(pos + 8); + case 28: + return deserializeBoxTSTypeLiteral(pos + 8); + case 29: + return deserializeBoxTSTypeOperator(pos + 8); + case 30: + return deserializeBoxTSTypePredicate(pos + 8); + case 31: + return deserializeBoxTSTypeQuery(pos + 8); + case 32: + return deserializeBoxTSTypeReference(pos + 8); + case 33: + return deserializeBoxTSUnionType(pos + 8); + case 34: + return deserializeBoxTSParenthesizedType(pos + 8); + case 35: + return deserializeBoxJSDocNullableType(pos + 8); + case 36: + return deserializeBoxJSDocNonNullableType(pos + 8); + case 37: + return deserializeBoxJSDocUnknownType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSType`); + } +} + +function deserializeTSConditionalType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConditionalType', + checkType: null, + extendsType: null, + trueType: null, + falseType: null, + start, + end, + parent, + }; + node.checkType = deserializeTSType(pos + 8); + node.extendsType = deserializeTSType(pos + 24); + node.trueType = deserializeTSType(pos + 40); + node.falseType = deserializeTSType(pos + 56); + parent = previousParent; + return node; +} + +function deserializeTSUnionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSUnionType', + types: null, + start, + end, + parent, + }; + node.types = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSIntersectionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIntersectionType', + types: null, + start, + end, + parent, + }; + node.types = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSParenthesizedType(pos) { + let node; + { + let previousParent = parent; + node = parent = { + type: 'TSParenthesizedType', + typeAnnotation: null, + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + } + return node; +} + +function deserializeTSTypeOperator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeOperator', + operator: deserializeTSTypeOperatorOperator(pos + 24), + typeAnnotation: null, + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeOperatorOperator(pos) { + switch (uint8[pos]) { + case 0: + return 'keyof'; + case 1: + return 'unique'; + case 2: + return 'readonly'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeOperatorOperator`); + } +} + +function deserializeTSArrayType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSArrayType', + elementType: null, + start, + end, + parent, + }; + node.elementType = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSIndexedAccessType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIndexedAccessType', + objectType: null, + indexType: null, + start, + end, + parent, + }; + node.objectType = deserializeTSType(pos + 8); + node.indexType = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTupleType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTupleType', + elementTypes: null, + start, + end, + parent, + }; + node.elementTypes = deserializeVecTSTupleElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNamedTupleMember(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNamedTupleMember', + label: null, + elementType: null, + optional: deserializeBool(pos + 48), + start, + end, + parent, + }; + node.label = deserializeIdentifierName(pos + 8); + node.elementType = deserializeTSTupleElement(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSOptionalType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSOptionalType', + typeAnnotation: null, + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSRestType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSRestType', + typeAnnotation: null, + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTupleElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSAnyKeyword(pos + 8); + case 1: + return deserializeBoxTSBigIntKeyword(pos + 8); + case 2: + return deserializeBoxTSBooleanKeyword(pos + 8); + case 3: + return deserializeBoxTSIntrinsicKeyword(pos + 8); + case 4: + return deserializeBoxTSNeverKeyword(pos + 8); + case 5: + return deserializeBoxTSNullKeyword(pos + 8); + case 6: + return deserializeBoxTSNumberKeyword(pos + 8); + case 7: + return deserializeBoxTSObjectKeyword(pos + 8); + case 8: + return deserializeBoxTSStringKeyword(pos + 8); + case 9: + return deserializeBoxTSSymbolKeyword(pos + 8); + case 10: + return deserializeBoxTSThisType(pos + 8); + case 11: + return deserializeBoxTSUndefinedKeyword(pos + 8); + case 12: + return deserializeBoxTSUnknownKeyword(pos + 8); + case 13: + return deserializeBoxTSVoidKeyword(pos + 8); + case 14: + return deserializeBoxTSArrayType(pos + 8); + case 15: + return deserializeBoxTSConditionalType(pos + 8); + case 16: + return deserializeBoxTSConstructorType(pos + 8); + case 17: + return deserializeBoxTSFunctionType(pos + 8); + case 18: + return deserializeBoxTSImportType(pos + 8); + case 19: + return deserializeBoxTSIndexedAccessType(pos + 8); + case 20: + return deserializeBoxTSInferType(pos + 8); + case 21: + return deserializeBoxTSIntersectionType(pos + 8); + case 22: + return deserializeBoxTSLiteralType(pos + 8); + case 23: + return deserializeBoxTSMappedType(pos + 8); + case 24: + return deserializeBoxTSNamedTupleMember(pos + 8); + case 26: + return deserializeBoxTSTemplateLiteralType(pos + 8); + case 27: + return deserializeBoxTSTupleType(pos + 8); + case 28: + return deserializeBoxTSTypeLiteral(pos + 8); + case 29: + return deserializeBoxTSTypeOperator(pos + 8); + case 30: + return deserializeBoxTSTypePredicate(pos + 8); + case 31: + return deserializeBoxTSTypeQuery(pos + 8); + case 32: + return deserializeBoxTSTypeReference(pos + 8); + case 33: + return deserializeBoxTSUnionType(pos + 8); + case 34: + return deserializeBoxTSParenthesizedType(pos + 8); + case 35: + return deserializeBoxJSDocNullableType(pos + 8); + case 36: + return deserializeBoxJSDocNonNullableType(pos + 8); + case 37: + return deserializeBoxJSDocUnknownType(pos + 8); + case 64: + return deserializeBoxTSOptionalType(pos + 8); + case 65: + return deserializeBoxTSRestType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTupleElement`); + } +} + +function deserializeTSAnyKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSAnyKeyword', + start, + end, + parent, + }; +} + +function deserializeTSStringKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSStringKeyword', + start, + end, + parent, + }; +} + +function deserializeTSBooleanKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSBooleanKeyword', + start, + end, + parent, + }; +} + +function deserializeTSNumberKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNumberKeyword', + start, + end, + parent, + }; +} + +function deserializeTSNeverKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNeverKeyword', + start, + end, + parent, + }; +} + +function deserializeTSIntrinsicKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSIntrinsicKeyword', + start, + end, + parent, + }; +} + +function deserializeTSUnknownKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSUnknownKeyword', + start, + end, + parent, + }; +} + +function deserializeTSNullKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNullKeyword', + start, + end, + parent, + }; +} + +function deserializeTSUndefinedKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSUndefinedKeyword', + start, + end, + parent, + }; +} + +function deserializeTSVoidKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSVoidKeyword', + start, + end, + parent, + }; +} + +function deserializeTSSymbolKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSSymbolKeyword', + start, + end, + parent, + }; +} + +function deserializeTSThisType(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSThisType', + start, + end, + parent, + }; +} + +function deserializeTSObjectKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSObjectKeyword', + start, + end, + parent, + }; +} + +function deserializeTSBigIntKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSBigIntKeyword', + start, + end, + parent, + }; +} + +function deserializeTSTypeReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeReference', + typeName: null, + typeArguments: null, + start, + end, + parent, + }; + node.typeName = deserializeTSTypeName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeName`); + } +} + +function deserializeTSQualifiedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + parent, + }; + node.left = deserializeTSTypeName(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameterInstantiation(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameterInstantiation', + params: null, + start, + end, + parent, + }; + node.params = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameter(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameter', + name: null, + constraint: null, + default: null, + in: deserializeBool(pos + 72), + out: deserializeBool(pos + 73), + const: deserializeBool(pos + 74), + start, + end, + parent, + }; + node.name = deserializeBindingIdentifier(pos + 8); + node.constraint = deserializeOptionTSType(pos + 40); + node.default = deserializeOptionTSType(pos + 56); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameterDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameterDeclaration', + params: null, + start, + end, + parent, + }; + node.params = deserializeVecTSTypeParameter(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeAliasDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAliasDeclaration', + id: null, + typeParameters: null, + typeAnnotation: null, + declare: deserializeBool(pos + 68), + start, + end, + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.typeAnnotation = deserializeTSType(pos + 48); + parent = previousParent; + return node; +} + +function deserializeTSAccessibility(pos) { + switch (uint8[pos]) { + case 0: + return 'private'; + case 1: + return 'protected'; + case 2: + return 'public'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSAccessibility`); + } +} + +function deserializeTSClassImplements(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSClassImplements', + expression: null, + typeArguments: null, + start, + end, + parent, + }, + expression = deserializeTSTypeName(pos + 8); + if (expression.type === 'TSQualifiedName') { + let object = expression.left, + { right } = expression, + previous = expression = { + type: 'MemberExpression', + object, + property: right, + optional: false, + computed: false, + start: expression.start, + end: expression.end, + parent, + }; + right.parent = previous; + for (;;) { + if (object.type !== 'TSQualifiedName') { + object.parent = previous; + break; + } + let { left, right } = object; + previous = previous.object = { + type: 'MemberExpression', + object: left, + property: right, + optional: false, + computed: false, + start: object.start, + end: object.end, + parent: previous, + }; + right.parent = previous; + object = left; + } + } + node.expression = expression; + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceDeclaration', + id: null, + typeParameters: null, + extends: null, + body: null, + declare: deserializeBool(pos + 84), + start, + end, + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.extends = deserializeVecTSInterfaceHeritage(pos + 48); + node.body = deserializeBoxTSInterfaceBody(pos + 72); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceBody', + body: null, + start, + end, + parent, + }; + node.body = deserializeVecTSSignature(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSPropertySignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSPropertySignature', + computed: deserializeBool(pos + 32), + optional: deserializeBool(pos + 33), + readonly: deserializeBool(pos + 34), + key: null, + typeAnnotation: null, + accessibility: null, + static: null, + start, + end, + parent, + }; + node.key = deserializePropertyKey(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.accessibility = null; + node.static = false; + parent = previousParent; + return node; +} + +function deserializeTSSignature(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSIndexSignature(pos + 8); + case 1: + return deserializeBoxTSPropertySignature(pos + 8); + case 2: + return deserializeBoxTSCallSignatureDeclaration(pos + 8); + case 3: + return deserializeBoxTSConstructSignatureDeclaration(pos + 8); + case 4: + return deserializeBoxTSMethodSignature(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSSignature`); + } +} + +function deserializeTSIndexSignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIndexSignature', + parameters: null, + typeAnnotation: null, + readonly: deserializeBool(pos + 40), + static: deserializeBool(pos + 41), + accessibility: null, + start, + end, + parent, + }; + node.parameters = deserializeVecTSIndexSignatureName(pos + 8); + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 32); + node.accessibility = null; + parent = previousParent; + return node; +} + +function deserializeTSCallSignatureDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSCallSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + parent, + }, + params = deserializeBoxFormalParameters(pos + 24), + thisParam = deserializeOptionBoxTSThisParameter(pos + 16); + thisParam !== null && params.unshift(thisParam); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSMethodSignatureKind(pos) { + switch (uint8[pos]) { + case 0: + return 'method'; + case 1: + return 'get'; + case 2: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSMethodSignatureKind`); + } +} + +function deserializeTSMethodSignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSMethodSignature', + key: null, + computed: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + kind: deserializeTSMethodSignatureKind(pos + 62), + typeParameters: null, + params: null, + returnType: null, + accessibility: null, + readonly: null, + static: null, + start, + end, + parent, + }, + params = deserializeBoxFormalParameters(pos + 40), + thisParam = deserializeOptionBoxTSThisParameter(pos + 32); + thisParam !== null && params.unshift(thisParam); + node.key = deserializePropertyKey(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 24); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.accessibility = null; + node.readonly = false; + node.static = false; + parent = previousParent; + return node; +} + +function deserializeTSConstructSignatureDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConstructSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + parent, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSIndexSignatureName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceHeritage(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceHeritage', + expression: null, + typeArguments: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypePredicate(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypePredicate', + parameterName: null, + asserts: deserializeBool(pos + 32), + typeAnnotation: null, + start, + end, + parent, + }; + node.parameterName = deserializeTSTypePredicateName(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypePredicateName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeTSThisType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypePredicateName`); + } +} + +function deserializeTSModuleDeclaration(pos) { + let kind = deserializeTSModuleDeclarationKind(pos + 84), + global = kind === 'global', + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + declare = deserializeBool(pos + 85), + node, + previousParent = parent, + body = deserializeOptionTSModuleDeclarationBody(pos + 64); + if (body === null) { + node = parent = { + type: 'TSModuleDeclaration', + id: null, + kind, + declare, + global, + start, + end, + parent, + }; + node.id = deserializeTSModuleDeclarationName(pos + 8); + } else { + node = parent = { + type: 'TSModuleDeclaration', + id: null, + body, + kind, + declare, + global, + start, + end, + parent, + }; + let id = deserializeTSModuleDeclarationName(pos + 8); + if (body.type === 'TSModuleBlock') { + node.id = id; + body.parent = node; + } else { + let innerId = body.id; + if (innerId.type === 'Identifier') { + id.parent = + innerId.parent = + node.id = + parent = + { + type: 'TSQualifiedName', + left: id, + right: innerId, + start: id.start, + end: innerId.end, + parent: node, + }; + } else { + // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of + // this module on left, and previous `left` of innermost `TSQualifiedName` on right + node.id = innerId; + innerId.parent = node; + let { start } = id; + for (;;) { + innerId.start = start; + if (innerId.left.type === 'Identifier') break; + innerId = innerId.left; + } + let right = innerId.left; + id.parent = right.parent = innerId.left = { + type: 'TSQualifiedName', + left: id, + right, + start, + end: right.end, + parent: innerId, + }; + } + if (Object.hasOwn(body, 'body')) { + body = body.body; + node.body = body; + body.parent = node; + } else body = null; + } + } + parent = previousParent; + return node; +} + +function deserializeTSModuleDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return 'global'; + case 1: + return 'module'; + case 2: + return 'namespace'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationKind`); + } +} + +function deserializeTSModuleDeclarationName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBindingIdentifier(pos + 8); + case 1: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationName`); + } +} + +function deserializeTSModuleDeclarationBody(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 1: + return deserializeBoxTSModuleBlock(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationBody`); + } +} + +function deserializeTSModuleBlock(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSModuleBlock', + body: null, + start, + end, + parent, + }, + body = deserializeVecDirective(pos + 8); + body.push(...deserializeVecStatement(pos + 32)); + node.body = body; + parent = previousParent; + return node; +} + +function deserializeTSTypeLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeLiteral', + members: null, + start, + end, + parent, + }; + node.members = deserializeVecTSSignature(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSInferType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInferType', + typeParameter: null, + start, + end, + parent, + }; + node.typeParameter = deserializeBoxTSTypeParameter(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeQuery(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeQuery', + exprName: null, + typeArguments: null, + start, + end, + parent, + }; + node.exprName = deserializeTSTypeQueryExprName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeQueryExprName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + case 3: + return deserializeBoxTSImportType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeQueryExprName`); + } +} + +function deserializeTSImportType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSImportType', + argument: null, + options: null, + qualifier: null, + typeArguments: null, + start, + end, + parent, + }; + node.argument = deserializeTSType(pos + 8); + node.options = deserializeOptionBoxObjectExpression(pos + 24); + node.qualifier = deserializeOptionTSImportTypeQualifier(pos + 32); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 48); + parent = previousParent; + return node; +} + +function deserializeTSImportTypeQualifier(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeBoxTSImportTypeQualifiedName(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSImportTypeQualifier`); + } +} + +function deserializeTSImportTypeQualifiedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + parent, + }; + node.left = deserializeTSImportTypeQualifier(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSFunctionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSFunctionType', + typeParameters: null, + params: null, + returnType: null, + start, + end, + parent, + }, + params = deserializeBoxFormalParameters(pos + 24), + thisParam = deserializeOptionBoxTSThisParameter(pos + 16); + thisParam !== null && params.unshift(thisParam); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeBoxTSTypeAnnotation(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSConstructorType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConstructorType', + abstract: deserializeBool(pos + 32), + typeParameters: null, + params: null, + returnType: null, + start, + end, + parent, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSMappedType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSMappedType', + key: null, + constraint: null, + nameType: null, + typeAnnotation: null, + optional: null, + readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), + start, + end, + parent, + }, + typeParameter = deserializeBoxTSTypeParameter(pos + 8), + key = typeParameter.name; + key.parent = parent; + let { constraint } = typeParameter; + constraint !== null && (constraint.parent = parent); + let optional = deserializeOptionTSMappedTypeModifierOperator(pos + 52); + optional === null && (optional = false); + node.key = key; + node.constraint = constraint; + node.nameType = deserializeOptionTSType(pos + 16); + node.typeAnnotation = deserializeOptionTSType(pos + 32); + node.optional = optional; + parent = previousParent; + return node; +} + +function deserializeTSMappedTypeModifierOperator(pos) { + switch (uint8[pos]) { + case 0: + return true; + case 1: + return '+'; + case 2: + return '-'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSMappedTypeModifierOperator`); + } +} + +function deserializeTSTemplateLiteralType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTemplateLiteralType', + quasis: null, + types: null, + start, + end, + parent, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.types = deserializeVecTSType(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSAsExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSAsExpression', + expression: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSSatisfiesExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSSatisfiesExpression', + expression: null, + typeAnnotation: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeAssertion(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAssertion', + typeAnnotation: null, + expression: null, + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + node.expression = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSImportEqualsDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSImportEqualsDeclaration', + id: null, + moduleReference: null, + importKind: deserializeImportOrExportKind(pos + 56), + start, + end, + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.moduleReference = deserializeTSModuleReference(pos + 40); + parent = previousParent; + return node; +} + +function deserializeTSModuleReference(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + case 3: + return deserializeBoxTSExternalModuleReference(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleReference`); + } +} + +function deserializeTSExternalModuleReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSExternalModuleReference', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeStringLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNonNullExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNonNullExpression', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeDecorator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Decorator', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSExportAssignment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSExportAssignment', + expression: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNamespaceExportDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNamespaceExportDeclaration', + id: null, + start, + end, + parent, + }; + node.id = deserializeIdentifierName(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSInstantiationExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInstantiationExpression', + expression: null, + typeArguments: null, + start, + end, + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeImportOrExportKind(pos) { + switch (uint8[pos]) { + case 0: + return 'value'; + case 1: + return 'type'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportOrExportKind`); + } +} + +function deserializeJSDocNullableType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSJSDocNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSDocNonNullableType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSJSDocNonNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSDocUnknownType(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSJSDocUnknownType', + start, + end, + parent, + }; +} + +function deserializeCommentKind(pos) { + switch (uint8[pos]) { + case 0: + return 'Line'; + case 1: + return 'Block'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for CommentKind`); + } +} + +function deserializeComment(pos) { + let type = deserializeCommentKind(pos + 12), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type, + value: null, + start, + end, + parent, + }, + endCut = type === 'Line' ? 0 : 2; + node.value = sourceText.slice(start + 2, end - endCut); + parent = previousParent; + return node; +} + +function deserializeNameSpan(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + value: deserializeStr(pos + 8), + start, + end, + }; +} + +function deserializeImportEntry(pos) { + return { + importName: deserializeImportImportName(pos + 32), + localName: deserializeNameSpan(pos + 64), + isType: deserializeBool(pos + 88), + }; +} + +function deserializeImportImportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + }; + case 1: + return { + kind: 'NamespaceObject', + name: null, + start: null, + end: null, + }; + case 2: + var { start, end } = deserializeSpan(pos + 8); + return { + kind: 'Default', + name: null, + start, + end, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportImportName`); + } +} + +function deserializeExportEntry(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeOptionNameSpan(pos + 16), + importName: deserializeExportImportName(pos + 40), + exportName: deserializeExportExportName(pos + 72), + localName: deserializeExportLocalName(pos + 104), + isType: deserializeBool(pos + 136), + start, + end, + }; +} + +function deserializeExportImportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + }; + case 1: + return { + kind: 'All', + name: null, + start: null, + end: null, + }; + case 2: + return { + kind: 'AllButDefault', + name: null, + start: null, + end: null, + }; + case 3: + return { + kind: 'None', + name: null, + start: null, + end: null, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportImportName`); + } +} + +function deserializeExportExportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + }; + case 1: + var { start, end } = deserializeSpan(pos + 8); + return { + kind: 'Default', + name: null, + start, + end, + }; + case 2: + return { + kind: 'None', + name: null, + start: null, + end: null, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportExportName`); + } +} + +function deserializeExportLocalName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + }; + case 1: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Default', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + }; + case 2: + return { + kind: 'None', + name: null, + start: null, + end: null, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportLocalName`); + } +} + +function deserializeDynamicImport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeSpan(pos + 8), + start, + end, + }; +} + +function deserializeAssignmentOperator(pos) { + switch (uint8[pos]) { + case 0: + return '='; + case 1: + return '+='; + case 2: + return '-='; + case 3: + return '*='; + case 4: + return '/='; + case 5: + return '%='; + case 6: + return '**='; + case 7: + return '<<='; + case 8: + return '>>='; + case 9: + return '>>>='; + case 10: + return '|='; + case 11: + return '^='; + case 12: + return '&='; + case 13: + return '||='; + case 14: + return '&&='; + case 15: + return '??='; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentOperator`); + } +} + +function deserializeBinaryOperator(pos) { + switch (uint8[pos]) { + case 0: + return '=='; + case 1: + return '!='; + case 2: + return '==='; + case 3: + return '!=='; + case 4: + return '<'; + case 5: + return '<='; + case 6: + return '>'; + case 7: + return '>='; + case 8: + return '+'; + case 9: + return '-'; + case 10: + return '*'; + case 11: + return '/'; + case 12: + return '%'; + case 13: + return '**'; + case 14: + return '<<'; + case 15: + return '>>'; + case 16: + return '>>>'; + case 17: + return '|'; + case 18: + return '^'; + case 19: + return '&'; + case 20: + return 'in'; + case 21: + return 'instanceof'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for BinaryOperator`); + } +} + +function deserializeLogicalOperator(pos) { + switch (uint8[pos]) { + case 0: + return '||'; + case 1: + return '&&'; + case 2: + return '??'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for LogicalOperator`); + } +} + +function deserializeUnaryOperator(pos) { + switch (uint8[pos]) { + case 0: + return '+'; + case 1: + return '-'; + case 2: + return '!'; + case 3: + return '~'; + case 4: + return 'typeof'; + case 5: + return 'void'; + case 6: + return 'delete'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for UnaryOperator`); + } +} + +function deserializeUpdateOperator(pos) { + switch (uint8[pos]) { + case 0: + return '++'; + case 1: + return '--'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for UpdateOperator`); + } +} + +function deserializeSpan(pos) { + return { + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + }; +} + +function deserializeModuleKind(pos) { + switch (uint8[pos]) { + case 0: + return 'script'; + case 1: + return 'module'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ModuleKind`); + } +} + +function deserializeRawTransferData(pos) { + return { + program: deserializeProgram(pos), + comments: deserializeVecComment(pos + 128), + module: deserializeEcmaScriptModule(pos + 152), + errors: deserializeVecError(pos + 256), + }; +} + +function deserializeError(pos) { + return { + severity: deserializeErrorSeverity(pos + 72), + message: deserializeStr(pos), + labels: deserializeVecErrorLabel(pos + 16), + helpMessage: deserializeOptionStr(pos + 40), + codeframe: deserializeStr(pos + 56), + }; +} + +function deserializeErrorSeverity(pos) { + switch (uint8[pos]) { + case 0: + return 'Error'; + case 1: + return 'Warning'; + case 2: + return 'Advice'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ErrorSeverity`); + } +} + +function deserializeErrorLabel(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + message: deserializeOptionStr(pos + 8), + start, + end, + }; +} + +function deserializeEcmaScriptModule(pos) { + return { + hasModuleSyntax: deserializeBool(pos + 96), + staticImports: deserializeVecStaticImport(pos), + staticExports: deserializeVecStaticExport(pos + 24), + dynamicImports: deserializeVecDynamicImport(pos + 48), + importMetas: deserializeVecSpan(pos + 72), + }; +} + +function deserializeStaticImport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeNameSpan(pos + 8), + entries: deserializeVecImportEntry(pos + 32), + start, + end, + }; +} + +function deserializeStaticExport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + entries: deserializeVecExportEntry(pos + 8), + start, + end, + }; +} + +function deserializeU32(pos) { + return uint32[pos >> 2]; +} + +function deserializeU8(pos) { + return uint8[pos]; +} + +function deserializeStr(pos) { + let pos32 = pos >> 2, len = uint32[pos32 + 2]; + if (len === 0) return ''; + pos = uint32[pos32]; + if (sourceIsAscii && pos < sourceByteLen) return sourceText.substr(pos, len); + // Longer strings use `TextDecoder` + // TODO: Find best switch-over point + let end = pos + len; + if (len > 50) return decodeStr(uint8.subarray(pos, end)); + // Shorter strings decode by hand to avoid native call + let out = '', c; + do { + c = uint8[pos++]; + if (c < 128) out += fromCodePoint(c); + else { + out += decodeStr(uint8.subarray(pos - 1, end)); + break; + } + } while (pos < end); + return out; +} + +function deserializeVecComment(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeComment(pos)); + pos += 16; + } + return arr; +} + +function deserializeOptionHashbang(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeHashbang(pos); +} + +function deserializeVecDirective(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 72; + for (; pos !== endPos;) { + arr.push(deserializeDirective(pos)); + pos += 72; + } + return arr; +} + +function deserializeVecStatement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeStatement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxBooleanLiteral(pos) { + return deserializeBooleanLiteral(uint32[pos >> 2]); +} + +function deserializeBoxNullLiteral(pos) { + return deserializeNullLiteral(uint32[pos >> 2]); +} + +function deserializeBoxNumericLiteral(pos) { + return deserializeNumericLiteral(uint32[pos >> 2]); +} + +function deserializeBoxBigIntLiteral(pos) { + return deserializeBigIntLiteral(uint32[pos >> 2]); +} + +function deserializeBoxRegExpLiteral(pos) { + return deserializeRegExpLiteral(uint32[pos >> 2]); +} + +function deserializeBoxStringLiteral(pos) { + return deserializeStringLiteral(uint32[pos >> 2]); +} + +function deserializeBoxTemplateLiteral(pos) { + return deserializeTemplateLiteral(uint32[pos >> 2]); +} + +function deserializeBoxIdentifierReference(pos) { + return deserializeIdentifierReference(uint32[pos >> 2]); +} + +function deserializeBoxMetaProperty(pos) { + return deserializeMetaProperty(uint32[pos >> 2]); +} + +function deserializeBoxSuper(pos) { + return deserializeSuper(uint32[pos >> 2]); +} + +function deserializeBoxArrayExpression(pos) { + return deserializeArrayExpression(uint32[pos >> 2]); +} + +function deserializeBoxArrowFunctionExpression(pos) { + return deserializeArrowFunctionExpression(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentExpression(pos) { + return deserializeAssignmentExpression(uint32[pos >> 2]); +} + +function deserializeBoxAwaitExpression(pos) { + return deserializeAwaitExpression(uint32[pos >> 2]); +} + +function deserializeBoxBinaryExpression(pos) { + return deserializeBinaryExpression(uint32[pos >> 2]); +} + +function deserializeBoxCallExpression(pos) { + return deserializeCallExpression(uint32[pos >> 2]); +} + +function deserializeBoxChainExpression(pos) { + return deserializeChainExpression(uint32[pos >> 2]); +} + +function deserializeBoxClass(pos) { + return deserializeClass(uint32[pos >> 2]); +} + +function deserializeBoxConditionalExpression(pos) { + return deserializeConditionalExpression(uint32[pos >> 2]); +} + +function deserializeBoxFunction(pos) { + return deserializeFunction(uint32[pos >> 2]); +} + +function deserializeBoxImportExpression(pos) { + return deserializeImportExpression(uint32[pos >> 2]); +} + +function deserializeBoxLogicalExpression(pos) { + return deserializeLogicalExpression(uint32[pos >> 2]); +} + +function deserializeBoxNewExpression(pos) { + return deserializeNewExpression(uint32[pos >> 2]); +} + +function deserializeBoxObjectExpression(pos) { + return deserializeObjectExpression(uint32[pos >> 2]); +} + +function deserializeBoxParenthesizedExpression(pos) { + return deserializeParenthesizedExpression(uint32[pos >> 2]); +} + +function deserializeBoxSequenceExpression(pos) { + return deserializeSequenceExpression(uint32[pos >> 2]); +} + +function deserializeBoxTaggedTemplateExpression(pos) { + return deserializeTaggedTemplateExpression(uint32[pos >> 2]); +} + +function deserializeBoxThisExpression(pos) { + return deserializeThisExpression(uint32[pos >> 2]); +} + +function deserializeBoxUnaryExpression(pos) { + return deserializeUnaryExpression(uint32[pos >> 2]); +} + +function deserializeBoxUpdateExpression(pos) { + return deserializeUpdateExpression(uint32[pos >> 2]); +} + +function deserializeBoxYieldExpression(pos) { + return deserializeYieldExpression(uint32[pos >> 2]); +} + +function deserializeBoxPrivateInExpression(pos) { + return deserializePrivateInExpression(uint32[pos >> 2]); +} + +function deserializeBoxJSXElement(pos) { + return deserializeJSXElement(uint32[pos >> 2]); +} + +function deserializeBoxJSXFragment(pos) { + return deserializeJSXFragment(uint32[pos >> 2]); +} + +function deserializeBoxTSAsExpression(pos) { + return deserializeTSAsExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSSatisfiesExpression(pos) { + return deserializeTSSatisfiesExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeAssertion(pos) { + return deserializeTSTypeAssertion(uint32[pos >> 2]); +} + +function deserializeBoxTSNonNullExpression(pos) { + return deserializeTSNonNullExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSInstantiationExpression(pos) { + return deserializeTSInstantiationExpression(uint32[pos >> 2]); +} + +function deserializeBoxV8IntrinsicExpression(pos) { + return deserializeV8IntrinsicExpression(uint32[pos >> 2]); +} + +function deserializeVecArrayExpressionElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeArrayExpressionElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxSpreadElement(pos) { + return deserializeSpreadElement(uint32[pos >> 2]); +} + +function deserializeVecObjectPropertyKind(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeObjectPropertyKind(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxObjectProperty(pos) { + return deserializeObjectProperty(uint32[pos >> 2]); +} + +function deserializeBool(pos) { + return uint8[pos] === 1; +} + +function deserializeBoxIdentifierName(pos) { + return deserializeIdentifierName(uint32[pos >> 2]); +} + +function deserializeBoxPrivateIdentifier(pos) { + return deserializePrivateIdentifier(uint32[pos >> 2]); +} + +function deserializeVecTemplateElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 48; + for (; pos !== endPos;) { + arr.push(deserializeTemplateElement(pos)); + pos += 48; + } + return arr; +} + +function deserializeVecExpression(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeExpression(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSTypeParameterInstantiation(pos) { + return deserializeTSTypeParameterInstantiation(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeParameterInstantiation(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeParameterInstantiation(pos); +} + +function deserializeOptionStr(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeStr(pos); +} + +function deserializeBoxComputedMemberExpression(pos) { + return deserializeComputedMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxStaticMemberExpression(pos) { + return deserializeStaticMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxPrivateFieldExpression(pos) { + return deserializePrivateFieldExpression(uint32[pos >> 2]); +} + +function deserializeVecArgument(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeArgument(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxArrayAssignmentTarget(pos) { + return deserializeArrayAssignmentTarget(uint32[pos >> 2]); +} + +function deserializeBoxObjectAssignmentTarget(pos) { + return deserializeObjectAssignmentTarget(uint32[pos >> 2]); +} + +function deserializeOptionAssignmentTargetMaybeDefault(pos) { + if (uint8[pos] === 51) return null; + return deserializeAssignmentTargetMaybeDefault(pos); +} + +function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeOptionAssignmentTargetMaybeDefault(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxAssignmentTargetRest(pos) { + return deserializeAssignmentTargetRest(uint32[pos >> 2]); +} + +function deserializeOptionBoxAssignmentTargetRest(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxAssignmentTargetRest(pos); +} + +function deserializeVecAssignmentTargetProperty(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeAssignmentTargetProperty(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxAssignmentTargetWithDefault(pos) { + return deserializeAssignmentTargetWithDefault(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentTargetPropertyIdentifier(pos) { + return deserializeAssignmentTargetPropertyIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentTargetPropertyProperty(pos) { + return deserializeAssignmentTargetPropertyProperty(uint32[pos >> 2]); +} + +function deserializeOptionExpression(pos) { + if (uint8[pos] === 51) return null; + return deserializeExpression(pos); +} + +function deserializeBoxBlockStatement(pos) { + return deserializeBlockStatement(uint32[pos >> 2]); +} + +function deserializeBoxBreakStatement(pos) { + return deserializeBreakStatement(uint32[pos >> 2]); +} + +function deserializeBoxContinueStatement(pos) { + return deserializeContinueStatement(uint32[pos >> 2]); +} + +function deserializeBoxDebuggerStatement(pos) { + return deserializeDebuggerStatement(uint32[pos >> 2]); +} + +function deserializeBoxDoWhileStatement(pos) { + return deserializeDoWhileStatement(uint32[pos >> 2]); +} + +function deserializeBoxEmptyStatement(pos) { + return deserializeEmptyStatement(uint32[pos >> 2]); +} + +function deserializeBoxExpressionStatement(pos) { + return deserializeExpressionStatement(uint32[pos >> 2]); +} + +function deserializeBoxForInStatement(pos) { + return deserializeForInStatement(uint32[pos >> 2]); +} + +function deserializeBoxForOfStatement(pos) { + return deserializeForOfStatement(uint32[pos >> 2]); +} + +function deserializeBoxForStatement(pos) { + return deserializeForStatement(uint32[pos >> 2]); +} + +function deserializeBoxIfStatement(pos) { + return deserializeIfStatement(uint32[pos >> 2]); +} + +function deserializeBoxLabeledStatement(pos) { + return deserializeLabeledStatement(uint32[pos >> 2]); +} + +function deserializeBoxReturnStatement(pos) { + return deserializeReturnStatement(uint32[pos >> 2]); +} + +function deserializeBoxSwitchStatement(pos) { + return deserializeSwitchStatement(uint32[pos >> 2]); +} + +function deserializeBoxThrowStatement(pos) { + return deserializeThrowStatement(uint32[pos >> 2]); +} + +function deserializeBoxTryStatement(pos) { + return deserializeTryStatement(uint32[pos >> 2]); +} + +function deserializeBoxWhileStatement(pos) { + return deserializeWhileStatement(uint32[pos >> 2]); +} + +function deserializeBoxWithStatement(pos) { + return deserializeWithStatement(uint32[pos >> 2]); +} + +function deserializeBoxVariableDeclaration(pos) { + return deserializeVariableDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeAliasDeclaration(pos) { + return deserializeTSTypeAliasDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSInterfaceDeclaration(pos) { + return deserializeTSInterfaceDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSEnumDeclaration(pos) { + return deserializeTSEnumDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSModuleDeclaration(pos) { + return deserializeTSModuleDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSImportEqualsDeclaration(pos) { + return deserializeTSImportEqualsDeclaration(uint32[pos >> 2]); +} + +function deserializeVecVariableDeclarator(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 64; + for (; pos !== endPos;) { + arr.push(deserializeVariableDeclarator(pos)); + pos += 64; + } + return arr; +} + +function deserializeOptionStatement(pos) { + if (uint8[pos] === 70) return null; + return deserializeStatement(pos); +} + +function deserializeOptionForStatementInit(pos) { + if (uint8[pos] === 65) return null; + return deserializeForStatementInit(pos); +} + +function deserializeOptionLabelIdentifier(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeLabelIdentifier(pos); +} + +function deserializeVecSwitchCase(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 48; + for (; pos !== endPos;) { + arr.push(deserializeSwitchCase(pos)); + pos += 48; + } + return arr; +} + +function deserializeBoxCatchClause(pos) { + return deserializeCatchClause(uint32[pos >> 2]); +} + +function deserializeOptionBoxCatchClause(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxCatchClause(pos); +} + +function deserializeOptionBoxBlockStatement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxBlockStatement(pos); +} + +function deserializeOptionCatchParameter(pos) { + if (uint8[pos + 32] === 2) return null; + return deserializeCatchParameter(pos); +} + +function deserializeBoxTSTypeAnnotation(pos) { + return deserializeTSTypeAnnotation(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeAnnotation(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeAnnotation(pos); +} + +function deserializeBoxBindingIdentifier(pos) { + return deserializeBindingIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxObjectPattern(pos) { + return deserializeObjectPattern(uint32[pos >> 2]); +} + +function deserializeBoxArrayPattern(pos) { + return deserializeArrayPattern(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentPattern(pos) { + return deserializeAssignmentPattern(uint32[pos >> 2]); +} + +function deserializeVecBindingProperty(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 64; + for (; pos !== endPos;) { + arr.push(deserializeBindingProperty(pos)); + pos += 64; + } + return arr; +} + +function deserializeBoxBindingRestElement(pos) { + return deserializeBindingRestElement(uint32[pos >> 2]); +} + +function deserializeOptionBoxBindingRestElement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxBindingRestElement(pos); +} + +function deserializeOptionBindingPattern(pos) { + if (uint8[pos + 24] === 2) return null; + return deserializeBindingPattern(pos); +} + +function deserializeVecOptionBindingPattern(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeOptionBindingPattern(pos)); + pos += 32; + } + return arr; +} + +function deserializeOptionBindingIdentifier(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeBindingIdentifier(pos); +} + +function deserializeBoxTSTypeParameterDeclaration(pos) { + return deserializeTSTypeParameterDeclaration(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeParameterDeclaration(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeParameterDeclaration(pos); +} + +function deserializeBoxTSThisParameter(pos) { + return deserializeTSThisParameter(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSThisParameter(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSThisParameter(pos); +} + +function deserializeBoxFormalParameters(pos) { + return deserializeFormalParameters(uint32[pos >> 2]); +} + +function deserializeBoxFunctionBody(pos) { + return deserializeFunctionBody(uint32[pos >> 2]); +} + +function deserializeOptionBoxFunctionBody(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxFunctionBody(pos); +} + +function deserializeVecFormalParameter(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 72; + for (; pos !== endPos;) { + arr.push(deserializeFormalParameter(pos)); + pos += 72; + } + return arr; +} + +function deserializeVecDecorator(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 24; + for (; pos !== endPos;) { + arr.push(deserializeDecorator(pos)); + pos += 24; + } + return arr; +} + +function deserializeOptionTSAccessibility(pos) { + if (uint8[pos] === 3) return null; + return deserializeTSAccessibility(pos); +} + +function deserializeVecTSClassImplements(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeTSClassImplements(pos)); + pos += 32; + } + return arr; +} + +function deserializeBoxClassBody(pos) { + return deserializeClassBody(uint32[pos >> 2]); +} + +function deserializeVecClassElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeClassElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxStaticBlock(pos) { + return deserializeStaticBlock(uint32[pos >> 2]); +} + +function deserializeBoxMethodDefinition(pos) { + return deserializeMethodDefinition(uint32[pos >> 2]); +} + +function deserializeBoxPropertyDefinition(pos) { + return deserializePropertyDefinition(uint32[pos >> 2]); +} + +function deserializeBoxAccessorProperty(pos) { + return deserializeAccessorProperty(uint32[pos >> 2]); +} + +function deserializeBoxTSIndexSignature(pos) { + return deserializeTSIndexSignature(uint32[pos >> 2]); +} + +function deserializeBoxImportDeclaration(pos) { + return deserializeImportDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportAllDeclaration(pos) { + return deserializeExportAllDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportDefaultDeclaration(pos) { + return deserializeExportDefaultDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportNamedDeclaration(pos) { + return deserializeExportNamedDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSExportAssignment(pos) { + return deserializeTSExportAssignment(uint32[pos >> 2]); +} + +function deserializeBoxTSNamespaceExportDeclaration(pos) { + return deserializeTSNamespaceExportDeclaration(uint32[pos >> 2]); +} + +function deserializeOptionImportPhase(pos) { + if (uint8[pos] === 2) return null; + return deserializeImportPhase(pos); +} + +function deserializeVecImportDeclarationSpecifier(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeImportDeclarationSpecifier(pos)); + pos += 16; + } + return arr; +} + +function deserializeOptionVecImportDeclarationSpecifier(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeVecImportDeclarationSpecifier(pos); +} + +function deserializeBoxWithClause(pos) { + return deserializeWithClause(uint32[pos >> 2]); +} + +function deserializeOptionBoxWithClause(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxWithClause(pos); +} + +function deserializeBoxImportSpecifier(pos) { + return deserializeImportSpecifier(uint32[pos >> 2]); +} + +function deserializeBoxImportDefaultSpecifier(pos) { + return deserializeImportDefaultSpecifier(uint32[pos >> 2]); +} + +function deserializeBoxImportNamespaceSpecifier(pos) { + return deserializeImportNamespaceSpecifier(uint32[pos >> 2]); +} + +function deserializeVecImportAttribute(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 112; + for (; pos !== endPos;) { + arr.push(deserializeImportAttribute(pos)); + pos += 112; + } + return arr; +} + +function deserializeOptionDeclaration(pos) { + if (uint8[pos] === 31) return null; + return deserializeDeclaration(pos); +} + +function deserializeVecExportSpecifier(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 128; + for (; pos !== endPos;) { + arr.push(deserializeExportSpecifier(pos)); + pos += 128; + } + return arr; +} + +function deserializeOptionStringLiteral(pos) { + if (uint8[pos + 40] === 2) return null; + return deserializeStringLiteral(pos); +} + +function deserializeOptionModuleExportName(pos) { + if (uint8[pos] === 3) return null; + return deserializeModuleExportName(pos); +} + +function deserializeF64(pos) { + return float64[pos >> 3]; +} + +function deserializeBoxJSXOpeningElement(pos) { + return deserializeJSXOpeningElement(uint32[pos >> 2]); +} + +function deserializeVecJSXChild(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeJSXChild(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxJSXClosingElement(pos) { + return deserializeJSXClosingElement(uint32[pos >> 2]); +} + +function deserializeOptionBoxJSXClosingElement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxJSXClosingElement(pos); +} + +function deserializeVecJSXAttributeItem(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeJSXAttributeItem(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxJSXIdentifier(pos) { + return deserializeJSXIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxJSXNamespacedName(pos) { + return deserializeJSXNamespacedName(uint32[pos >> 2]); +} + +function deserializeBoxJSXMemberExpression(pos) { + return deserializeJSXMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxJSXAttribute(pos) { + return deserializeJSXAttribute(uint32[pos >> 2]); +} + +function deserializeBoxJSXSpreadAttribute(pos) { + return deserializeJSXSpreadAttribute(uint32[pos >> 2]); +} + +function deserializeOptionJSXAttributeValue(pos) { + if (uint8[pos] === 4) return null; + return deserializeJSXAttributeValue(pos); +} + +function deserializeBoxJSXExpressionContainer(pos) { + return deserializeJSXExpressionContainer(uint32[pos >> 2]); +} + +function deserializeBoxJSXText(pos) { + return deserializeJSXText(uint32[pos >> 2]); +} + +function deserializeBoxJSXSpreadChild(pos) { + return deserializeJSXSpreadChild(uint32[pos >> 2]); +} + +function deserializeVecTSEnumMember(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 40; + for (; pos !== endPos;) { + arr.push(deserializeTSEnumMember(pos)); + pos += 40; + } + return arr; +} + +function deserializeBoxTSAnyKeyword(pos) { + return deserializeTSAnyKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSBigIntKeyword(pos) { + return deserializeTSBigIntKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSBooleanKeyword(pos) { + return deserializeTSBooleanKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSIntrinsicKeyword(pos) { + return deserializeTSIntrinsicKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNeverKeyword(pos) { + return deserializeTSNeverKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNullKeyword(pos) { + return deserializeTSNullKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNumberKeyword(pos) { + return deserializeTSNumberKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSObjectKeyword(pos) { + return deserializeTSObjectKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSStringKeyword(pos) { + return deserializeTSStringKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSSymbolKeyword(pos) { + return deserializeTSSymbolKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSUndefinedKeyword(pos) { + return deserializeTSUndefinedKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSUnknownKeyword(pos) { + return deserializeTSUnknownKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSVoidKeyword(pos) { + return deserializeTSVoidKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSArrayType(pos) { + return deserializeTSArrayType(uint32[pos >> 2]); +} + +function deserializeBoxTSConditionalType(pos) { + return deserializeTSConditionalType(uint32[pos >> 2]); +} + +function deserializeBoxTSConstructorType(pos) { + return deserializeTSConstructorType(uint32[pos >> 2]); +} + +function deserializeBoxTSFunctionType(pos) { + return deserializeTSFunctionType(uint32[pos >> 2]); +} + +function deserializeBoxTSImportType(pos) { + return deserializeTSImportType(uint32[pos >> 2]); +} + +function deserializeBoxTSIndexedAccessType(pos) { + return deserializeTSIndexedAccessType(uint32[pos >> 2]); +} + +function deserializeBoxTSInferType(pos) { + return deserializeTSInferType(uint32[pos >> 2]); +} + +function deserializeBoxTSIntersectionType(pos) { + return deserializeTSIntersectionType(uint32[pos >> 2]); +} + +function deserializeBoxTSLiteralType(pos) { + return deserializeTSLiteralType(uint32[pos >> 2]); +} + +function deserializeBoxTSMappedType(pos) { + return deserializeTSMappedType(uint32[pos >> 2]); +} + +function deserializeBoxTSNamedTupleMember(pos) { + return deserializeTSNamedTupleMember(uint32[pos >> 2]); +} + +function deserializeBoxTSTemplateLiteralType(pos) { + return deserializeTSTemplateLiteralType(uint32[pos >> 2]); +} + +function deserializeBoxTSThisType(pos) { + return deserializeTSThisType(uint32[pos >> 2]); +} + +function deserializeBoxTSTupleType(pos) { + return deserializeTSTupleType(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeLiteral(pos) { + return deserializeTSTypeLiteral(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeOperator(pos) { + return deserializeTSTypeOperator(uint32[pos >> 2]); +} + +function deserializeBoxTSTypePredicate(pos) { + return deserializeTSTypePredicate(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeQuery(pos) { + return deserializeTSTypeQuery(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeReference(pos) { + return deserializeTSTypeReference(uint32[pos >> 2]); +} + +function deserializeBoxTSUnionType(pos) { + return deserializeTSUnionType(uint32[pos >> 2]); +} + +function deserializeBoxTSParenthesizedType(pos) { + return deserializeTSParenthesizedType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocNullableType(pos) { + return deserializeJSDocNullableType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocNonNullableType(pos) { + return deserializeJSDocNonNullableType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocUnknownType(pos) { + return deserializeJSDocUnknownType(uint32[pos >> 2]); +} + +function deserializeVecTSType(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSType(pos)); + pos += 16; + } + return arr; +} + +function deserializeVecTSTupleElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSTupleElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSOptionalType(pos) { + return deserializeTSOptionalType(uint32[pos >> 2]); +} + +function deserializeBoxTSRestType(pos) { + return deserializeTSRestType(uint32[pos >> 2]); +} + +function deserializeBoxTSQualifiedName(pos) { + return deserializeTSQualifiedName(uint32[pos >> 2]); +} + +function deserializeOptionTSType(pos) { + if (uint8[pos] === 38) return null; + return deserializeTSType(pos); +} + +function deserializeVecTSTypeParameter(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 80; + for (; pos !== endPos;) { + arr.push(deserializeTSTypeParameter(pos)); + pos += 80; + } + return arr; +} + +function deserializeVecTSInterfaceHeritage(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeTSInterfaceHeritage(pos)); + pos += 32; + } + return arr; +} + +function deserializeBoxTSInterfaceBody(pos) { + return deserializeTSInterfaceBody(uint32[pos >> 2]); +} + +function deserializeVecTSSignature(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSSignature(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSPropertySignature(pos) { + return deserializeTSPropertySignature(uint32[pos >> 2]); +} + +function deserializeBoxTSCallSignatureDeclaration(pos) { + return deserializeTSCallSignatureDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSConstructSignatureDeclaration(pos) { + return deserializeTSConstructSignatureDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSMethodSignature(pos) { + return deserializeTSMethodSignature(uint32[pos >> 2]); +} + +function deserializeVecTSIndexSignatureName(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeTSIndexSignatureName(pos)); + pos += 32; + } + return arr; +} + +function deserializeOptionTSModuleDeclarationBody(pos) { + if (uint8[pos] === 2) return null; + return deserializeTSModuleDeclarationBody(pos); +} + +function deserializeBoxTSModuleBlock(pos) { + return deserializeTSModuleBlock(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeParameter(pos) { + return deserializeTSTypeParameter(uint32[pos >> 2]); +} + +function deserializeOptionBoxObjectExpression(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxObjectExpression(pos); +} + +function deserializeOptionTSImportTypeQualifier(pos) { + if (uint8[pos] === 2) return null; + return deserializeTSImportTypeQualifier(pos); +} + +function deserializeBoxTSImportTypeQualifiedName(pos) { + return deserializeTSImportTypeQualifiedName(uint32[pos >> 2]); +} + +function deserializeOptionTSMappedTypeModifierOperator(pos) { + if (uint8[pos] === 3) return null; + return deserializeTSMappedTypeModifierOperator(pos); +} + +function deserializeBoxTSExternalModuleReference(pos) { + return deserializeTSExternalModuleReference(uint32[pos >> 2]); +} + +function deserializeOptionNameSpan(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeNameSpan(pos); +} + +function deserializeVecError(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 80; + for (; pos !== endPos;) { + arr.push(deserializeError(pos)); + pos += 80; + } + return arr; +} + +function deserializeVecErrorLabel(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 24; + for (; pos !== endPos;) { + arr.push(deserializeErrorLabel(pos)); + pos += 24; + } + return arr; +} + +function deserializeVecStaticImport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 56; + for (; pos !== endPos;) { + arr.push(deserializeStaticImport(pos)); + pos += 56; + } + return arr; +} + +function deserializeVecStaticExport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeStaticExport(pos)); + pos += 32; + } + return arr; +} + +function deserializeVecDynamicImport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeDynamicImport(pos)); + pos += 16; + } + return arr; +} + +function deserializeVecSpan(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 8; + for (; pos !== endPos;) { + arr.push(deserializeSpan(pos)); + pos += 8; + } + return arr; +} + +function deserializeVecImportEntry(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 96; + for (; pos !== endPos;) { + arr.push(deserializeImportEntry(pos)); + pos += 96; + } + return arr; +} + +function deserializeVecExportEntry(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 144; + for (; pos !== endPos;) { + arr.push(deserializeExportEntry(pos)); + pos += 144; + } + return arr; +} diff --git a/napi/parser/generated/deserialize/ts_range.js b/napi/parser/generated/deserialize/ts_range.js index a32e97a2b21a0..eaffe148e721d 100644 --- a/napi/parser/generated/deserialize/ts_range.js +++ b/napi/parser/generated/deserialize/ts_range.js @@ -31,29 +31,35 @@ function deserializeWith(buffer, sourceTextInput, sourceByteLenInput, deserializ } function deserializeProgram(pos) { - let body = deserializeVecDirective(pos + 72); + let end = deserializeU32(pos + 4), + program = { + type: 'Program', + body: null, + sourceType: deserializeModuleKind(pos + 125), + hashbang: null, + start: 0, + end, + range: [0, end], + }; + program.hashbang = deserializeOptionHashbang(pos + 48); + let body = program.body = deserializeVecDirective(pos + 72); body.push(...deserializeVecStatement(pos + 96)); - let end = deserializeU32(pos + 4), start; - if (body.length > 0) { - let first = body[0]; - start = first.start; - if (first.type === 'ExportNamedDeclaration' || first.type === 'ExportDefaultDeclaration') { - let { declaration } = first; - if (declaration !== null && declaration.type === 'ClassDeclaration' && declaration.decorators.length > 0) { - let decoratorStart = declaration.decorators[0].start; - decoratorStart < start && (start = decoratorStart); + { + let start; + if (body.length > 0) { + let first = body[0]; + start = first.start; + if (first.type === 'ExportNamedDeclaration' || first.type === 'ExportDefaultDeclaration') { + let { declaration } = first; + if (declaration !== null && declaration.type === 'ClassDeclaration' && declaration.decorators.length > 0) { + let decoratorStart = declaration.decorators[0].start; + decoratorStart < start && (start = decoratorStart); + } } - } - } else start = end; - return { - type: 'Program', - body, - sourceType: deserializeModuleKind(pos + 125), - hashbang: deserializeOptionHashbang(pos + 48), - start, - end, - range: [start, end], - }; + } else start = end; + program.start = program.range[0] = start; + } + return program; } function deserializeExpression(pos) { @@ -150,59 +156,79 @@ function deserializeExpression(pos) { } function deserializeIdentifierName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeIdentifierReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeBindingIdentifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeLabelIdentifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeThisExpression(pos) { @@ -216,14 +242,17 @@ function deserializeThisExpression(pos) { } function deserializeArrayExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ArrayExpression', - elements: deserializeVecArrayExpressionElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ArrayExpression', + elements: null, + start, + end, + range: [start, end], + }; + node.elements = deserializeVecArrayExpressionElement(pos + 8); + return node; } function deserializeArrayExpressionElement(pos) { @@ -328,14 +357,17 @@ function deserializeElision(pos) { } function deserializeObjectExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ObjectExpression', - properties: deserializeVecObjectPropertyKind(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ObjectExpression', + properties: null, + start, + end, + range: [start, end], + }; + node.properties = deserializeVecObjectPropertyKind(pos + 8); + return node; } function deserializeObjectPropertyKind(pos) { @@ -350,20 +382,25 @@ function deserializeObjectPropertyKind(pos) { } function deserializeObjectProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: deserializePropertyKind(pos + 40), - key: deserializePropertyKey(pos + 8), - value: deserializeExpression(pos + 24), - method: deserializeBool(pos + 41), - shorthand: deserializeBool(pos + 42), - computed: deserializeBool(pos + 43), - optional: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: deserializePropertyKind(pos + 40), + key: null, + value: null, + method: deserializeBool(pos + 41), + shorthand: deserializeBool(pos + 42), + computed: deserializeBool(pos + 43), + optional: null, + start, + end, + range: [start, end], + }; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeExpression(pos + 24); + node.optional = false; + return node; } function deserializePropertyKey(pos) { @@ -477,28 +514,37 @@ function deserializePropertyKind(pos) { } function deserializeTemplateLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TemplateLiteral', - quasis: deserializeVecTemplateElement(pos + 8), - expressions: deserializeVecExpression(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TemplateLiteral', + quasis: null, + expressions: null, + start, + end, + range: [start, end], + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.expressions = deserializeVecExpression(pos + 32); + return node; } function deserializeTaggedTemplateExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TaggedTemplateExpression', - tag: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - quasi: deserializeTemplateLiteral(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TaggedTemplateExpression', + tag: null, + typeArguments: null, + quasi: null, + start, + end, + range: [start, end], + }; + node.tag = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.quasi = deserializeTemplateLiteral(pos + 32); + return node; } function deserializeTemplateElement(pos) { @@ -526,95 +572,127 @@ function deserializeTemplateElementValue(pos) { } function deserializeComputedMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializeExpression(pos + 24), - optional: deserializeBool(pos + 40), - computed: true, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 40), + computed: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeExpression(pos + 24); + node.computed = true; + return node; } function deserializeStaticMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializeIdentifierName(pos + 24), - optional: deserializeBool(pos + 48), - computed: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeIdentifierName(pos + 24); + node.computed = false; + return node; } function deserializePrivateFieldExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializePrivateIdentifier(pos + 24), - optional: deserializeBool(pos + 48), - computed: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializePrivateIdentifier(pos + 24); + node.computed = false; + return node; } function deserializeCallExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'CallExpression', - callee: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - arguments: deserializeVecArgument(pos + 32), - optional: deserializeBool(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'CallExpression', + callee: null, + typeArguments: null, + arguments: null, + optional: deserializeBool(pos + 56), + start, + end, + range: [start, end], + }; + node.callee = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeNewExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'NewExpression', - callee: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - arguments: deserializeVecArgument(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'NewExpression', + callee: null, + typeArguments: null, + arguments: null, + start, + end, + range: [start, end], + }; + node.callee = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeMetaProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MetaProperty', - meta: deserializeIdentifierName(pos + 8), - property: deserializeIdentifierName(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MetaProperty', + meta: null, + property: null, + start, + end, + range: [start, end], + }; + node.meta = deserializeIdentifierName(pos + 8); + node.property = deserializeIdentifierName(pos + 32); + return node; } function deserializeSpreadElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SpreadElement', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SpreadElement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeArgument(pos) { @@ -713,94 +791,123 @@ function deserializeArgument(pos) { } function deserializeUpdateExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'UpdateExpression', - operator: deserializeUpdateOperator(pos + 24), - prefix: deserializeBool(pos + 25), - argument: deserializeSimpleAssignmentTarget(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'UpdateExpression', + operator: deserializeUpdateOperator(pos + 24), + prefix: deserializeBool(pos + 25), + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeSimpleAssignmentTarget(pos + 8); + return node; } function deserializeUnaryExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'UnaryExpression', - operator: deserializeUnaryOperator(pos + 24), - argument: deserializeExpression(pos + 8), - prefix: true, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'UnaryExpression', + operator: deserializeUnaryOperator(pos + 24), + argument: null, + prefix: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + node.prefix = true; + return node; } function deserializeBinaryExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BinaryExpression', - left: deserializeExpression(pos + 8), - operator: deserializeBinaryOperator(pos + 40), - right: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BinaryExpression', + left: null, + operator: deserializeBinaryOperator(pos + 40), + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializePrivateInExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BinaryExpression', - left: deserializePrivateIdentifier(pos + 8), - operator: 'in', - right: deserializeExpression(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BinaryExpression', + left: null, + operator: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializePrivateIdentifier(pos + 8); + node.operator = 'in'; + node.right = deserializeExpression(pos + 32); + return node; } function deserializeLogicalExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'LogicalExpression', - left: deserializeExpression(pos + 8), - operator: deserializeLogicalOperator(pos + 40), - right: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'LogicalExpression', + left: null, + operator: deserializeLogicalOperator(pos + 40), + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeConditionalExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ConditionalExpression', - test: deserializeExpression(pos + 8), - consequent: deserializeExpression(pos + 24), - alternate: deserializeExpression(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ConditionalExpression', + test: null, + consequent: null, + alternate: null, + start, + end, + range: [start, end], + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeExpression(pos + 24); + node.alternate = deserializeExpression(pos + 40); + return node; } function deserializeAssignmentExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentExpression', - operator: deserializeAssignmentOperator(pos + 40), - left: deserializeAssignmentTarget(pos + 8), - right: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentExpression', + operator: deserializeAssignmentOperator(pos + 40), + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeAssignmentTarget(pos) { @@ -856,52 +963,69 @@ function deserializeSimpleAssignmentTarget(pos) { function deserializeArrayAssignmentTarget(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrayPattern', + decorators: null, + elements: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }, elements = deserializeVecOptionAssignmentTargetMaybeDefault(pos + 8), rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); rest !== null && elements.push(rest); - return { - type: 'ArrayPattern', - decorators: [], - elements, - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + node.decorators = []; + node.elements = elements; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeObjectAssignmentTarget(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ObjectPattern', + decorators: null, + properties: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }, properties = deserializeVecAssignmentTargetProperty(pos + 8), rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); rest !== null && properties.push(rest); - return { - type: 'ObjectPattern', - decorators: [], - properties, - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + node.decorators = []; + node.properties = properties; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeAssignmentTargetRest(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'RestElement', - decorators: [], - argument: deserializeAssignmentTarget(pos + 8), - optional: false, - typeAnnotation: null, - value: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'RestElement', + decorators: null, + argument: null, + optional: null, + typeAnnotation: null, + value: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.argument = deserializeAssignmentTarget(pos + 8); + node.optional = false; + node.typeAnnotation = null; + node.value = null; + return node; } function deserializeAssignmentTargetMaybeDefault(pos) { @@ -934,18 +1058,25 @@ function deserializeAssignmentTargetMaybeDefault(pos) { } function deserializeAssignmentTargetWithDefault(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentPattern', - decorators: [], - left: deserializeAssignmentTarget(pos + 8), - right: deserializeExpression(pos + 24), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentPattern', + decorators: null, + left: null, + right: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeAssignmentTargetProperty(pos) { @@ -960,62 +1091,82 @@ function deserializeAssignmentTargetProperty(pos) { } function deserializeAssignmentTargetPropertyIdentifier(pos) { - let key = deserializeIdentifierReference(pos + 8), - start = deserializeU32(pos), + let start = deserializeU32(pos), end = deserializeU32(pos + 4), - init = deserializeOptionExpression(pos + 40), - keyCopy = { ...key }; - return { - type: 'Property', - kind: 'init', - key, - value: init === null ? keyCopy : { - type: 'AssignmentPattern', - decorators: [], - left: keyCopy, - right: init, - optional: false, - typeAnnotation: null, + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: null, + optional: null, start, end, range: [start, end], }, - method: false, - shorthand: true, - computed: false, + key = deserializeIdentifierReference(pos + 8), + init = deserializeOptionExpression(pos + 40), + value = { ...key }; + init !== null && (value = { + type: 'AssignmentPattern', + decorators: [], + left: value, + right: init, optional: false, + typeAnnotation: null, start, end, range: [start, end], - }; + }); + node.kind = 'init'; + node.key = key; + node.value = value; + node.method = false; + node.shorthand = true; + node.computed = false; + node.optional = false; + return node; } function deserializeAssignmentTargetPropertyProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: 'init', - key: deserializePropertyKey(pos + 8), - value: deserializeAssignmentTargetMaybeDefault(pos + 24), - method: false, - shorthand: false, - computed: deserializeBool(pos + 40), - optional: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: deserializeBool(pos + 40), + optional: null, + start, + end, + range: [start, end], + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeAssignmentTargetMaybeDefault(pos + 24); + node.method = false; + node.shorthand = false; + node.optional = false; + return node; } function deserializeSequenceExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SequenceExpression', - expressions: deserializeVecExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SequenceExpression', + expressions: null, + start, + end, + range: [start, end], + }; + node.expressions = deserializeVecExpression(pos + 8); + return node; } function deserializeSuper(pos) { @@ -1029,25 +1180,31 @@ function deserializeSuper(pos) { } function deserializeAwaitExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AwaitExpression', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AwaitExpression', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeChainExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ChainExpression', - expression: deserializeChainElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ChainExpression', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeChainElement(pos + 8); + return node; } function deserializeChainElement(pos) { @@ -1068,16 +1225,17 @@ function deserializeChainElement(pos) { } function deserializeParenthesizedExpression(pos) { - let node = deserializeExpression(pos + 8); + let node; { let start, end; node = { type: 'ParenthesizedExpression', - expression: node, + expression: null, start: start = deserializeU32(pos), end: end = deserializeU32(pos + 4), range: [start, end], }; + node.expression = deserializeExpression(pos + 8); } return node; } @@ -1154,15 +1312,18 @@ function deserializeStatement(pos) { } function deserializeDirective(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExpressionStatement', - expression: deserializeStringLiteral(pos + 8), - directive: deserializeStr(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExpressionStatement', + expression: null, + directive: deserializeStr(pos + 56), + start, + end, + range: [start, end], + }; + node.expression = deserializeStringLiteral(pos + 8); + return node; } function deserializeHashbang(pos) { @@ -1177,14 +1338,17 @@ function deserializeHashbang(pos) { } function deserializeBlockStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BlockStatement', - body: deserializeVecStatement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BlockStatement', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecStatement(pos + 8); + return node; } function deserializeDeclaration(pos) { @@ -1211,16 +1375,19 @@ function deserializeDeclaration(pos) { } function deserializeVariableDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'VariableDeclaration', - kind: deserializeVariableDeclarationKind(pos + 32), - declarations: deserializeVecVariableDeclarator(pos + 8), - declare: deserializeBool(pos + 33), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'VariableDeclaration', + kind: deserializeVariableDeclarationKind(pos + 32), + declarations: null, + declare: deserializeBool(pos + 33), + start, + end, + range: [start, end], + }; + node.declarations = deserializeVecVariableDeclarator(pos + 8); + return node; } function deserializeVariableDeclarationKind(pos) { @@ -1241,16 +1408,20 @@ function deserializeVariableDeclarationKind(pos) { } function deserializeVariableDeclarator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'VariableDeclarator', - id: deserializeBindingPattern(pos + 8), - init: deserializeOptionExpression(pos + 40), - definite: deserializeBool(pos + 57), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'VariableDeclarator', + id: null, + init: null, + definite: deserializeBool(pos + 57), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingPattern(pos + 8); + node.init = deserializeOptionExpression(pos + 40); + return node; } function deserializeEmptyStatement(pos) { @@ -1264,66 +1435,89 @@ function deserializeEmptyStatement(pos) { } function deserializeExpressionStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExpressionStatement', - expression: deserializeExpression(pos + 8), - directive: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExpressionStatement', + expression: null, + directive: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.directive = null; + return node; } function deserializeIfStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'IfStatement', - test: deserializeExpression(pos + 8), - consequent: deserializeStatement(pos + 24), - alternate: deserializeOptionStatement(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'IfStatement', + test: null, + consequent: null, + alternate: null, + start, + end, + range: [start, end], + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeStatement(pos + 24); + node.alternate = deserializeOptionStatement(pos + 40); + return node; } function deserializeDoWhileStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'DoWhileStatement', - body: deserializeStatement(pos + 8), - test: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'DoWhileStatement', + body: null, + test: null, + start, + end, + range: [start, end], + }; + node.body = deserializeStatement(pos + 8); + node.test = deserializeExpression(pos + 24); + return node; } function deserializeWhileStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'WhileStatement', - test: deserializeExpression(pos + 8), - body: deserializeStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'WhileStatement', + test: null, + body: null, + start, + end, + range: [start, end], + }; + node.test = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + return node; } function deserializeForStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForStatement', - init: deserializeOptionForStatementInit(pos + 8), - test: deserializeOptionExpression(pos + 24), - update: deserializeOptionExpression(pos + 40), - body: deserializeStatement(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForStatement', + init: null, + test: null, + update: null, + body: null, + start, + end, + range: [start, end], + }; + node.init = deserializeOptionForStatementInit(pos + 8); + node.test = deserializeOptionExpression(pos + 24); + node.update = deserializeOptionExpression(pos + 40); + node.body = deserializeStatement(pos + 56); + return node; } function deserializeForStatementInit(pos) { @@ -1422,16 +1616,21 @@ function deserializeForStatementInit(pos) { } function deserializeForInStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForInStatement', - left: deserializeForStatementLeft(pos + 8), - right: deserializeExpression(pos + 24), - body: deserializeStatement(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForInStatement', + left: null, + right: null, + body: null, + start, + end, + range: [start, end], + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + return node; } function deserializeForStatementLeft(pos) { @@ -1464,134 +1663,176 @@ function deserializeForStatementLeft(pos) { } function deserializeForOfStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForOfStatement', - await: deserializeBool(pos + 60), - left: deserializeForStatementLeft(pos + 8), - right: deserializeExpression(pos + 24), - body: deserializeStatement(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForOfStatement', + await: deserializeBool(pos + 60), + left: null, + right: null, + body: null, + start, + end, + range: [start, end], + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + return node; } function deserializeContinueStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ContinueStatement', - label: deserializeOptionLabelIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ContinueStatement', + label: null, + start, + end, + range: [start, end], + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + return node; } function deserializeBreakStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BreakStatement', - label: deserializeOptionLabelIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BreakStatement', + label: null, + start, + end, + range: [start, end], + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + return node; } function deserializeReturnStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ReturnStatement', - argument: deserializeOptionExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ReturnStatement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeOptionExpression(pos + 8); + return node; } function deserializeWithStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'WithStatement', - object: deserializeExpression(pos + 8), - body: deserializeStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'WithStatement', + object: null, + body: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + return node; } function deserializeSwitchStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SwitchStatement', - discriminant: deserializeExpression(pos + 8), - cases: deserializeVecSwitchCase(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SwitchStatement', + discriminant: null, + cases: null, + start, + end, + range: [start, end], + }; + node.discriminant = deserializeExpression(pos + 8); + node.cases = deserializeVecSwitchCase(pos + 24); + return node; } function deserializeSwitchCase(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SwitchCase', - test: deserializeOptionExpression(pos + 8), - consequent: deserializeVecStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SwitchCase', + test: null, + consequent: null, + start, + end, + range: [start, end], + }; + node.test = deserializeOptionExpression(pos + 8); + node.consequent = deserializeVecStatement(pos + 24); + return node; } function deserializeLabeledStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'LabeledStatement', - label: deserializeLabelIdentifier(pos + 8), - body: deserializeStatement(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'LabeledStatement', + label: null, + body: null, + start, + end, + range: [start, end], + }; + node.label = deserializeLabelIdentifier(pos + 8); + node.body = deserializeStatement(pos + 32); + return node; } function deserializeThrowStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ThrowStatement', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ThrowStatement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeTryStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TryStatement', - block: deserializeBoxBlockStatement(pos + 8), - handler: deserializeOptionBoxCatchClause(pos + 16), - finalizer: deserializeOptionBoxBlockStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TryStatement', + block: null, + handler: null, + finalizer: null, + start, + end, + range: [start, end], + }; + node.block = deserializeBoxBlockStatement(pos + 8); + node.handler = deserializeOptionBoxCatchClause(pos + 16); + node.finalizer = deserializeOptionBoxBlockStatement(pos + 24); + return node; } function deserializeCatchClause(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'CatchClause', - param: deserializeOptionCatchParameter(pos + 8), - body: deserializeBoxBlockStatement(pos + 48), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'CatchClause', + param: null, + body: null, + start, + end, + range: [start, end], + }; + node.param = deserializeOptionCatchParameter(pos + 8); + node.body = deserializeBoxBlockStatement(pos + 48); + return node; } function deserializeCatchParameter(pos) { @@ -1631,109 +1872,149 @@ function deserializeBindingPatternKind(pos) { } function deserializeAssignmentPattern(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentPattern', - decorators: [], - left: deserializeBindingPattern(pos + 8), - right: deserializeExpression(pos + 40), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentPattern', + decorators: null, + left: null, + right: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.left = deserializeBindingPattern(pos + 8); + node.right = deserializeExpression(pos + 40); + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeObjectPattern(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ObjectPattern', + decorators: null, + properties: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }, properties = deserializeVecBindingProperty(pos + 8), rest = deserializeOptionBoxBindingRestElement(pos + 32); rest !== null && properties.push(rest); - return { - type: 'ObjectPattern', - decorators: [], - properties, - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + node.decorators = []; + node.properties = properties; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeBindingProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: 'init', - key: deserializePropertyKey(pos + 8), - value: deserializeBindingPattern(pos + 24), - method: false, - shorthand: deserializeBool(pos + 56), - computed: deserializeBool(pos + 57), - optional: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: deserializeBool(pos + 56), + computed: deserializeBool(pos + 57), + optional: null, + start, + end, + range: [start, end], + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeBindingPattern(pos + 24); + node.method = false; + node.optional = false; + return node; } function deserializeArrayPattern(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrayPattern', + decorators: null, + elements: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }, elements = deserializeVecOptionBindingPattern(pos + 8), rest = deserializeOptionBoxBindingRestElement(pos + 32); rest !== null && elements.push(rest); - return { - type: 'ArrayPattern', - decorators: [], - elements, - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + node.decorators = []; + node.elements = elements; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeBindingRestElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'RestElement', - decorators: [], - argument: deserializeBindingPattern(pos + 8), - optional: false, - typeAnnotation: null, - value: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'RestElement', + decorators: null, + argument: null, + optional: null, + typeAnnotation: null, + value: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.argument = deserializeBindingPattern(pos + 8); + node.optional = false; + node.typeAnnotation = null; + node.value = null; + return node; } function deserializeFunction(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), params = deserializeBoxFormalParameters(pos + 56); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeFunctionType(pos + 84), + id: null, + generator: deserializeBool(pos + 85), + async: deserializeBool(pos + 86), + declare: deserializeBool(pos + 87), + typeParameters: null, + params: null, + returnType: null, + body: null, + expression: null, + start, + end, + range: [start, end], + }, + params = deserializeBoxFormalParameters(pos + 56); { let thisParam = deserializeOptionBoxTSThisParameter(pos + 48); thisParam !== null && params.unshift(thisParam); } - return { - type: deserializeFunctionType(pos + 84), - id: deserializeOptionBindingIdentifier(pos + 8), - generator: deserializeBool(pos + 85), - async: deserializeBool(pos + 86), - declare: deserializeBool(pos + 87), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 64), - body: deserializeOptionBoxFunctionBody(pos + 72), - expression: false, - start, - end, - range: [start, end], - }; + node.id = deserializeOptionBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 64); + node.body = deserializeOptionBoxFunctionBody(pos + 72); + node.expression = false; + return node; } function deserializeFunctionType(pos) { @@ -1755,18 +2036,22 @@ function deserializeFormalParameters(pos) { let params = deserializeVecFormalParameter(pos + 8); if (uint32[pos + 32 >> 2] !== 0 && uint32[pos + 36 >> 2] !== 0) { pos = uint32[pos + 32 >> 2]; - let start, end; - params.push({ - type: 'RestElement', - decorators: [], - argument: deserializeBindingPatternKind(pos + 8), - optional: deserializeBool(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - value: null, - start: start = deserializeU32(pos), - end: end = deserializeU32(pos + 4), - range: [start, end], - }); + let start, + end, + rest = { + type: 'RestElement', + decorators: [], + argument: null, + optional: deserializeBool(pos + 32), + typeAnnotation: null, + value: null, + start: start = deserializeU32(pos), + end: end = deserializeU32(pos + 4), + range: [start, end], + }; + rest.argument = deserializeBindingPatternKind(pos + 8); + rest.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + params.push(rest); } return params; } @@ -1787,82 +2072,108 @@ function deserializeFormalParameter(pos) { param = { type: 'TSParameterProperty', accessibility, - decorators: deserializeVecDecorator(pos + 8), + decorators: null, override, - parameter: deserializeBindingPattern(pos + 32), + parameter: null, readonly, static: false, start: start = deserializeU32(pos), end: end = deserializeU32(pos + 4), range: [start, end], }; + param.decorators = deserializeVecDecorator(pos + 8); + param.parameter = deserializeBindingPattern(pos + 32); } } return param; } function deserializeFunctionBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), body = deserializeVecDirective(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BlockStatement', + body: null, + start, + end, + range: [start, end], + }, + body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); - return { - type: 'BlockStatement', - body, - start, - end, - range: [start, end], - }; + node.body = body; + return node; } function deserializeArrowFunctionExpression(pos) { let expression = deserializeBool(pos + 44), start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrowFunctionExpression', + expression, + async: deserializeBool(pos + 45), + typeParameters: null, + params: null, + returnType: null, + body: null, + id: null, + generator: null, + start, + end, + range: [start, end], + }, body = deserializeBoxFunctionBody(pos + 32); - return { - type: 'ArrowFunctionExpression', - expression, - async: deserializeBool(pos + 45), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 24), - body: expression ? body.body[0].expression : body, - id: null, - generator: false, - start, - end, - range: [start, end], - }; + expression === true && (body = body.body[0].expression); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.body = body; + node.id = null; + node.generator = false; + return node; } function deserializeYieldExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'YieldExpression', - delegate: deserializeBool(pos + 24), - argument: deserializeOptionExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'YieldExpression', + delegate: deserializeBool(pos + 24), + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeOptionExpression(pos + 8); + return node; } function deserializeClass(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeClassType(pos + 132), - decorators: deserializeVecDecorator(pos + 8), - id: deserializeOptionBindingIdentifier(pos + 32), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 64), - superClass: deserializeOptionExpression(pos + 72), - superTypeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 88), - implements: deserializeVecTSClassImplements(pos + 96), - body: deserializeBoxClassBody(pos + 120), - abstract: deserializeBool(pos + 133), - declare: deserializeBool(pos + 134), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeClassType(pos + 132), + decorators: null, + id: null, + typeParameters: null, + superClass: null, + superTypeArguments: null, + implements: null, + body: null, + abstract: deserializeBool(pos + 133), + declare: deserializeBool(pos + 134), + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.id = deserializeOptionBindingIdentifier(pos + 32); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 64); + node.superClass = deserializeOptionExpression(pos + 72); + node.superTypeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 88); + node.implements = deserializeVecTSClassImplements(pos + 96); + node.body = deserializeBoxClassBody(pos + 120); + return node; } function deserializeClassType(pos) { @@ -1877,14 +2188,17 @@ function deserializeClassType(pos) { } function deserializeClassBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ClassBody', - body: deserializeVecClassElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ClassBody', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecClassElement(pos + 8); + return node; } function deserializeClassElement(pos) { @@ -1905,22 +2219,27 @@ function deserializeClassElement(pos) { } function deserializeMethodDefinition(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeMethodDefinitionType(pos + 56), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - value: deserializeBoxFunction(pos + 48), - kind: deserializeMethodDefinitionKind(pos + 57), - computed: deserializeBool(pos + 58), - static: deserializeBool(pos + 59), - override: deserializeBool(pos + 60), - optional: deserializeBool(pos + 61), - accessibility: deserializeOptionTSAccessibility(pos + 62), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeMethodDefinitionType(pos + 56), + decorators: null, + key: null, + value: null, + kind: deserializeMethodDefinitionKind(pos + 57), + computed: deserializeBool(pos + 58), + static: deserializeBool(pos + 59), + override: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + accessibility: deserializeOptionTSAccessibility(pos + 62), + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeBoxFunction(pos + 48); + return node; } function deserializeMethodDefinitionType(pos) { @@ -1935,25 +2254,31 @@ function deserializeMethodDefinitionType(pos) { } function deserializePropertyDefinition(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializePropertyDefinitionType(pos + 72), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 48), - value: deserializeOptionExpression(pos + 56), - computed: deserializeBool(pos + 73), - static: deserializeBool(pos + 74), - declare: deserializeBool(pos + 75), - override: deserializeBool(pos + 76), - optional: deserializeBool(pos + 77), - definite: deserializeBool(pos + 78), - readonly: deserializeBool(pos + 79), - accessibility: deserializeOptionTSAccessibility(pos + 80), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializePropertyDefinitionType(pos + 72), + decorators: null, + key: null, + typeAnnotation: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + declare: deserializeBool(pos + 75), + override: deserializeBool(pos + 76), + optional: deserializeBool(pos + 77), + definite: deserializeBool(pos + 78), + readonly: deserializeBool(pos + 79), + accessibility: deserializeOptionTSAccessibility(pos + 80), + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.value = deserializeOptionExpression(pos + 56); + return node; } function deserializePropertyDefinitionType(pos) { @@ -1994,14 +2319,17 @@ function deserializePrivateIdentifier(pos) { } function deserializeStaticBlock(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'StaticBlock', - body: deserializeVecStatement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'StaticBlock', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecStatement(pos + 8); + return node; } function deserializeAccessorPropertyType(pos) { @@ -2016,57 +2344,74 @@ function deserializeAccessorPropertyType(pos) { } function deserializeAccessorProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeAccessorPropertyType(pos + 72), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 48), - value: deserializeOptionExpression(pos + 56), - computed: deserializeBool(pos + 73), - static: deserializeBool(pos + 74), - override: deserializeBool(pos + 75), - definite: deserializeBool(pos + 76), - accessibility: deserializeOptionTSAccessibility(pos + 77), - declare: false, - optional: false, - readonly: false, - start, - end, - range: [start, end], - }; -} - -function deserializeImportExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportExpression', - source: deserializeExpression(pos + 8), - options: deserializeOptionExpression(pos + 24), - phase: deserializeOptionImportPhase(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeAccessorPropertyType(pos + 72), + decorators: null, + key: null, + typeAnnotation: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + override: deserializeBool(pos + 75), + definite: deserializeBool(pos + 76), + accessibility: deserializeOptionTSAccessibility(pos + 77), + declare: null, + optional: null, + readonly: null, + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.value = deserializeOptionExpression(pos + 56); + node.declare = false; + node.optional = false; + node.readonly = false; + return node; +} + +function deserializeImportExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportExpression', + source: null, + options: null, + phase: deserializeOptionImportPhase(pos + 40), + start, + end, + range: [start, end], + }; + node.source = deserializeExpression(pos + 8); + node.options = deserializeOptionExpression(pos + 24); + return node; } function deserializeImportDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ImportDeclaration', + specifiers: null, + source: null, + phase: deserializeOptionImportPhase(pos + 88), + attributes: null, + importKind: deserializeImportOrExportKind(pos + 89), + start, + end, + range: [start, end], + }, specifiers = deserializeOptionVecImportDeclarationSpecifier(pos + 8); specifiers === null && (specifiers = []); let withClause = deserializeOptionBoxWithClause(pos + 80); - return { - type: 'ImportDeclaration', - specifiers, - source: deserializeStringLiteral(pos + 32), - phase: deserializeOptionImportPhase(pos + 88), - attributes: withClause === null ? [] : withClause.attributes, - importKind: deserializeImportOrExportKind(pos + 89), - start, - end, - range: [start, end], - }; + node.specifiers = specifiers; + node.source = deserializeStringLiteral(pos + 32); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeImportPhase(pos) { @@ -2094,38 +2439,48 @@ function deserializeImportDeclarationSpecifier(pos) { } function deserializeImportSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportSpecifier', - imported: deserializeModuleExportName(pos + 8), - local: deserializeBindingIdentifier(pos + 64), - importKind: deserializeImportOrExportKind(pos + 96), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportSpecifier', + imported: null, + local: null, + importKind: deserializeImportOrExportKind(pos + 96), + start, + end, + range: [start, end], + }; + node.imported = deserializeModuleExportName(pos + 8); + node.local = deserializeBindingIdentifier(pos + 64); + return node; } function deserializeImportDefaultSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportDefaultSpecifier', - local: deserializeBindingIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportDefaultSpecifier', + local: null, + start, + end, + range: [start, end], + }; + node.local = deserializeBindingIdentifier(pos + 8); + return node; } function deserializeImportNamespaceSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportNamespaceSpecifier', - local: deserializeBindingIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportNamespaceSpecifier', + local: null, + start, + end, + range: [start, end], + }; + node.local = deserializeBindingIdentifier(pos + 8); + return node; } function deserializeWithClause(pos) { @@ -2133,15 +2488,19 @@ function deserializeWithClause(pos) { } function deserializeImportAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportAttribute', - key: deserializeImportAttributeKey(pos + 8), - value: deserializeStringLiteral(pos + 64), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportAttribute', + key: null, + value: null, + start, + end, + range: [start, end], + }; + node.key = deserializeImportAttributeKey(pos + 8); + node.value = deserializeStringLiteral(pos + 64); + return node; } function deserializeImportAttributeKey(pos) { @@ -2156,59 +2515,78 @@ function deserializeImportAttributeKey(pos) { } function deserializeExportNamedDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), withClause = deserializeOptionBoxWithClause(pos + 96); - return { - type: 'ExportNamedDeclaration', - declaration: deserializeOptionDeclaration(pos + 8), - specifiers: deserializeVecExportSpecifier(pos + 24), - source: deserializeOptionStringLiteral(pos + 48), - exportKind: deserializeImportOrExportKind(pos + 104), - attributes: withClause === null ? [] : withClause.attributes, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportNamedDeclaration', + declaration: null, + specifiers: null, + source: null, + exportKind: deserializeImportOrExportKind(pos + 104), + attributes: null, + start, + end, + range: [start, end], + }, + withClause = deserializeOptionBoxWithClause(pos + 96); + node.declaration = deserializeOptionDeclaration(pos + 8); + node.specifiers = deserializeVecExportSpecifier(pos + 24); + node.source = deserializeOptionStringLiteral(pos + 48); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeExportDefaultDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExportDefaultDeclaration', - declaration: deserializeExportDefaultDeclarationKind(pos + 8), - exportKind: 'value', - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportDefaultDeclaration', + declaration: null, + exportKind: null, + start, + end, + range: [start, end], + }; + node.declaration = deserializeExportDefaultDeclarationKind(pos + 8); + node.exportKind = 'value'; + return node; } function deserializeExportAllDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ExportAllDeclaration', + exported: null, + source: null, + attributes: null, + exportKind: deserializeImportOrExportKind(pos + 120), + start, + end, + range: [start, end], + }, withClause = deserializeOptionBoxWithClause(pos + 112); - return { - type: 'ExportAllDeclaration', - exported: deserializeOptionModuleExportName(pos + 8), - source: deserializeStringLiteral(pos + 64), - attributes: withClause === null ? [] : withClause.attributes, - exportKind: deserializeImportOrExportKind(pos + 120), - start, - end, - range: [start, end], - }; + node.exported = deserializeOptionModuleExportName(pos + 8); + node.source = deserializeStringLiteral(pos + 64); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeExportSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExportSpecifier', - local: deserializeModuleExportName(pos + 8), - exported: deserializeModuleExportName(pos + 64), - exportKind: deserializeImportOrExportKind(pos + 120), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportSpecifier', + local: null, + exported: null, + exportKind: deserializeImportOrExportKind(pos + 120), + start, + end, + range: [start, end], + }; + node.local = deserializeModuleExportName(pos + 8); + node.exported = deserializeModuleExportName(pos + 64); + return node; } function deserializeExportDefaultDeclarationKind(pos) { @@ -2324,39 +2702,51 @@ function deserializeModuleExportName(pos) { } function deserializeV8IntrinsicExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'V8IntrinsicExpression', - name: deserializeIdentifierName(pos + 8), - arguments: deserializeVecArgument(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'V8IntrinsicExpression', + name: null, + arguments: null, + start, + end, + range: [start, end], + }; + node.name = deserializeIdentifierName(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeBooleanLiteral(pos) { - let value = deserializeBool(pos + 8), start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Literal', - value, - raw: start === 0 && end === 0 ? null : value + '', - start, - end, - range: [start, end], - }; + let value = deserializeBool(pos + 8), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value, + raw: null, + start, + end, + range: [start, end], + }; + node.raw = start === 0 && end === 0 ? null : value + ''; + return node; } function deserializeNullLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Literal', - value: null, - raw: start === 0 && end === 0 ? null : 'null', - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: null, + start, + end, + range: [start, end], + }; + node.value = null; + node.raw = start === 0 && end === 0 ? null : 'null'; + return node; } function deserializeNumericLiteral(pos) { @@ -2372,46 +2762,61 @@ function deserializeNumericLiteral(pos) { } function deserializeStringLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), value = deserializeStr(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + start, + end, + range: [start, end], + }, + value = deserializeStr(pos + 8); deserializeBool(pos + 40) && (value = value.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); - return { - type: 'Literal', - value, - raw: deserializeOptionStr(pos + 24), - start, - end, - range: [start, end], - }; + node.value = value; + return node; } function deserializeBigIntLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), bigint = deserializeStr(pos + 8); - return { - type: 'Literal', - value: BigInt(bigint), - raw: deserializeOptionStr(pos + 24), - bigint, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + bigint: null, + start, + end, + range: [start, end], + }, + bigint = deserializeStr(pos + 8); + node.value = BigInt(bigint); + node.bigint = bigint; + return node; } function deserializeRegExpLiteral(pos) { - let regex = deserializeRegExp(pos + 8), start = deserializeU32(pos), end = deserializeU32(pos + 4), value = null; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 40), + regex: null, + start, + end, + range: [start, end], + }, + regex = deserializeRegExp(pos + 8), + value = null; try { value = new RegExp(regex.pattern, regex.flags); } catch {} - return { - type: 'Literal', - value, - raw: deserializeOptionStr(pos + 40), - regex, - start, - end, - range: [start, end], - }; + node.value = value; + node.regex = regex; + return node; } function deserializeRegExp(pos) { @@ -2436,58 +2841,76 @@ function deserializeRegExpFlags(pos) { } function deserializeJSXElement(pos) { - let closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), - start = deserializeU32(pos), + let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'JSXElement', + openingElement: null, + children: null, + closingElement: null, + start, + end, + range: [start, end], + }, + closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), openingElement = deserializeBoxJSXOpeningElement(pos + 8); closingElement === null && (openingElement.selfClosing = true); - return { - type: 'JSXElement', - openingElement, - children: deserializeVecJSXChild(pos + 16), - closingElement, - start, - end, - range: [start, end], - }; + node.openingElement = openingElement; + node.children = deserializeVecJSXChild(pos + 16); + node.closingElement = closingElement; + return node; } function deserializeJSXOpeningElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXOpeningElement', - name: deserializeJSXElementName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - attributes: deserializeVecJSXAttributeItem(pos + 32), - selfClosing: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXOpeningElement', + name: null, + typeArguments: null, + attributes: null, + selfClosing: null, + start, + end, + range: [start, end], + }; + node.name = deserializeJSXElementName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.attributes = deserializeVecJSXAttributeItem(pos + 32); + node.selfClosing = false; + return node; } function deserializeJSXClosingElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXClosingElement', - name: deserializeJSXElementName(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXClosingElement', + name: null, + start, + end, + range: [start, end], + }; + node.name = deserializeJSXElementName(pos + 8); + return node; } function deserializeJSXFragment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXFragment', - openingFragment: deserializeJSXOpeningFragment(pos + 8), - children: deserializeVecJSXChild(pos + 16), - closingFragment: deserializeJSXClosingFragment(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXFragment', + openingFragment: null, + children: null, + closingFragment: null, + start, + end, + range: [start, end], + }; + node.openingFragment = deserializeJSXOpeningFragment(pos + 8); + node.children = deserializeVecJSXChild(pos + 16); + node.closingFragment = deserializeJSXClosingFragment(pos + 40); + return node; } function deserializeJSXOpeningFragment(pos) { @@ -2542,27 +2965,35 @@ function deserializeJSXElementName(pos) { } function deserializeJSXNamespacedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXNamespacedName', - namespace: deserializeJSXIdentifier(pos + 8), - name: deserializeJSXIdentifier(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXNamespacedName', + namespace: null, + name: null, + start, + end, + range: [start, end], + }; + node.namespace = deserializeJSXIdentifier(pos + 8); + node.name = deserializeJSXIdentifier(pos + 32); + return node; } function deserializeJSXMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXMemberExpression', - object: deserializeJSXMemberExpressionObject(pos + 8), - property: deserializeJSXIdentifier(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXMemberExpression', + object: null, + property: null, + start, + end, + range: [start, end], + }; + node.object = deserializeJSXMemberExpressionObject(pos + 8); + node.property = deserializeJSXIdentifier(pos + 24); + return node; } function deserializeJSXMemberExpressionObject(pos) { @@ -2593,14 +3024,17 @@ function deserializeJSXMemberExpressionObject(pos) { } function deserializeJSXExpressionContainer(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXExpressionContainer', - expression: deserializeJSXExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXExpressionContainer', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeJSXExpression(pos + 8); + return node; } function deserializeJSXExpression(pos) { @@ -2720,26 +3154,33 @@ function deserializeJSXAttributeItem(pos) { } function deserializeJSXAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXAttribute', - name: deserializeJSXAttributeName(pos + 8), - value: deserializeOptionJSXAttributeValue(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXAttribute', + name: null, + value: null, + start, + end, + range: [start, end], + }; + node.name = deserializeJSXAttributeName(pos + 8); + node.value = deserializeOptionJSXAttributeValue(pos + 24); + return node; } function deserializeJSXSpreadAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXSpreadAttribute', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXSpreadAttribute', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeJSXAttributeName(pos) { @@ -2797,14 +3238,17 @@ function deserializeJSXChild(pos) { } function deserializeJSXSpreadChild(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXSpreadChild', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXSpreadChild', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeJSXText(pos) { @@ -2820,55 +3264,73 @@ function deserializeJSXText(pos) { } function deserializeTSThisParameter(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: 'this', - optional: false, - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 16), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.name = 'this'; + node.optional = false; + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + return node; } function deserializeTSEnumDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumDeclaration', - id: deserializeBindingIdentifier(pos + 8), - body: deserializeTSEnumBody(pos + 40), - const: deserializeBool(pos + 76), - declare: deserializeBool(pos + 77), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumDeclaration', + id: null, + body: null, + const: deserializeBool(pos + 76), + declare: deserializeBool(pos + 77), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.body = deserializeTSEnumBody(pos + 40); + return node; } function deserializeTSEnumBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumBody', - members: deserializeVecTSEnumMember(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumBody', + members: null, + start, + end, + range: [start, end], + }; + node.members = deserializeVecTSEnumMember(pos + 8); + return node; } function deserializeTSEnumMember(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumMember', - id: deserializeTSEnumMemberName(pos + 8), - initializer: deserializeOptionExpression(pos + 24), - computed: deserializeU8(pos + 8) > 1, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumMember', + id: null, + initializer: null, + computed: null, + start, + end, + range: [start, end], + }; + node.id = deserializeTSEnumMemberName(pos + 8); + node.initializer = deserializeOptionExpression(pos + 24); + node.computed = deserializeU8(pos + 8) > 1; + return node; } function deserializeTSEnumMemberName(pos) { @@ -2887,25 +3349,31 @@ function deserializeTSEnumMemberName(pos) { } function deserializeTSTypeAnnotation(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAnnotation', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAnnotation', + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSLiteralType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSLiteralType', - literal: deserializeTSLiteral(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSLiteralType', + literal: null, + start, + end, + range: [start, end], + }; + node.literal = deserializeTSLiteral(pos + 8); + return node; } function deserializeTSLiteral(pos) { @@ -3009,66 +3477,82 @@ function deserializeTSType(pos) { } function deserializeTSConditionalType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConditionalType', - checkType: deserializeTSType(pos + 8), - extendsType: deserializeTSType(pos + 24), - trueType: deserializeTSType(pos + 40), - falseType: deserializeTSType(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConditionalType', + checkType: null, + extendsType: null, + trueType: null, + falseType: null, + start, + end, + range: [start, end], + }; + node.checkType = deserializeTSType(pos + 8); + node.extendsType = deserializeTSType(pos + 24); + node.trueType = deserializeTSType(pos + 40); + node.falseType = deserializeTSType(pos + 56); + return node; } function deserializeTSUnionType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSUnionType', - types: deserializeVecTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSUnionType', + types: null, + start, + end, + range: [start, end], + }; + node.types = deserializeVecTSType(pos + 8); + return node; } function deserializeTSIntersectionType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIntersectionType', - types: deserializeVecTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIntersectionType', + types: null, + start, + end, + range: [start, end], + }; + node.types = deserializeVecTSType(pos + 8); + return node; } function deserializeTSParenthesizedType(pos) { - let node = deserializeTSType(pos + 8); + let node; { let start, end; node = { type: 'TSParenthesizedType', - typeAnnotation: node, + typeAnnotation: null, start: start = deserializeU32(pos), end: end = deserializeU32(pos + 4), range: [start, end], }; + node.typeAnnotation = deserializeTSType(pos + 8); } return node; } function deserializeTSTypeOperator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeOperator', - operator: deserializeTSTypeOperatorOperator(pos + 24), - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeOperator', + operator: deserializeTSTypeOperatorOperator(pos + 24), + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSTypeOperatorOperator(pos) { @@ -3085,72 +3569,92 @@ function deserializeTSTypeOperatorOperator(pos) { } function deserializeTSArrayType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSArrayType', - elementType: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSArrayType', + elementType: null, + start, + end, + range: [start, end], + }; + node.elementType = deserializeTSType(pos + 8); + return node; } function deserializeTSIndexedAccessType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIndexedAccessType', - objectType: deserializeTSType(pos + 8), - indexType: deserializeTSType(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIndexedAccessType', + objectType: null, + indexType: null, + start, + end, + range: [start, end], + }; + node.objectType = deserializeTSType(pos + 8); + node.indexType = deserializeTSType(pos + 24); + return node; } function deserializeTSTupleType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTupleType', - elementTypes: deserializeVecTSTupleElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTupleType', + elementTypes: null, + start, + end, + range: [start, end], + }; + node.elementTypes = deserializeVecTSTupleElement(pos + 8); + return node; } function deserializeTSNamedTupleMember(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNamedTupleMember', - label: deserializeIdentifierName(pos + 8), - elementType: deserializeTSTupleElement(pos + 32), - optional: deserializeBool(pos + 48), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNamedTupleMember', + label: null, + elementType: null, + optional: deserializeBool(pos + 48), + start, + end, + range: [start, end], + }; + node.label = deserializeIdentifierName(pos + 8); + node.elementType = deserializeTSTupleElement(pos + 32); + return node; } function deserializeTSOptionalType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSOptionalType', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSOptionalType', + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSRestType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSRestType', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSRestType', + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSTupleElement(pos) { @@ -3379,15 +3883,19 @@ function deserializeTSBigIntKeyword(pos) { } function deserializeTSTypeReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeReference', - typeName: deserializeTSTypeName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeReference', + typeName: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.typeName = deserializeTSTypeName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypeName(pos) { @@ -3404,67 +3912,87 @@ function deserializeTSTypeName(pos) { } function deserializeTSQualifiedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSQualifiedName', - left: deserializeTSTypeName(pos + 8), - right: deserializeIdentifierName(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeTSTypeName(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + return node; } function deserializeTSTypeParameterInstantiation(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameterInstantiation', - params: deserializeVecTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameterInstantiation', + params: null, + start, + end, + range: [start, end], + }; + node.params = deserializeVecTSType(pos + 8); + return node; } function deserializeTSTypeParameter(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameter', - name: deserializeBindingIdentifier(pos + 8), - constraint: deserializeOptionTSType(pos + 40), - default: deserializeOptionTSType(pos + 56), - in: deserializeBool(pos + 72), - out: deserializeBool(pos + 73), - const: deserializeBool(pos + 74), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameter', + name: null, + constraint: null, + default: null, + in: deserializeBool(pos + 72), + out: deserializeBool(pos + 73), + const: deserializeBool(pos + 74), + start, + end, + range: [start, end], + }; + node.name = deserializeBindingIdentifier(pos + 8); + node.constraint = deserializeOptionTSType(pos + 40); + node.default = deserializeOptionTSType(pos + 56); + return node; } function deserializeTSTypeParameterDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameterDeclaration', - params: deserializeVecTSTypeParameter(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameterDeclaration', + params: null, + start, + end, + range: [start, end], + }; + node.params = deserializeVecTSTypeParameter(pos + 8); + return node; } function deserializeTSTypeAliasDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAliasDeclaration', - id: deserializeBindingIdentifier(pos + 8), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - typeAnnotation: deserializeTSType(pos + 48), - declare: deserializeBool(pos + 68), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAliasDeclaration', + id: null, + typeParameters: null, + typeAnnotation: null, + declare: deserializeBool(pos + 68), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.typeAnnotation = deserializeTSType(pos + 48); + return node; } function deserializeTSAccessibility(pos) { @@ -3481,15 +4009,26 @@ function deserializeTSAccessibility(pos) { } function deserializeTSClassImplements(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), expression = deserializeTSTypeName(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSClassImplements', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + }, + expression = deserializeTSTypeName(pos + 8); if (expression.type === 'TSQualifiedName') { let object = expression.left, + { right } = expression, start, end, - parent = expression = { + previous = expression = { type: 'MemberExpression', object, - property: expression.right, + property: right, optional: false, computed: false, start: start = expression.start, @@ -3497,11 +4036,11 @@ function deserializeTSClassImplements(pos) { range: [start, end], }; for (; object.type === 'TSQualifiedName';) { - let { left } = object, start, end; - parent = parent.object = { + let { left, right } = object; + previous = previous.object = { type: 'MemberExpression', object: left, - property: object.right, + property: right, optional: false, computed: false, start: start = object.start, @@ -3511,57 +4050,67 @@ function deserializeTSClassImplements(pos) { object = left; } } - return { - type: 'TSClassImplements', - expression, - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + node.expression = expression; + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSInterfaceDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceDeclaration', - id: deserializeBindingIdentifier(pos + 8), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - extends: deserializeVecTSInterfaceHeritage(pos + 48), - body: deserializeBoxTSInterfaceBody(pos + 72), - declare: deserializeBool(pos + 84), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceDeclaration', + id: null, + typeParameters: null, + extends: null, + body: null, + declare: deserializeBool(pos + 84), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.extends = deserializeVecTSInterfaceHeritage(pos + 48); + node.body = deserializeBoxTSInterfaceBody(pos + 72); + return node; } function deserializeTSInterfaceBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceBody', - body: deserializeVecTSSignature(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceBody', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecTSSignature(pos + 8); + return node; } function deserializeTSPropertySignature(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSPropertySignature', - computed: deserializeBool(pos + 32), - optional: deserializeBool(pos + 33), - readonly: deserializeBool(pos + 34), - key: deserializePropertyKey(pos + 8), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - accessibility: null, - static: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSPropertySignature', + computed: deserializeBool(pos + 32), + optional: deserializeBool(pos + 33), + readonly: deserializeBool(pos + 34), + key: null, + typeAnnotation: null, + accessibility: null, + static: null, + start, + end, + range: [start, end], + }; + node.key = deserializePropertyKey(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.accessibility = null; + node.static = false; + return node; } function deserializeTSSignature(pos) { @@ -3582,35 +4131,44 @@ function deserializeTSSignature(pos) { } function deserializeTSIndexSignature(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIndexSignature', - parameters: deserializeVecTSIndexSignatureName(pos + 8), - typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 32), - readonly: deserializeBool(pos + 40), - static: deserializeBool(pos + 41), - accessibility: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIndexSignature', + parameters: null, + typeAnnotation: null, + readonly: deserializeBool(pos + 40), + static: deserializeBool(pos + 41), + accessibility: null, + start, + end, + range: [start, end], + }; + node.parameters = deserializeVecTSIndexSignatureName(pos + 8); + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 32); + node.accessibility = null; + return node; } function deserializeTSCallSignatureDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), - params = deserializeBoxFormalParameters(pos + 24), + node = { + type: 'TSCallSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }, + params = deserializeBoxFormalParameters(pos + 24), thisParam = deserializeOptionBoxTSThisParameter(pos + 16); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSCallSignatureDeclaration', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 32), - start, - end, - range: [start, end], - }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 32); + return node; } function deserializeTSMethodSignatureKind(pos) { @@ -3629,77 +4187,103 @@ function deserializeTSMethodSignatureKind(pos) { function deserializeTSMethodSignature(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSMethodSignature', + key: null, + computed: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + kind: deserializeTSMethodSignatureKind(pos + 62), + typeParameters: null, + params: null, + returnType: null, + accessibility: null, + readonly: null, + static: null, + start, + end, + range: [start, end], + }, params = deserializeBoxFormalParameters(pos + 40), thisParam = deserializeOptionBoxTSThisParameter(pos + 32); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSMethodSignature', - key: deserializePropertyKey(pos + 8), - computed: deserializeBool(pos + 60), - optional: deserializeBool(pos + 61), - kind: deserializeTSMethodSignatureKind(pos + 62), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 24), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 48), - accessibility: null, - readonly: false, - static: false, - start, - end, - range: [start, end], - }; + node.key = deserializePropertyKey(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 24); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.accessibility = null; + node.readonly = false; + node.static = false; + return node; } function deserializeTSConstructSignatureDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConstructSignatureDeclaration', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConstructSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSIndexSignatureName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSInterfaceHeritage(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceHeritage', - expression: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceHeritage', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypePredicate(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypePredicate', - parameterName: deserializeTSTypePredicateName(pos + 8), - asserts: deserializeBool(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypePredicate', + parameterName: null, + asserts: deserializeBool(pos + 32), + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.parameterName = deserializeTSTypePredicateName(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSTypePredicateName(pos) { @@ -3719,56 +4303,24 @@ function deserializeTSModuleDeclaration(pos) { start = deserializeU32(pos), end = deserializeU32(pos + 4), declare = deserializeBool(pos + 85), - id = deserializeTSModuleDeclarationName(pos + 8), + node, body = deserializeOptionTSModuleDeclarationBody(pos + 64); - // Flatten `body`, and nest `id` - if (body !== null && body.type === 'TSModuleDeclaration') { - let innerId = body.id; - if (innerId.type === 'Identifier') { - let start, end; - id = { - type: 'TSQualifiedName', - left: id, - right: innerId, - start: start = id.start, - end: end = innerId.end, - range: [start, end], - }; - } else { - // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of - // this module on left, and previous `left` of innermost `TSQualifiedName` on right - for (;;) { - innerId.start = innerId.range[0] = id.start; - if (innerId.left.type === 'Identifier') break; - innerId = innerId.left; - } - let start, end; - innerId.left = { - type: 'TSQualifiedName', - left: id, - right: innerId.left, - start: start = id.start, - end: end = innerId.left.end, - range: [start, end], - }; - id = body.id; - } - body = Object.hasOwn(body, 'body') ? body.body : null; - } - return body === null - ? { + if (body === null) { + node = { type: 'TSModuleDeclaration', - id, + id: null, kind, declare, global, start, end, range: [start, end], - } - : { + }; + node.id = deserializeTSModuleDeclarationName(pos + 8); + } else { + node = { type: 'TSModuleDeclaration', - id, + id: null, body, kind, declare, @@ -3777,6 +4329,47 @@ function deserializeTSModuleDeclaration(pos) { end, range: [start, end], }; + let id = deserializeTSModuleDeclarationName(pos + 8); + if (body.type === 'TSModuleBlock') node.id = id; + else { + let innerId = body.id; + if (innerId.type === 'Identifier') { + let start, end; + node.id = { + type: 'TSQualifiedName', + left: id, + right: innerId, + start: start = id.start, + end: end = innerId.end, + range: [start, end], + }; + } else { + // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of + // this module on left, and previous `left` of innermost `TSQualifiedName` on right + node.id = innerId; + let { start } = id; + for (;;) { + innerId.start = innerId.range[0] = start; + if (innerId.left.type === 'Identifier') break; + innerId = innerId.left; + } + let end, right = innerId.left; + innerId.left = { + type: 'TSQualifiedName', + left: id, + right, + start, + end: end = right.end, + range: [start, end], + }; + } + if (Object.hasOwn(body, 'body')) { + body = body.body; + node.body = body; + } else body = null; + } + } + return node; } function deserializeTSModuleDeclarationKind(pos) { @@ -3815,49 +4408,63 @@ function deserializeTSModuleDeclarationBody(pos) { } function deserializeTSModuleBlock(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), body = deserializeVecDirective(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSModuleBlock', + body: null, + start, + end, + range: [start, end], + }, + body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); - return { - type: 'TSModuleBlock', - body, - start, - end, - range: [start, end], - }; + node.body = body; + return node; } function deserializeTSTypeLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeLiteral', - members: deserializeVecTSSignature(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeLiteral', + members: null, + start, + end, + range: [start, end], + }; + node.members = deserializeVecTSSignature(pos + 8); + return node; } function deserializeTSInferType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInferType', - typeParameter: deserializeBoxTSTypeParameter(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInferType', + typeParameter: null, + start, + end, + range: [start, end], + }; + node.typeParameter = deserializeBoxTSTypeParameter(pos + 8); + return node; } function deserializeTSTypeQuery(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeQuery', - exprName: deserializeTSTypeQueryExprName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeQuery', + exprName: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.exprName = deserializeTSTypeQueryExprName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypeQueryExprName(pos) { @@ -3876,17 +4483,23 @@ function deserializeTSTypeQueryExprName(pos) { } function deserializeTSImportType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSImportType', - argument: deserializeTSType(pos + 8), - options: deserializeOptionBoxObjectExpression(pos + 24), - qualifier: deserializeOptionTSImportTypeQualifier(pos + 32), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 48), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSImportType', + argument: null, + options: null, + qualifier: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeTSType(pos + 8); + node.options = deserializeOptionBoxObjectExpression(pos + 24); + node.qualifier = deserializeOptionTSImportTypeQualifier(pos + 32); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 48); + return node; } function deserializeTSImportTypeQualifier(pos) { @@ -3901,66 +4514,87 @@ function deserializeTSImportTypeQualifier(pos) { } function deserializeTSImportTypeQualifiedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSQualifiedName', - left: deserializeTSImportTypeQualifier(pos + 8), - right: deserializeIdentifierName(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeTSImportTypeQualifier(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + return node; } function deserializeTSFunctionType(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSFunctionType', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }, params = deserializeBoxFormalParameters(pos + 24), thisParam = deserializeOptionBoxTSThisParameter(pos + 16); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSFunctionType', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params, - returnType: deserializeBoxTSTypeAnnotation(pos + 32), - start, - end, - range: [start, end], - }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeBoxTSTypeAnnotation(pos + 32); + return node; } function deserializeTSConstructorType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConstructorType', - abstract: deserializeBool(pos + 32), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConstructorType', + abstract: deserializeBool(pos + 32), + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSMappedType(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSMappedType', + key: null, + constraint: null, + nameType: null, + typeAnnotation: null, + optional: null, + readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), + start, + end, + range: [start, end], + }, typeParameter = deserializeBoxTSTypeParameter(pos + 8), + key = typeParameter.name, + { constraint } = typeParameter, optional = deserializeOptionTSMappedTypeModifierOperator(pos + 52); optional === null && (optional = false); - return { - type: 'TSMappedType', - key: typeParameter.name, - constraint: typeParameter.constraint, - nameType: deserializeOptionTSType(pos + 16), - typeAnnotation: deserializeOptionTSType(pos + 32), - optional, - readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), - start, - end, - range: [start, end], - }; + node.key = key; + node.constraint = constraint; + node.nameType = deserializeOptionTSType(pos + 16); + node.typeAnnotation = deserializeOptionTSType(pos + 32); + node.optional = optional; + return node; } function deserializeTSMappedTypeModifierOperator(pos) { @@ -3977,64 +4611,84 @@ function deserializeTSMappedTypeModifierOperator(pos) { } function deserializeTSTemplateLiteralType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTemplateLiteralType', - quasis: deserializeVecTemplateElement(pos + 8), - types: deserializeVecTSType(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTemplateLiteralType', + quasis: null, + types: null, + start, + end, + range: [start, end], + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.types = deserializeVecTSType(pos + 32); + return node; } function deserializeTSAsExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSAsExpression', - expression: deserializeExpression(pos + 8), - typeAnnotation: deserializeTSType(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSAsExpression', + expression: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + return node; } function deserializeTSSatisfiesExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSSatisfiesExpression', - expression: deserializeExpression(pos + 8), - typeAnnotation: deserializeTSType(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSSatisfiesExpression', + expression: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + return node; } function deserializeTSTypeAssertion(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAssertion', - typeAnnotation: deserializeTSType(pos + 8), - expression: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAssertion', + typeAnnotation: null, + expression: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + node.expression = deserializeExpression(pos + 24); + return node; } function deserializeTSImportEqualsDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSImportEqualsDeclaration', - id: deserializeBindingIdentifier(pos + 8), - moduleReference: deserializeTSModuleReference(pos + 40), - importKind: deserializeImportOrExportKind(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSImportEqualsDeclaration', + id: null, + moduleReference: null, + importKind: deserializeImportOrExportKind(pos + 56), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.moduleReference = deserializeTSModuleReference(pos + 40); + return node; } function deserializeTSModuleReference(pos) { @@ -4053,70 +4707,89 @@ function deserializeTSModuleReference(pos) { } function deserializeTSExternalModuleReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSExternalModuleReference', - expression: deserializeStringLiteral(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSExternalModuleReference', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeStringLiteral(pos + 8); + return node; } function deserializeTSNonNullExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNonNullExpression', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNonNullExpression', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeDecorator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Decorator', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Decorator', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeTSExportAssignment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSExportAssignment', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSExportAssignment', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeTSNamespaceExportDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNamespaceExportDeclaration', - id: deserializeIdentifierName(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNamespaceExportDeclaration', + id: null, + start, + end, + range: [start, end], + }; + node.id = deserializeIdentifierName(pos + 8); + return node; } function deserializeTSInstantiationExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInstantiationExpression', - expression: deserializeExpression(pos + 8), - typeArguments: deserializeBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInstantiationExpression', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeImportOrExportKind(pos) { @@ -4131,27 +4804,33 @@ function deserializeImportOrExportKind(pos) { } function deserializeJSDocNullableType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSJSDocNullableType', - typeAnnotation: deserializeTSType(pos + 8), - postfix: deserializeBool(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSJSDocNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeJSDocNonNullableType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSJSDocNonNullableType', - typeAnnotation: deserializeTSType(pos + 8), - postfix: deserializeBool(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSJSDocNonNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeJSDocUnknownType(pos) { @@ -4179,14 +4858,16 @@ function deserializeComment(pos) { let type = deserializeCommentKind(pos + 12), start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type, + value: null, + start, + end, + range: [start, end], + }, endCut = type === 'Line' ? 0 : 2; - return { - type, - value: sourceText.slice(start + 2, end - endCut), - start, - end, - range: [start, end], - }; + node.value = sourceText.slice(start + 2, end - endCut); + return node; } function deserializeNameSpan(pos) { diff --git a/napi/parser/generated/deserialize/ts_range_no_parens.js b/napi/parser/generated/deserialize/ts_range_no_parens.js index a709cf7b4b144..910d249a95797 100644 --- a/napi/parser/generated/deserialize/ts_range_no_parens.js +++ b/napi/parser/generated/deserialize/ts_range_no_parens.js @@ -31,29 +31,35 @@ function deserializeWith(buffer, sourceTextInput, sourceByteLenInput, deserializ } function deserializeProgram(pos) { - let body = deserializeVecDirective(pos + 72); + let end = deserializeU32(pos + 4), + program = { + type: 'Program', + body: null, + sourceType: deserializeModuleKind(pos + 125), + hashbang: null, + start: 0, + end, + range: [0, end], + }; + program.hashbang = deserializeOptionHashbang(pos + 48); + let body = program.body = deserializeVecDirective(pos + 72); body.push(...deserializeVecStatement(pos + 96)); - let end = deserializeU32(pos + 4), start; - if (body.length > 0) { - let first = body[0]; - start = first.start; - if (first.type === 'ExportNamedDeclaration' || first.type === 'ExportDefaultDeclaration') { - let { declaration } = first; - if (declaration !== null && declaration.type === 'ClassDeclaration' && declaration.decorators.length > 0) { - let decoratorStart = declaration.decorators[0].start; - decoratorStart < start && (start = decoratorStart); + { + let start; + if (body.length > 0) { + let first = body[0]; + start = first.start; + if (first.type === 'ExportNamedDeclaration' || first.type === 'ExportDefaultDeclaration') { + let { declaration } = first; + if (declaration !== null && declaration.type === 'ClassDeclaration' && declaration.decorators.length > 0) { + let decoratorStart = declaration.decorators[0].start; + decoratorStart < start && (start = decoratorStart); + } } - } - } else start = end; - return { - type: 'Program', - body, - sourceType: deserializeModuleKind(pos + 125), - hashbang: deserializeOptionHashbang(pos + 48), - start, - end, - range: [start, end], - }; + } else start = end; + program.start = program.range[0] = start; + } + return program; } function deserializeExpression(pos) { @@ -150,59 +156,79 @@ function deserializeExpression(pos) { } function deserializeIdentifierName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeIdentifierReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeBindingIdentifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeLabelIdentifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeThisExpression(pos) { @@ -216,14 +242,17 @@ function deserializeThisExpression(pos) { } function deserializeArrayExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ArrayExpression', - elements: deserializeVecArrayExpressionElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ArrayExpression', + elements: null, + start, + end, + range: [start, end], + }; + node.elements = deserializeVecArrayExpressionElement(pos + 8); + return node; } function deserializeArrayExpressionElement(pos) { @@ -328,14 +357,17 @@ function deserializeElision(pos) { } function deserializeObjectExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ObjectExpression', - properties: deserializeVecObjectPropertyKind(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ObjectExpression', + properties: null, + start, + end, + range: [start, end], + }; + node.properties = deserializeVecObjectPropertyKind(pos + 8); + return node; } function deserializeObjectPropertyKind(pos) { @@ -350,20 +382,25 @@ function deserializeObjectPropertyKind(pos) { } function deserializeObjectProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: deserializePropertyKind(pos + 40), - key: deserializePropertyKey(pos + 8), - value: deserializeExpression(pos + 24), - method: deserializeBool(pos + 41), - shorthand: deserializeBool(pos + 42), - computed: deserializeBool(pos + 43), - optional: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: deserializePropertyKind(pos + 40), + key: null, + value: null, + method: deserializeBool(pos + 41), + shorthand: deserializeBool(pos + 42), + computed: deserializeBool(pos + 43), + optional: null, + start, + end, + range: [start, end], + }; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeExpression(pos + 24); + node.optional = false; + return node; } function deserializePropertyKey(pos) { @@ -477,28 +514,37 @@ function deserializePropertyKind(pos) { } function deserializeTemplateLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TemplateLiteral', - quasis: deserializeVecTemplateElement(pos + 8), - expressions: deserializeVecExpression(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TemplateLiteral', + quasis: null, + expressions: null, + start, + end, + range: [start, end], + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.expressions = deserializeVecExpression(pos + 32); + return node; } function deserializeTaggedTemplateExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TaggedTemplateExpression', - tag: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - quasi: deserializeTemplateLiteral(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TaggedTemplateExpression', + tag: null, + typeArguments: null, + quasi: null, + start, + end, + range: [start, end], + }; + node.tag = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.quasi = deserializeTemplateLiteral(pos + 32); + return node; } function deserializeTemplateElement(pos) { @@ -526,95 +572,127 @@ function deserializeTemplateElementValue(pos) { } function deserializeComputedMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializeExpression(pos + 24), - optional: deserializeBool(pos + 40), - computed: true, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 40), + computed: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeExpression(pos + 24); + node.computed = true; + return node; } function deserializeStaticMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializeIdentifierName(pos + 24), - optional: deserializeBool(pos + 48), - computed: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeIdentifierName(pos + 24); + node.computed = false; + return node; } function deserializePrivateFieldExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MemberExpression', - object: deserializeExpression(pos + 8), - property: deserializePrivateIdentifier(pos + 24), - optional: deserializeBool(pos + 48), - computed: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializePrivateIdentifier(pos + 24); + node.computed = false; + return node; } function deserializeCallExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'CallExpression', - callee: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - arguments: deserializeVecArgument(pos + 32), - optional: deserializeBool(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'CallExpression', + callee: null, + typeArguments: null, + arguments: null, + optional: deserializeBool(pos + 56), + start, + end, + range: [start, end], + }; + node.callee = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeNewExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'NewExpression', - callee: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - arguments: deserializeVecArgument(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'NewExpression', + callee: null, + typeArguments: null, + arguments: null, + start, + end, + range: [start, end], + }; + node.callee = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.arguments = deserializeVecArgument(pos + 32); + return node; } function deserializeMetaProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'MetaProperty', - meta: deserializeIdentifierName(pos + 8), - property: deserializeIdentifierName(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'MetaProperty', + meta: null, + property: null, + start, + end, + range: [start, end], + }; + node.meta = deserializeIdentifierName(pos + 8); + node.property = deserializeIdentifierName(pos + 32); + return node; } function deserializeSpreadElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SpreadElement', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SpreadElement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeArgument(pos) { @@ -713,94 +791,123 @@ function deserializeArgument(pos) { } function deserializeUpdateExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'UpdateExpression', - operator: deserializeUpdateOperator(pos + 24), - prefix: deserializeBool(pos + 25), - argument: deserializeSimpleAssignmentTarget(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'UpdateExpression', + operator: deserializeUpdateOperator(pos + 24), + prefix: deserializeBool(pos + 25), + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeSimpleAssignmentTarget(pos + 8); + return node; } function deserializeUnaryExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'UnaryExpression', - operator: deserializeUnaryOperator(pos + 24), - argument: deserializeExpression(pos + 8), - prefix: true, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'UnaryExpression', + operator: deserializeUnaryOperator(pos + 24), + argument: null, + prefix: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + node.prefix = true; + return node; } function deserializeBinaryExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BinaryExpression', - left: deserializeExpression(pos + 8), - operator: deserializeBinaryOperator(pos + 40), - right: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; -} - + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BinaryExpression', + left: null, + operator: deserializeBinaryOperator(pos + 40), + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; +} + function deserializePrivateInExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BinaryExpression', - left: deserializePrivateIdentifier(pos + 8), - operator: 'in', - right: deserializeExpression(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BinaryExpression', + left: null, + operator: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializePrivateIdentifier(pos + 8); + node.operator = 'in'; + node.right = deserializeExpression(pos + 32); + return node; } function deserializeLogicalExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'LogicalExpression', - left: deserializeExpression(pos + 8), - operator: deserializeLogicalOperator(pos + 40), - right: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'LogicalExpression', + left: null, + operator: deserializeLogicalOperator(pos + 40), + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeConditionalExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ConditionalExpression', - test: deserializeExpression(pos + 8), - consequent: deserializeExpression(pos + 24), - alternate: deserializeExpression(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ConditionalExpression', + test: null, + consequent: null, + alternate: null, + start, + end, + range: [start, end], + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeExpression(pos + 24); + node.alternate = deserializeExpression(pos + 40); + return node; } function deserializeAssignmentExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentExpression', - operator: deserializeAssignmentOperator(pos + 40), - left: deserializeAssignmentTarget(pos + 8), - right: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentExpression', + operator: deserializeAssignmentOperator(pos + 40), + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + return node; } function deserializeAssignmentTarget(pos) { @@ -856,52 +963,69 @@ function deserializeSimpleAssignmentTarget(pos) { function deserializeArrayAssignmentTarget(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrayPattern', + decorators: null, + elements: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }, elements = deserializeVecOptionAssignmentTargetMaybeDefault(pos + 8), rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); rest !== null && elements.push(rest); - return { - type: 'ArrayPattern', - decorators: [], - elements, - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + node.decorators = []; + node.elements = elements; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeObjectAssignmentTarget(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ObjectPattern', + decorators: null, + properties: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }, properties = deserializeVecAssignmentTargetProperty(pos + 8), rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); rest !== null && properties.push(rest); - return { - type: 'ObjectPattern', - decorators: [], - properties, - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + node.decorators = []; + node.properties = properties; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeAssignmentTargetRest(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'RestElement', - decorators: [], - argument: deserializeAssignmentTarget(pos + 8), - optional: false, - typeAnnotation: null, - value: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'RestElement', + decorators: null, + argument: null, + optional: null, + typeAnnotation: null, + value: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.argument = deserializeAssignmentTarget(pos + 8); + node.optional = false; + node.typeAnnotation = null; + node.value = null; + return node; } function deserializeAssignmentTargetMaybeDefault(pos) { @@ -934,18 +1058,25 @@ function deserializeAssignmentTargetMaybeDefault(pos) { } function deserializeAssignmentTargetWithDefault(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentPattern', - decorators: [], - left: deserializeAssignmentTarget(pos + 8), - right: deserializeExpression(pos + 24), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentPattern', + decorators: null, + left: null, + right: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeAssignmentTargetProperty(pos) { @@ -960,62 +1091,82 @@ function deserializeAssignmentTargetProperty(pos) { } function deserializeAssignmentTargetPropertyIdentifier(pos) { - let key = deserializeIdentifierReference(pos + 8), - start = deserializeU32(pos), + let start = deserializeU32(pos), end = deserializeU32(pos + 4), - init = deserializeOptionExpression(pos + 40), - keyCopy = { ...key }; - return { - type: 'Property', - kind: 'init', - key, - value: init === null ? keyCopy : { - type: 'AssignmentPattern', - decorators: [], - left: keyCopy, - right: init, - optional: false, - typeAnnotation: null, + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: null, + optional: null, start, end, range: [start, end], }, - method: false, - shorthand: true, - computed: false, + key = deserializeIdentifierReference(pos + 8), + init = deserializeOptionExpression(pos + 40), + value = { ...key }; + init !== null && (value = { + type: 'AssignmentPattern', + decorators: [], + left: value, + right: init, optional: false, + typeAnnotation: null, start, end, range: [start, end], - }; + }); + node.kind = 'init'; + node.key = key; + node.value = value; + node.method = false; + node.shorthand = true; + node.computed = false; + node.optional = false; + return node; } function deserializeAssignmentTargetPropertyProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: 'init', - key: deserializePropertyKey(pos + 8), - value: deserializeAssignmentTargetMaybeDefault(pos + 24), - method: false, - shorthand: false, - computed: deserializeBool(pos + 40), - optional: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: deserializeBool(pos + 40), + optional: null, + start, + end, + range: [start, end], + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeAssignmentTargetMaybeDefault(pos + 24); + node.method = false; + node.shorthand = false; + node.optional = false; + return node; } function deserializeSequenceExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SequenceExpression', - expressions: deserializeVecExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SequenceExpression', + expressions: null, + start, + end, + range: [start, end], + }; + node.expressions = deserializeVecExpression(pos + 8); + return node; } function deserializeSuper(pos) { @@ -1029,25 +1180,31 @@ function deserializeSuper(pos) { } function deserializeAwaitExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AwaitExpression', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AwaitExpression', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeChainExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ChainExpression', - expression: deserializeChainElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ChainExpression', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeChainElement(pos + 8); + return node; } function deserializeChainElement(pos) { @@ -1068,7 +1225,9 @@ function deserializeChainElement(pos) { } function deserializeParenthesizedExpression(pos) { - return deserializeExpression(pos + 8); + let node; + node = deserializeExpression(pos + 8); + return node; } function deserializeStatement(pos) { @@ -1143,15 +1302,18 @@ function deserializeStatement(pos) { } function deserializeDirective(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExpressionStatement', - expression: deserializeStringLiteral(pos + 8), - directive: deserializeStr(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExpressionStatement', + expression: null, + directive: deserializeStr(pos + 56), + start, + end, + range: [start, end], + }; + node.expression = deserializeStringLiteral(pos + 8); + return node; } function deserializeHashbang(pos) { @@ -1166,14 +1328,17 @@ function deserializeHashbang(pos) { } function deserializeBlockStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BlockStatement', - body: deserializeVecStatement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BlockStatement', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecStatement(pos + 8); + return node; } function deserializeDeclaration(pos) { @@ -1200,16 +1365,19 @@ function deserializeDeclaration(pos) { } function deserializeVariableDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'VariableDeclaration', - kind: deserializeVariableDeclarationKind(pos + 32), - declarations: deserializeVecVariableDeclarator(pos + 8), - declare: deserializeBool(pos + 33), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'VariableDeclaration', + kind: deserializeVariableDeclarationKind(pos + 32), + declarations: null, + declare: deserializeBool(pos + 33), + start, + end, + range: [start, end], + }; + node.declarations = deserializeVecVariableDeclarator(pos + 8); + return node; } function deserializeVariableDeclarationKind(pos) { @@ -1230,16 +1398,20 @@ function deserializeVariableDeclarationKind(pos) { } function deserializeVariableDeclarator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'VariableDeclarator', - id: deserializeBindingPattern(pos + 8), - init: deserializeOptionExpression(pos + 40), - definite: deserializeBool(pos + 57), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'VariableDeclarator', + id: null, + init: null, + definite: deserializeBool(pos + 57), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingPattern(pos + 8); + node.init = deserializeOptionExpression(pos + 40); + return node; } function deserializeEmptyStatement(pos) { @@ -1253,66 +1425,89 @@ function deserializeEmptyStatement(pos) { } function deserializeExpressionStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExpressionStatement', - expression: deserializeExpression(pos + 8), - directive: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExpressionStatement', + expression: null, + directive: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.directive = null; + return node; } function deserializeIfStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'IfStatement', - test: deserializeExpression(pos + 8), - consequent: deserializeStatement(pos + 24), - alternate: deserializeOptionStatement(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'IfStatement', + test: null, + consequent: null, + alternate: null, + start, + end, + range: [start, end], + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeStatement(pos + 24); + node.alternate = deserializeOptionStatement(pos + 40); + return node; } function deserializeDoWhileStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'DoWhileStatement', - body: deserializeStatement(pos + 8), - test: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'DoWhileStatement', + body: null, + test: null, + start, + end, + range: [start, end], + }; + node.body = deserializeStatement(pos + 8); + node.test = deserializeExpression(pos + 24); + return node; } function deserializeWhileStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'WhileStatement', - test: deserializeExpression(pos + 8), - body: deserializeStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'WhileStatement', + test: null, + body: null, + start, + end, + range: [start, end], + }; + node.test = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + return node; } function deserializeForStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForStatement', - init: deserializeOptionForStatementInit(pos + 8), - test: deserializeOptionExpression(pos + 24), - update: deserializeOptionExpression(pos + 40), - body: deserializeStatement(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForStatement', + init: null, + test: null, + update: null, + body: null, + start, + end, + range: [start, end], + }; + node.init = deserializeOptionForStatementInit(pos + 8); + node.test = deserializeOptionExpression(pos + 24); + node.update = deserializeOptionExpression(pos + 40); + node.body = deserializeStatement(pos + 56); + return node; } function deserializeForStatementInit(pos) { @@ -1411,16 +1606,21 @@ function deserializeForStatementInit(pos) { } function deserializeForInStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForInStatement', - left: deserializeForStatementLeft(pos + 8), - right: deserializeExpression(pos + 24), - body: deserializeStatement(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForInStatement', + left: null, + right: null, + body: null, + start, + end, + range: [start, end], + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + return node; } function deserializeForStatementLeft(pos) { @@ -1453,134 +1653,176 @@ function deserializeForStatementLeft(pos) { } function deserializeForOfStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ForOfStatement', - await: deserializeBool(pos + 60), - left: deserializeForStatementLeft(pos + 8), - right: deserializeExpression(pos + 24), - body: deserializeStatement(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ForOfStatement', + await: deserializeBool(pos + 60), + left: null, + right: null, + body: null, + start, + end, + range: [start, end], + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + return node; } function deserializeContinueStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ContinueStatement', - label: deserializeOptionLabelIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ContinueStatement', + label: null, + start, + end, + range: [start, end], + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + return node; } function deserializeBreakStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'BreakStatement', - label: deserializeOptionLabelIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BreakStatement', + label: null, + start, + end, + range: [start, end], + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + return node; } function deserializeReturnStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ReturnStatement', - argument: deserializeOptionExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ReturnStatement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeOptionExpression(pos + 8); + return node; } function deserializeWithStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'WithStatement', - object: deserializeExpression(pos + 8), - body: deserializeStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'WithStatement', + object: null, + body: null, + start, + end, + range: [start, end], + }; + node.object = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + return node; } function deserializeSwitchStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SwitchStatement', - discriminant: deserializeExpression(pos + 8), - cases: deserializeVecSwitchCase(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SwitchStatement', + discriminant: null, + cases: null, + start, + end, + range: [start, end], + }; + node.discriminant = deserializeExpression(pos + 8); + node.cases = deserializeVecSwitchCase(pos + 24); + return node; } function deserializeSwitchCase(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'SwitchCase', - test: deserializeOptionExpression(pos + 8), - consequent: deserializeVecStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'SwitchCase', + test: null, + consequent: null, + start, + end, + range: [start, end], + }; + node.test = deserializeOptionExpression(pos + 8); + node.consequent = deserializeVecStatement(pos + 24); + return node; } function deserializeLabeledStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'LabeledStatement', - label: deserializeLabelIdentifier(pos + 8), - body: deserializeStatement(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'LabeledStatement', + label: null, + body: null, + start, + end, + range: [start, end], + }; + node.label = deserializeLabelIdentifier(pos + 8); + node.body = deserializeStatement(pos + 32); + return node; } function deserializeThrowStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ThrowStatement', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ThrowStatement', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeTryStatement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TryStatement', - block: deserializeBoxBlockStatement(pos + 8), - handler: deserializeOptionBoxCatchClause(pos + 16), - finalizer: deserializeOptionBoxBlockStatement(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TryStatement', + block: null, + handler: null, + finalizer: null, + start, + end, + range: [start, end], + }; + node.block = deserializeBoxBlockStatement(pos + 8); + node.handler = deserializeOptionBoxCatchClause(pos + 16); + node.finalizer = deserializeOptionBoxBlockStatement(pos + 24); + return node; } function deserializeCatchClause(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'CatchClause', - param: deserializeOptionCatchParameter(pos + 8), - body: deserializeBoxBlockStatement(pos + 48), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'CatchClause', + param: null, + body: null, + start, + end, + range: [start, end], + }; + node.param = deserializeOptionCatchParameter(pos + 8); + node.body = deserializeBoxBlockStatement(pos + 48); + return node; } function deserializeCatchParameter(pos) { @@ -1620,109 +1862,149 @@ function deserializeBindingPatternKind(pos) { } function deserializeAssignmentPattern(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'AssignmentPattern', - decorators: [], - left: deserializeBindingPattern(pos + 8), - right: deserializeExpression(pos + 40), - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'AssignmentPattern', + decorators: null, + left: null, + right: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.left = deserializeBindingPattern(pos + 8); + node.right = deserializeExpression(pos + 40); + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeObjectPattern(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ObjectPattern', + decorators: null, + properties: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }, properties = deserializeVecBindingProperty(pos + 8), rest = deserializeOptionBoxBindingRestElement(pos + 32); rest !== null && properties.push(rest); - return { - type: 'ObjectPattern', - decorators: [], - properties, - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + node.decorators = []; + node.properties = properties; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeBindingProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Property', - kind: 'init', - key: deserializePropertyKey(pos + 8), - value: deserializeBindingPattern(pos + 24), - method: false, - shorthand: deserializeBool(pos + 56), - computed: deserializeBool(pos + 57), - optional: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: deserializeBool(pos + 56), + computed: deserializeBool(pos + 57), + optional: null, + start, + end, + range: [start, end], + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeBindingPattern(pos + 24); + node.method = false; + node.optional = false; + return node; } function deserializeArrayPattern(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrayPattern', + decorators: null, + elements: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }, elements = deserializeVecOptionBindingPattern(pos + 8), rest = deserializeOptionBoxBindingRestElement(pos + 32); rest !== null && elements.push(rest); - return { - type: 'ArrayPattern', - decorators: [], - elements, - optional: false, - typeAnnotation: null, - start, - end, - range: [start, end], - }; + node.decorators = []; + node.elements = elements; + node.optional = false; + node.typeAnnotation = null; + return node; } function deserializeBindingRestElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'RestElement', - decorators: [], - argument: deserializeBindingPattern(pos + 8), - optional: false, - typeAnnotation: null, - value: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'RestElement', + decorators: null, + argument: null, + optional: null, + typeAnnotation: null, + value: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.argument = deserializeBindingPattern(pos + 8); + node.optional = false; + node.typeAnnotation = null; + node.value = null; + return node; } function deserializeFunction(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), params = deserializeBoxFormalParameters(pos + 56); - { - let thisParam = deserializeOptionBoxTSThisParameter(pos + 48); - thisParam !== null && params.unshift(thisParam); - } - return { - type: deserializeFunctionType(pos + 84), - id: deserializeOptionBindingIdentifier(pos + 8), - generator: deserializeBool(pos + 85), - async: deserializeBool(pos + 86), - declare: deserializeBool(pos + 87), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 64), - body: deserializeOptionBoxFunctionBody(pos + 72), - expression: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeFunctionType(pos + 84), + id: null, + generator: deserializeBool(pos + 85), + async: deserializeBool(pos + 86), + declare: deserializeBool(pos + 87), + typeParameters: null, + params: null, + returnType: null, + body: null, + expression: null, + start, + end, + range: [start, end], + }, + params = deserializeBoxFormalParameters(pos + 56); + { + let thisParam = deserializeOptionBoxTSThisParameter(pos + 48); + thisParam !== null && params.unshift(thisParam); + } + node.id = deserializeOptionBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 64); + node.body = deserializeOptionBoxFunctionBody(pos + 72); + node.expression = false; + return node; } function deserializeFunctionType(pos) { @@ -1744,18 +2026,22 @@ function deserializeFormalParameters(pos) { let params = deserializeVecFormalParameter(pos + 8); if (uint32[pos + 32 >> 2] !== 0 && uint32[pos + 36 >> 2] !== 0) { pos = uint32[pos + 32 >> 2]; - let start, end; - params.push({ - type: 'RestElement', - decorators: [], - argument: deserializeBindingPatternKind(pos + 8), - optional: deserializeBool(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - value: null, - start: start = deserializeU32(pos), - end: end = deserializeU32(pos + 4), - range: [start, end], - }); + let start, + end, + rest = { + type: 'RestElement', + decorators: [], + argument: null, + optional: deserializeBool(pos + 32), + typeAnnotation: null, + value: null, + start: start = deserializeU32(pos), + end: end = deserializeU32(pos + 4), + range: [start, end], + }; + rest.argument = deserializeBindingPatternKind(pos + 8); + rest.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + params.push(rest); } return params; } @@ -1776,82 +2062,108 @@ function deserializeFormalParameter(pos) { param = { type: 'TSParameterProperty', accessibility, - decorators: deserializeVecDecorator(pos + 8), + decorators: null, override, - parameter: deserializeBindingPattern(pos + 32), + parameter: null, readonly, static: false, start: start = deserializeU32(pos), end: end = deserializeU32(pos + 4), range: [start, end], }; + param.decorators = deserializeVecDecorator(pos + 8); + param.parameter = deserializeBindingPattern(pos + 32); } } return param; } function deserializeFunctionBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), body = deserializeVecDirective(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'BlockStatement', + body: null, + start, + end, + range: [start, end], + }, + body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); - return { - type: 'BlockStatement', - body, - start, - end, - range: [start, end], - }; + node.body = body; + return node; } function deserializeArrowFunctionExpression(pos) { let expression = deserializeBool(pos + 44), start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ArrowFunctionExpression', + expression, + async: deserializeBool(pos + 45), + typeParameters: null, + params: null, + returnType: null, + body: null, + id: null, + generator: null, + start, + end, + range: [start, end], + }, body = deserializeBoxFunctionBody(pos + 32); - return { - type: 'ArrowFunctionExpression', - expression, - async: deserializeBool(pos + 45), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 24), - body: expression ? body.body[0].expression : body, - id: null, - generator: false, - start, - end, - range: [start, end], - }; + expression === true && (body = body.body[0].expression); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.body = body; + node.id = null; + node.generator = false; + return node; } function deserializeYieldExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'YieldExpression', - delegate: deserializeBool(pos + 24), - argument: deserializeOptionExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'YieldExpression', + delegate: deserializeBool(pos + 24), + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeOptionExpression(pos + 8); + return node; } function deserializeClass(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeClassType(pos + 132), - decorators: deserializeVecDecorator(pos + 8), - id: deserializeOptionBindingIdentifier(pos + 32), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 64), - superClass: deserializeOptionExpression(pos + 72), - superTypeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 88), - implements: deserializeVecTSClassImplements(pos + 96), - body: deserializeBoxClassBody(pos + 120), - abstract: deserializeBool(pos + 133), - declare: deserializeBool(pos + 134), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeClassType(pos + 132), + decorators: null, + id: null, + typeParameters: null, + superClass: null, + superTypeArguments: null, + implements: null, + body: null, + abstract: deserializeBool(pos + 133), + declare: deserializeBool(pos + 134), + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.id = deserializeOptionBindingIdentifier(pos + 32); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 64); + node.superClass = deserializeOptionExpression(pos + 72); + node.superTypeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 88); + node.implements = deserializeVecTSClassImplements(pos + 96); + node.body = deserializeBoxClassBody(pos + 120); + return node; } function deserializeClassType(pos) { @@ -1866,14 +2178,17 @@ function deserializeClassType(pos) { } function deserializeClassBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ClassBody', - body: deserializeVecClassElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ClassBody', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecClassElement(pos + 8); + return node; } function deserializeClassElement(pos) { @@ -1894,22 +2209,27 @@ function deserializeClassElement(pos) { } function deserializeMethodDefinition(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeMethodDefinitionType(pos + 56), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - value: deserializeBoxFunction(pos + 48), - kind: deserializeMethodDefinitionKind(pos + 57), - computed: deserializeBool(pos + 58), - static: deserializeBool(pos + 59), - override: deserializeBool(pos + 60), - optional: deserializeBool(pos + 61), - accessibility: deserializeOptionTSAccessibility(pos + 62), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeMethodDefinitionType(pos + 56), + decorators: null, + key: null, + value: null, + kind: deserializeMethodDefinitionKind(pos + 57), + computed: deserializeBool(pos + 58), + static: deserializeBool(pos + 59), + override: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + accessibility: deserializeOptionTSAccessibility(pos + 62), + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeBoxFunction(pos + 48); + return node; } function deserializeMethodDefinitionType(pos) { @@ -1924,25 +2244,31 @@ function deserializeMethodDefinitionType(pos) { } function deserializePropertyDefinition(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializePropertyDefinitionType(pos + 72), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 48), - value: deserializeOptionExpression(pos + 56), - computed: deserializeBool(pos + 73), - static: deserializeBool(pos + 74), - declare: deserializeBool(pos + 75), - override: deserializeBool(pos + 76), - optional: deserializeBool(pos + 77), - definite: deserializeBool(pos + 78), - readonly: deserializeBool(pos + 79), - accessibility: deserializeOptionTSAccessibility(pos + 80), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializePropertyDefinitionType(pos + 72), + decorators: null, + key: null, + typeAnnotation: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + declare: deserializeBool(pos + 75), + override: deserializeBool(pos + 76), + optional: deserializeBool(pos + 77), + definite: deserializeBool(pos + 78), + readonly: deserializeBool(pos + 79), + accessibility: deserializeOptionTSAccessibility(pos + 80), + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.value = deserializeOptionExpression(pos + 56); + return node; } function deserializePropertyDefinitionType(pos) { @@ -1983,14 +2309,17 @@ function deserializePrivateIdentifier(pos) { } function deserializeStaticBlock(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'StaticBlock', - body: deserializeVecStatement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'StaticBlock', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecStatement(pos + 8); + return node; } function deserializeAccessorPropertyType(pos) { @@ -2005,57 +2334,74 @@ function deserializeAccessorPropertyType(pos) { } function deserializeAccessorProperty(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: deserializeAccessorPropertyType(pos + 72), - decorators: deserializeVecDecorator(pos + 8), - key: deserializePropertyKey(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 48), - value: deserializeOptionExpression(pos + 56), - computed: deserializeBool(pos + 73), - static: deserializeBool(pos + 74), - override: deserializeBool(pos + 75), - definite: deserializeBool(pos + 76), - accessibility: deserializeOptionTSAccessibility(pos + 77), - declare: false, - optional: false, - readonly: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: deserializeAccessorPropertyType(pos + 72), + decorators: null, + key: null, + typeAnnotation: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + override: deserializeBool(pos + 75), + definite: deserializeBool(pos + 76), + accessibility: deserializeOptionTSAccessibility(pos + 77), + declare: null, + optional: null, + readonly: null, + start, + end, + range: [start, end], + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.value = deserializeOptionExpression(pos + 56); + node.declare = false; + node.optional = false; + node.readonly = false; + return node; } function deserializeImportExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportExpression', - source: deserializeExpression(pos + 8), - options: deserializeOptionExpression(pos + 24), - phase: deserializeOptionImportPhase(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportExpression', + source: null, + options: null, + phase: deserializeOptionImportPhase(pos + 40), + start, + end, + range: [start, end], + }; + node.source = deserializeExpression(pos + 8); + node.options = deserializeOptionExpression(pos + 24); + return node; } function deserializeImportDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ImportDeclaration', + specifiers: null, + source: null, + phase: deserializeOptionImportPhase(pos + 88), + attributes: null, + importKind: deserializeImportOrExportKind(pos + 89), + start, + end, + range: [start, end], + }, specifiers = deserializeOptionVecImportDeclarationSpecifier(pos + 8); specifiers === null && (specifiers = []); let withClause = deserializeOptionBoxWithClause(pos + 80); - return { - type: 'ImportDeclaration', - specifiers, - source: deserializeStringLiteral(pos + 32), - phase: deserializeOptionImportPhase(pos + 88), - attributes: withClause === null ? [] : withClause.attributes, - importKind: deserializeImportOrExportKind(pos + 89), - start, - end, - range: [start, end], - }; + node.specifiers = specifiers; + node.source = deserializeStringLiteral(pos + 32); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeImportPhase(pos) { @@ -2083,38 +2429,48 @@ function deserializeImportDeclarationSpecifier(pos) { } function deserializeImportSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportSpecifier', - imported: deserializeModuleExportName(pos + 8), - local: deserializeBindingIdentifier(pos + 64), - importKind: deserializeImportOrExportKind(pos + 96), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportSpecifier', + imported: null, + local: null, + importKind: deserializeImportOrExportKind(pos + 96), + start, + end, + range: [start, end], + }; + node.imported = deserializeModuleExportName(pos + 8); + node.local = deserializeBindingIdentifier(pos + 64); + return node; } function deserializeImportDefaultSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportDefaultSpecifier', - local: deserializeBindingIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportDefaultSpecifier', + local: null, + start, + end, + range: [start, end], + }; + node.local = deserializeBindingIdentifier(pos + 8); + return node; } function deserializeImportNamespaceSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportNamespaceSpecifier', - local: deserializeBindingIdentifier(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportNamespaceSpecifier', + local: null, + start, + end, + range: [start, end], + }; + node.local = deserializeBindingIdentifier(pos + 8); + return node; } function deserializeWithClause(pos) { @@ -2122,15 +2478,19 @@ function deserializeWithClause(pos) { } function deserializeImportAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ImportAttribute', - key: deserializeImportAttributeKey(pos + 8), - value: deserializeStringLiteral(pos + 64), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ImportAttribute', + key: null, + value: null, + start, + end, + range: [start, end], + }; + node.key = deserializeImportAttributeKey(pos + 8); + node.value = deserializeStringLiteral(pos + 64); + return node; } function deserializeImportAttributeKey(pos) { @@ -2145,59 +2505,78 @@ function deserializeImportAttributeKey(pos) { } function deserializeExportNamedDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), withClause = deserializeOptionBoxWithClause(pos + 96); - return { - type: 'ExportNamedDeclaration', - declaration: deserializeOptionDeclaration(pos + 8), - specifiers: deserializeVecExportSpecifier(pos + 24), - source: deserializeOptionStringLiteral(pos + 48), - exportKind: deserializeImportOrExportKind(pos + 104), - attributes: withClause === null ? [] : withClause.attributes, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportNamedDeclaration', + declaration: null, + specifiers: null, + source: null, + exportKind: deserializeImportOrExportKind(pos + 104), + attributes: null, + start, + end, + range: [start, end], + }, + withClause = deserializeOptionBoxWithClause(pos + 96); + node.declaration = deserializeOptionDeclaration(pos + 8); + node.specifiers = deserializeVecExportSpecifier(pos + 24); + node.source = deserializeOptionStringLiteral(pos + 48); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeExportDefaultDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExportDefaultDeclaration', - declaration: deserializeExportDefaultDeclarationKind(pos + 8), - exportKind: 'value', - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportDefaultDeclaration', + declaration: null, + exportKind: null, + start, + end, + range: [start, end], + }; + node.declaration = deserializeExportDefaultDeclarationKind(pos + 8); + node.exportKind = 'value'; + return node; } function deserializeExportAllDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'ExportAllDeclaration', + exported: null, + source: null, + attributes: null, + exportKind: deserializeImportOrExportKind(pos + 120), + start, + end, + range: [start, end], + }, withClause = deserializeOptionBoxWithClause(pos + 112); - return { - type: 'ExportAllDeclaration', - exported: deserializeOptionModuleExportName(pos + 8), - source: deserializeStringLiteral(pos + 64), - attributes: withClause === null ? [] : withClause.attributes, - exportKind: deserializeImportOrExportKind(pos + 120), - start, - end, - range: [start, end], - }; + node.exported = deserializeOptionModuleExportName(pos + 8); + node.source = deserializeStringLiteral(pos + 64); + node.attributes = withClause === null ? [] : withClause.attributes; + return node; } function deserializeExportSpecifier(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'ExportSpecifier', - local: deserializeModuleExportName(pos + 8), - exported: deserializeModuleExportName(pos + 64), - exportKind: deserializeImportOrExportKind(pos + 120), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'ExportSpecifier', + local: null, + exported: null, + exportKind: deserializeImportOrExportKind(pos + 120), + start, + end, + range: [start, end], + }; + node.local = deserializeModuleExportName(pos + 8); + node.exported = deserializeModuleExportName(pos + 64); + return node; } function deserializeExportDefaultDeclarationKind(pos) { @@ -2313,39 +2692,51 @@ function deserializeModuleExportName(pos) { } function deserializeV8IntrinsicExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'V8IntrinsicExpression', - name: deserializeIdentifierName(pos + 8), - arguments: deserializeVecArgument(pos + 32), - start, - end, - range: [start, end], - }; -} - + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'V8IntrinsicExpression', + name: null, + arguments: null, + start, + end, + range: [start, end], + }; + node.name = deserializeIdentifierName(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + return node; +} + function deserializeBooleanLiteral(pos) { - let value = deserializeBool(pos + 8), start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Literal', - value, - raw: start === 0 && end === 0 ? null : value + '', - start, - end, - range: [start, end], - }; + let value = deserializeBool(pos + 8), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value, + raw: null, + start, + end, + range: [start, end], + }; + node.raw = start === 0 && end === 0 ? null : value + ''; + return node; } function deserializeNullLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Literal', - value: null, - raw: start === 0 && end === 0 ? null : 'null', - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: null, + start, + end, + range: [start, end], + }; + node.value = null; + node.raw = start === 0 && end === 0 ? null : 'null'; + return node; } function deserializeNumericLiteral(pos) { @@ -2361,46 +2752,61 @@ function deserializeNumericLiteral(pos) { } function deserializeStringLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), value = deserializeStr(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + start, + end, + range: [start, end], + }, + value = deserializeStr(pos + 8); deserializeBool(pos + 40) && (value = value.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); - return { - type: 'Literal', - value, - raw: deserializeOptionStr(pos + 24), - start, - end, - range: [start, end], - }; + node.value = value; + return node; } function deserializeBigIntLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), bigint = deserializeStr(pos + 8); - return { - type: 'Literal', - value: BigInt(bigint), - raw: deserializeOptionStr(pos + 24), - bigint, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + bigint: null, + start, + end, + range: [start, end], + }, + bigint = deserializeStr(pos + 8); + node.value = BigInt(bigint); + node.bigint = bigint; + return node; } function deserializeRegExpLiteral(pos) { - let regex = deserializeRegExp(pos + 8), start = deserializeU32(pos), end = deserializeU32(pos + 4), value = null; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 40), + regex: null, + start, + end, + range: [start, end], + }, + regex = deserializeRegExp(pos + 8), + value = null; try { value = new RegExp(regex.pattern, regex.flags); } catch {} - return { - type: 'Literal', - value, - raw: deserializeOptionStr(pos + 40), - regex, - start, - end, - range: [start, end], - }; + node.value = value; + node.regex = regex; + return node; } function deserializeRegExp(pos) { @@ -2425,58 +2831,76 @@ function deserializeRegExpFlags(pos) { } function deserializeJSXElement(pos) { - let closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), - start = deserializeU32(pos), + let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'JSXElement', + openingElement: null, + children: null, + closingElement: null, + start, + end, + range: [start, end], + }, + closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), openingElement = deserializeBoxJSXOpeningElement(pos + 8); closingElement === null && (openingElement.selfClosing = true); - return { - type: 'JSXElement', - openingElement, - children: deserializeVecJSXChild(pos + 16), - closingElement, - start, - end, - range: [start, end], - }; + node.openingElement = openingElement; + node.children = deserializeVecJSXChild(pos + 16); + node.closingElement = closingElement; + return node; } function deserializeJSXOpeningElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXOpeningElement', - name: deserializeJSXElementName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - attributes: deserializeVecJSXAttributeItem(pos + 32), - selfClosing: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXOpeningElement', + name: null, + typeArguments: null, + attributes: null, + selfClosing: null, + start, + end, + range: [start, end], + }; + node.name = deserializeJSXElementName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.attributes = deserializeVecJSXAttributeItem(pos + 32); + node.selfClosing = false; + return node; } function deserializeJSXClosingElement(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXClosingElement', - name: deserializeJSXElementName(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXClosingElement', + name: null, + start, + end, + range: [start, end], + }; + node.name = deserializeJSXElementName(pos + 8); + return node; } function deserializeJSXFragment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXFragment', - openingFragment: deserializeJSXOpeningFragment(pos + 8), - children: deserializeVecJSXChild(pos + 16), - closingFragment: deserializeJSXClosingFragment(pos + 40), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXFragment', + openingFragment: null, + children: null, + closingFragment: null, + start, + end, + range: [start, end], + }; + node.openingFragment = deserializeJSXOpeningFragment(pos + 8); + node.children = deserializeVecJSXChild(pos + 16); + node.closingFragment = deserializeJSXClosingFragment(pos + 40); + return node; } function deserializeJSXOpeningFragment(pos) { @@ -2531,27 +2955,35 @@ function deserializeJSXElementName(pos) { } function deserializeJSXNamespacedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXNamespacedName', - namespace: deserializeJSXIdentifier(pos + 8), - name: deserializeJSXIdentifier(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXNamespacedName', + namespace: null, + name: null, + start, + end, + range: [start, end], + }; + node.namespace = deserializeJSXIdentifier(pos + 8); + node.name = deserializeJSXIdentifier(pos + 32); + return node; } function deserializeJSXMemberExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXMemberExpression', - object: deserializeJSXMemberExpressionObject(pos + 8), - property: deserializeJSXIdentifier(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXMemberExpression', + object: null, + property: null, + start, + end, + range: [start, end], + }; + node.object = deserializeJSXMemberExpressionObject(pos + 8); + node.property = deserializeJSXIdentifier(pos + 24); + return node; } function deserializeJSXMemberExpressionObject(pos) { @@ -2582,14 +3014,17 @@ function deserializeJSXMemberExpressionObject(pos) { } function deserializeJSXExpressionContainer(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXExpressionContainer', - expression: deserializeJSXExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXExpressionContainer', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeJSXExpression(pos + 8); + return node; } function deserializeJSXExpression(pos) { @@ -2709,26 +3144,33 @@ function deserializeJSXAttributeItem(pos) { } function deserializeJSXAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXAttribute', - name: deserializeJSXAttributeName(pos + 8), - value: deserializeOptionJSXAttributeValue(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXAttribute', + name: null, + value: null, + start, + end, + range: [start, end], + }; + node.name = deserializeJSXAttributeName(pos + 8); + node.value = deserializeOptionJSXAttributeValue(pos + 24); + return node; } function deserializeJSXSpreadAttribute(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXSpreadAttribute', - argument: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXSpreadAttribute', + argument: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeExpression(pos + 8); + return node; } function deserializeJSXAttributeName(pos) { @@ -2786,14 +3228,17 @@ function deserializeJSXChild(pos) { } function deserializeJSXSpreadChild(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'JSXSpreadChild', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'JSXSpreadChild', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeJSXText(pos) { @@ -2809,55 +3254,73 @@ function deserializeJSXText(pos) { } function deserializeTSThisParameter(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: 'this', - optional: false, - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 16), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.name = 'this'; + node.optional = false; + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + return node; } function deserializeTSEnumDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumDeclaration', - id: deserializeBindingIdentifier(pos + 8), - body: deserializeTSEnumBody(pos + 40), - const: deserializeBool(pos + 76), - declare: deserializeBool(pos + 77), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumDeclaration', + id: null, + body: null, + const: deserializeBool(pos + 76), + declare: deserializeBool(pos + 77), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.body = deserializeTSEnumBody(pos + 40); + return node; } function deserializeTSEnumBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumBody', - members: deserializeVecTSEnumMember(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumBody', + members: null, + start, + end, + range: [start, end], + }; + node.members = deserializeVecTSEnumMember(pos + 8); + return node; } function deserializeTSEnumMember(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSEnumMember', - id: deserializeTSEnumMemberName(pos + 8), - initializer: deserializeOptionExpression(pos + 24), - computed: deserializeU8(pos + 8) > 1, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSEnumMember', + id: null, + initializer: null, + computed: null, + start, + end, + range: [start, end], + }; + node.id = deserializeTSEnumMemberName(pos + 8); + node.initializer = deserializeOptionExpression(pos + 24); + node.computed = deserializeU8(pos + 8) > 1; + return node; } function deserializeTSEnumMemberName(pos) { @@ -2876,25 +3339,31 @@ function deserializeTSEnumMemberName(pos) { } function deserializeTSTypeAnnotation(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAnnotation', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; -} + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAnnotation', + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; +} function deserializeTSLiteralType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSLiteralType', - literal: deserializeTSLiteral(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSLiteralType', + literal: null, + start, + end, + range: [start, end], + }; + node.literal = deserializeTSLiteral(pos + 8); + return node; } function deserializeTSLiteral(pos) { @@ -2998,55 +3467,72 @@ function deserializeTSType(pos) { } function deserializeTSConditionalType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConditionalType', - checkType: deserializeTSType(pos + 8), - extendsType: deserializeTSType(pos + 24), - trueType: deserializeTSType(pos + 40), - falseType: deserializeTSType(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConditionalType', + checkType: null, + extendsType: null, + trueType: null, + falseType: null, + start, + end, + range: [start, end], + }; + node.checkType = deserializeTSType(pos + 8); + node.extendsType = deserializeTSType(pos + 24); + node.trueType = deserializeTSType(pos + 40); + node.falseType = deserializeTSType(pos + 56); + return node; } function deserializeTSUnionType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSUnionType', - types: deserializeVecTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSUnionType', + types: null, + start, + end, + range: [start, end], + }; + node.types = deserializeVecTSType(pos + 8); + return node; } function deserializeTSIntersectionType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIntersectionType', - types: deserializeVecTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIntersectionType', + types: null, + start, + end, + range: [start, end], + }; + node.types = deserializeVecTSType(pos + 8); + return node; } function deserializeTSParenthesizedType(pos) { - return deserializeTSType(pos + 8); + let node; + node = deserializeTSType(pos + 8); + return node; } function deserializeTSTypeOperator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeOperator', - operator: deserializeTSTypeOperatorOperator(pos + 24), - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeOperator', + operator: deserializeTSTypeOperatorOperator(pos + 24), + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSTypeOperatorOperator(pos) { @@ -3063,72 +3549,92 @@ function deserializeTSTypeOperatorOperator(pos) { } function deserializeTSArrayType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSArrayType', - elementType: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSArrayType', + elementType: null, + start, + end, + range: [start, end], + }; + node.elementType = deserializeTSType(pos + 8); + return node; } function deserializeTSIndexedAccessType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIndexedAccessType', - objectType: deserializeTSType(pos + 8), - indexType: deserializeTSType(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIndexedAccessType', + objectType: null, + indexType: null, + start, + end, + range: [start, end], + }; + node.objectType = deserializeTSType(pos + 8); + node.indexType = deserializeTSType(pos + 24); + return node; } function deserializeTSTupleType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTupleType', - elementTypes: deserializeVecTSTupleElement(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTupleType', + elementTypes: null, + start, + end, + range: [start, end], + }; + node.elementTypes = deserializeVecTSTupleElement(pos + 8); + return node; } function deserializeTSNamedTupleMember(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNamedTupleMember', - label: deserializeIdentifierName(pos + 8), - elementType: deserializeTSTupleElement(pos + 32), - optional: deserializeBool(pos + 48), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNamedTupleMember', + label: null, + elementType: null, + optional: deserializeBool(pos + 48), + start, + end, + range: [start, end], + }; + node.label = deserializeIdentifierName(pos + 8); + node.elementType = deserializeTSTupleElement(pos + 32); + return node; } function deserializeTSOptionalType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSOptionalType', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSOptionalType', + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSRestType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSRestType', - typeAnnotation: deserializeTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSRestType', + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeTSTupleElement(pos) { @@ -3357,15 +3863,19 @@ function deserializeTSBigIntKeyword(pos) { } function deserializeTSTypeReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeReference', - typeName: deserializeTSTypeName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeReference', + typeName: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.typeName = deserializeTSTypeName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypeName(pos) { @@ -3382,67 +3892,87 @@ function deserializeTSTypeName(pos) { } function deserializeTSQualifiedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSQualifiedName', - left: deserializeTSTypeName(pos + 8), - right: deserializeIdentifierName(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeTSTypeName(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + return node; } function deserializeTSTypeParameterInstantiation(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameterInstantiation', - params: deserializeVecTSType(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameterInstantiation', + params: null, + start, + end, + range: [start, end], + }; + node.params = deserializeVecTSType(pos + 8); + return node; } function deserializeTSTypeParameter(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameter', - name: deserializeBindingIdentifier(pos + 8), - constraint: deserializeOptionTSType(pos + 40), - default: deserializeOptionTSType(pos + 56), - in: deserializeBool(pos + 72), - out: deserializeBool(pos + 73), - const: deserializeBool(pos + 74), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameter', + name: null, + constraint: null, + default: null, + in: deserializeBool(pos + 72), + out: deserializeBool(pos + 73), + const: deserializeBool(pos + 74), + start, + end, + range: [start, end], + }; + node.name = deserializeBindingIdentifier(pos + 8); + node.constraint = deserializeOptionTSType(pos + 40); + node.default = deserializeOptionTSType(pos + 56); + return node; } function deserializeTSTypeParameterDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeParameterDeclaration', - params: deserializeVecTSTypeParameter(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeParameterDeclaration', + params: null, + start, + end, + range: [start, end], + }; + node.params = deserializeVecTSTypeParameter(pos + 8); + return node; } function deserializeTSTypeAliasDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAliasDeclaration', - id: deserializeBindingIdentifier(pos + 8), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - typeAnnotation: deserializeTSType(pos + 48), - declare: deserializeBool(pos + 68), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAliasDeclaration', + id: null, + typeParameters: null, + typeAnnotation: null, + declare: deserializeBool(pos + 68), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.typeAnnotation = deserializeTSType(pos + 48); + return node; } function deserializeTSAccessibility(pos) { @@ -3459,15 +3989,26 @@ function deserializeTSAccessibility(pos) { } function deserializeTSClassImplements(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), expression = deserializeTSTypeName(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSClassImplements', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + }, + expression = deserializeTSTypeName(pos + 8); if (expression.type === 'TSQualifiedName') { let object = expression.left, + { right } = expression, start, end, - parent = expression = { + previous = expression = { type: 'MemberExpression', object, - property: expression.right, + property: right, optional: false, computed: false, start: start = expression.start, @@ -3475,11 +4016,11 @@ function deserializeTSClassImplements(pos) { range: [start, end], }; for (; object.type === 'TSQualifiedName';) { - let { left } = object, start, end; - parent = parent.object = { + let { left, right } = object; + previous = previous.object = { type: 'MemberExpression', object: left, - property: object.right, + property: right, optional: false, computed: false, start: start = object.start, @@ -3489,57 +4030,67 @@ function deserializeTSClassImplements(pos) { object = left; } } - return { - type: 'TSClassImplements', - expression, - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + node.expression = expression; + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSInterfaceDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceDeclaration', - id: deserializeBindingIdentifier(pos + 8), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), - extends: deserializeVecTSInterfaceHeritage(pos + 48), - body: deserializeBoxTSInterfaceBody(pos + 72), - declare: deserializeBool(pos + 84), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceDeclaration', + id: null, + typeParameters: null, + extends: null, + body: null, + declare: deserializeBool(pos + 84), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.extends = deserializeVecTSInterfaceHeritage(pos + 48); + node.body = deserializeBoxTSInterfaceBody(pos + 72); + return node; } function deserializeTSInterfaceBody(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceBody', - body: deserializeVecTSSignature(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceBody', + body: null, + start, + end, + range: [start, end], + }; + node.body = deserializeVecTSSignature(pos + 8); + return node; } function deserializeTSPropertySignature(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSPropertySignature', - computed: deserializeBool(pos + 32), - optional: deserializeBool(pos + 33), - readonly: deserializeBool(pos + 34), - key: deserializePropertyKey(pos + 8), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - accessibility: null, - static: false, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSPropertySignature', + computed: deserializeBool(pos + 32), + optional: deserializeBool(pos + 33), + readonly: deserializeBool(pos + 34), + key: null, + typeAnnotation: null, + accessibility: null, + static: null, + start, + end, + range: [start, end], + }; + node.key = deserializePropertyKey(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.accessibility = null; + node.static = false; + return node; } function deserializeTSSignature(pos) { @@ -3560,35 +4111,44 @@ function deserializeTSSignature(pos) { } function deserializeTSIndexSignature(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSIndexSignature', - parameters: deserializeVecTSIndexSignatureName(pos + 8), - typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 32), - readonly: deserializeBool(pos + 40), - static: deserializeBool(pos + 41), - accessibility: null, - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSIndexSignature', + parameters: null, + typeAnnotation: null, + readonly: deserializeBool(pos + 40), + static: deserializeBool(pos + 41), + accessibility: null, + start, + end, + range: [start, end], + }; + node.parameters = deserializeVecTSIndexSignatureName(pos + 8); + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 32); + node.accessibility = null; + return node; } function deserializeTSCallSignatureDeclaration(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSCallSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }, params = deserializeBoxFormalParameters(pos + 24), thisParam = deserializeOptionBoxTSThisParameter(pos + 16); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSCallSignatureDeclaration', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 32), - start, - end, - range: [start, end], - }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 32); + return node; } function deserializeTSMethodSignatureKind(pos) { @@ -3607,77 +4167,103 @@ function deserializeTSMethodSignatureKind(pos) { function deserializeTSMethodSignature(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSMethodSignature', + key: null, + computed: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + kind: deserializeTSMethodSignatureKind(pos + 62), + typeParameters: null, + params: null, + returnType: null, + accessibility: null, + readonly: null, + static: null, + start, + end, + range: [start, end], + }, params = deserializeBoxFormalParameters(pos + 40), thisParam = deserializeOptionBoxTSThisParameter(pos + 32); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSMethodSignature', - key: deserializePropertyKey(pos + 8), - computed: deserializeBool(pos + 60), - optional: deserializeBool(pos + 61), - kind: deserializeTSMethodSignatureKind(pos + 62), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 24), - params, - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 48), - accessibility: null, - readonly: false, - static: false, - start, - end, - range: [start, end], - }; + node.key = deserializePropertyKey(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 24); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.accessibility = null; + node.readonly = false; + node.static = false; + return node; } function deserializeTSConstructSignatureDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConstructSignatureDeclaration', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeOptionBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConstructSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSIndexSignatureName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Identifier', - decorators: [], - name: deserializeStr(pos + 8), - optional: false, - typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSInterfaceHeritage(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInterfaceHeritage', - expression: deserializeExpression(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInterfaceHeritage', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypePredicate(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypePredicate', - parameterName: deserializeTSTypePredicateName(pos + 8), - asserts: deserializeBool(pos + 32), - typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypePredicate', + parameterName: null, + asserts: deserializeBool(pos + 32), + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.parameterName = deserializeTSTypePredicateName(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSTypePredicateName(pos) { @@ -3697,56 +4283,24 @@ function deserializeTSModuleDeclaration(pos) { start = deserializeU32(pos), end = deserializeU32(pos + 4), declare = deserializeBool(pos + 85), - id = deserializeTSModuleDeclarationName(pos + 8), + node, body = deserializeOptionTSModuleDeclarationBody(pos + 64); - // Flatten `body`, and nest `id` - if (body !== null && body.type === 'TSModuleDeclaration') { - let innerId = body.id; - if (innerId.type === 'Identifier') { - let start, end; - id = { - type: 'TSQualifiedName', - left: id, - right: innerId, - start: start = id.start, - end: end = innerId.end, - range: [start, end], - }; - } else { - // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of - // this module on left, and previous `left` of innermost `TSQualifiedName` on right - for (;;) { - innerId.start = innerId.range[0] = id.start; - if (innerId.left.type === 'Identifier') break; - innerId = innerId.left; - } - let start, end; - innerId.left = { - type: 'TSQualifiedName', - left: id, - right: innerId.left, - start: start = id.start, - end: end = innerId.left.end, - range: [start, end], - }; - id = body.id; - } - body = Object.hasOwn(body, 'body') ? body.body : null; - } - return body === null - ? { + if (body === null) { + node = { type: 'TSModuleDeclaration', - id, + id: null, kind, declare, global, start, end, range: [start, end], - } - : { + }; + node.id = deserializeTSModuleDeclarationName(pos + 8); + } else { + node = { type: 'TSModuleDeclaration', - id, + id: null, body, kind, declare, @@ -3755,6 +4309,47 @@ function deserializeTSModuleDeclaration(pos) { end, range: [start, end], }; + let id = deserializeTSModuleDeclarationName(pos + 8); + if (body.type === 'TSModuleBlock') node.id = id; + else { + let innerId = body.id; + if (innerId.type === 'Identifier') { + let start, end; + node.id = { + type: 'TSQualifiedName', + left: id, + right: innerId, + start: start = id.start, + end: end = innerId.end, + range: [start, end], + }; + } else { + // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of + // this module on left, and previous `left` of innermost `TSQualifiedName` on right + node.id = innerId; + let { start } = id; + for (;;) { + innerId.start = innerId.range[0] = start; + if (innerId.left.type === 'Identifier') break; + innerId = innerId.left; + } + let end, right = innerId.left; + innerId.left = { + type: 'TSQualifiedName', + left: id, + right, + start, + end: end = right.end, + range: [start, end], + }; + } + if (Object.hasOwn(body, 'body')) { + body = body.body; + node.body = body; + } else body = null; + } + } + return node; } function deserializeTSModuleDeclarationKind(pos) { @@ -3793,49 +4388,63 @@ function deserializeTSModuleDeclarationBody(pos) { } function deserializeTSModuleBlock(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4), body = deserializeVecDirective(pos + 8); + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSModuleBlock', + body: null, + start, + end, + range: [start, end], + }, + body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); - return { - type: 'TSModuleBlock', - body, - start, - end, - range: [start, end], - }; + node.body = body; + return node; } function deserializeTSTypeLiteral(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeLiteral', - members: deserializeVecTSSignature(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeLiteral', + members: null, + start, + end, + range: [start, end], + }; + node.members = deserializeVecTSSignature(pos + 8); + return node; } function deserializeTSInferType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInferType', - typeParameter: deserializeBoxTSTypeParameter(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInferType', + typeParameter: null, + start, + end, + range: [start, end], + }; + node.typeParameter = deserializeBoxTSTypeParameter(pos + 8); + return node; } function deserializeTSTypeQuery(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeQuery', - exprName: deserializeTSTypeQueryExprName(pos + 8), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeQuery', + exprName: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.exprName = deserializeTSTypeQueryExprName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeTSTypeQueryExprName(pos) { @@ -3854,17 +4463,23 @@ function deserializeTSTypeQueryExprName(pos) { } function deserializeTSImportType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSImportType', - argument: deserializeTSType(pos + 8), - options: deserializeOptionBoxObjectExpression(pos + 24), - qualifier: deserializeOptionTSImportTypeQualifier(pos + 32), - typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 48), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSImportType', + argument: null, + options: null, + qualifier: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.argument = deserializeTSType(pos + 8); + node.options = deserializeOptionBoxObjectExpression(pos + 24); + node.qualifier = deserializeOptionTSImportTypeQualifier(pos + 32); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 48); + return node; } function deserializeTSImportTypeQualifier(pos) { @@ -3879,66 +4494,87 @@ function deserializeTSImportTypeQualifier(pos) { } function deserializeTSImportTypeQualifiedName(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSQualifiedName', - left: deserializeTSImportTypeQualifier(pos + 8), - right: deserializeIdentifierName(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + range: [start, end], + }; + node.left = deserializeTSImportTypeQualifier(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + return node; } function deserializeTSFunctionType(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSFunctionType', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }, params = deserializeBoxFormalParameters(pos + 24), thisParam = deserializeOptionBoxTSThisParameter(pos + 16); thisParam !== null && params.unshift(thisParam); - return { - type: 'TSFunctionType', - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params, - returnType: deserializeBoxTSTypeAnnotation(pos + 32), - start, - end, - range: [start, end], - }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeBoxTSTypeAnnotation(pos + 32); + return node; } function deserializeTSConstructorType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSConstructorType', - abstract: deserializeBool(pos + 32), - typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), - params: deserializeBoxFormalParameters(pos + 16), - returnType: deserializeBoxTSTypeAnnotation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSConstructorType', + abstract: deserializeBool(pos + 32), + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeBoxTSTypeAnnotation(pos + 24); + return node; } function deserializeTSMappedType(pos) { let start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type: 'TSMappedType', + key: null, + constraint: null, + nameType: null, + typeAnnotation: null, + optional: null, + readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), + start, + end, + range: [start, end], + }, typeParameter = deserializeBoxTSTypeParameter(pos + 8), + key = typeParameter.name, + { constraint } = typeParameter, optional = deserializeOptionTSMappedTypeModifierOperator(pos + 52); optional === null && (optional = false); - return { - type: 'TSMappedType', - key: typeParameter.name, - constraint: typeParameter.constraint, - nameType: deserializeOptionTSType(pos + 16), - typeAnnotation: deserializeOptionTSType(pos + 32), - optional, - readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), - start, - end, - range: [start, end], - }; + node.key = key; + node.constraint = constraint; + node.nameType = deserializeOptionTSType(pos + 16); + node.typeAnnotation = deserializeOptionTSType(pos + 32); + node.optional = optional; + return node; } function deserializeTSMappedTypeModifierOperator(pos) { @@ -3955,64 +4591,84 @@ function deserializeTSMappedTypeModifierOperator(pos) { } function deserializeTSTemplateLiteralType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTemplateLiteralType', - quasis: deserializeVecTemplateElement(pos + 8), - types: deserializeVecTSType(pos + 32), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTemplateLiteralType', + quasis: null, + types: null, + start, + end, + range: [start, end], + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.types = deserializeVecTSType(pos + 32); + return node; } function deserializeTSAsExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSAsExpression', - expression: deserializeExpression(pos + 8), - typeAnnotation: deserializeTSType(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSAsExpression', + expression: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + return node; } function deserializeTSSatisfiesExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSSatisfiesExpression', - expression: deserializeExpression(pos + 8), - typeAnnotation: deserializeTSType(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSSatisfiesExpression', + expression: null, + typeAnnotation: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + return node; } function deserializeTSTypeAssertion(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSTypeAssertion', - typeAnnotation: deserializeTSType(pos + 8), - expression: deserializeExpression(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSTypeAssertion', + typeAnnotation: null, + expression: null, + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + node.expression = deserializeExpression(pos + 24); + return node; } function deserializeTSImportEqualsDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSImportEqualsDeclaration', - id: deserializeBindingIdentifier(pos + 8), - moduleReference: deserializeTSModuleReference(pos + 40), - importKind: deserializeImportOrExportKind(pos + 56), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSImportEqualsDeclaration', + id: null, + moduleReference: null, + importKind: deserializeImportOrExportKind(pos + 56), + start, + end, + range: [start, end], + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.moduleReference = deserializeTSModuleReference(pos + 40); + return node; } function deserializeTSModuleReference(pos) { @@ -4031,70 +4687,89 @@ function deserializeTSModuleReference(pos) { } function deserializeTSExternalModuleReference(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSExternalModuleReference', - expression: deserializeStringLiteral(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSExternalModuleReference', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeStringLiteral(pos + 8); + return node; } function deserializeTSNonNullExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNonNullExpression', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNonNullExpression', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeDecorator(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'Decorator', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'Decorator', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeTSExportAssignment(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSExportAssignment', - expression: deserializeExpression(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSExportAssignment', + expression: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + return node; } function deserializeTSNamespaceExportDeclaration(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSNamespaceExportDeclaration', - id: deserializeIdentifierName(pos + 8), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSNamespaceExportDeclaration', + id: null, + start, + end, + range: [start, end], + }; + node.id = deserializeIdentifierName(pos + 8); + return node; } function deserializeTSInstantiationExpression(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSInstantiationExpression', - expression: deserializeExpression(pos + 8), - typeArguments: deserializeBoxTSTypeParameterInstantiation(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSInstantiationExpression', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeBoxTSTypeParameterInstantiation(pos + 24); + return node; } function deserializeImportOrExportKind(pos) { @@ -4109,27 +4784,33 @@ function deserializeImportOrExportKind(pos) { } function deserializeJSDocNullableType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSJSDocNullableType', - typeAnnotation: deserializeTSType(pos + 8), - postfix: deserializeBool(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSJSDocNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeJSDocNonNullableType(pos) { - let start = deserializeU32(pos), end = deserializeU32(pos + 4); - return { - type: 'TSJSDocNonNullableType', - typeAnnotation: deserializeTSType(pos + 8), - postfix: deserializeBool(pos + 24), - start, - end, - range: [start, end], - }; + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + node = { + type: 'TSJSDocNonNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + range: [start, end], + }; + node.typeAnnotation = deserializeTSType(pos + 8); + return node; } function deserializeJSDocUnknownType(pos) { @@ -4157,14 +4838,16 @@ function deserializeComment(pos) { let type = deserializeCommentKind(pos + 12), start = deserializeU32(pos), end = deserializeU32(pos + 4), + node = { + type, + value: null, + start, + end, + range: [start, end], + }, endCut = type === 'Line' ? 0 : 2; - return { - type, - value: sourceText.slice(start + 2, end - endCut), - start, - end, - range: [start, end], - }; + node.value = sourceText.slice(start + 2, end - endCut); + return node; } function deserializeNameSpan(pos) { diff --git a/napi/parser/generated/deserialize/ts_range_parent.js b/napi/parser/generated/deserialize/ts_range_parent.js new file mode 100644 index 0000000000000..18ed403a028dc --- /dev/null +++ b/napi/parser/generated/deserialize/ts_range_parent.js @@ -0,0 +1,7098 @@ +// Auto-generated code, DO NOT EDIT DIRECTLY! +// To edit this generated file you have to edit `tasks/ast_tools/src/generators/raw_transfer.rs`. + +let uint8, uint32, float64, sourceText, sourceIsAscii, sourceByteLen; +const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true }), + decodeStr = textDecoder.decode.bind(textDecoder), + { fromCodePoint } = String; +let parent = null; + +export function deserialize(buffer, sourceText, sourceByteLen) { + return deserializeWith(buffer, sourceText, sourceByteLen, deserializeRawTransferData); +} + +export function deserializeProgramOnly(buffer, sourceText, sourceByteLen) { + return deserializeWith(buffer, sourceText, sourceByteLen, deserializeProgram); +} + +function deserializeWith(buffer, sourceTextInput, sourceByteLenInput, deserialize) { + uint8 = buffer; + uint32 = buffer.uint32; + float64 = buffer.float64; + sourceText = sourceTextInput; + sourceByteLen = sourceByteLenInput; + sourceIsAscii = sourceText.length === sourceByteLen; + let data = deserialize(uint32[536870902]); + uint8 = + uint32 = + float64 = + sourceText = + void 0; + return data; +} + +function deserializeProgram(pos) { + let end = deserializeU32(pos + 4), + program = parent = { + type: 'Program', + body: null, + sourceType: deserializeModuleKind(pos + 125), + hashbang: null, + start: 0, + end, + range: [0, end], + parent: null, + }; + program.hashbang = deserializeOptionHashbang(pos + 48); + let body = program.body = deserializeVecDirective(pos + 72); + body.push(...deserializeVecStatement(pos + 96)); + { + let start; + if (body.length > 0) { + let first = body[0]; + start = first.start; + if (first.type === 'ExportNamedDeclaration' || first.type === 'ExportDefaultDeclaration') { + let { declaration } = first; + if (declaration !== null && declaration.type === 'ClassDeclaration' && declaration.decorators.length > 0) { + let decoratorStart = declaration.decorators[0].start; + decoratorStart < start && (start = decoratorStart); + } + } + } else start = end; + program.start = program.range[0] = start; + } + parent = null; + return program; +} + +function deserializeExpression(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Expression`); + } +} + +function deserializeIdentifierName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeIdentifierReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeBindingIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeLabelIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeThisExpression(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'ThisExpression', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeArrayExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayExpression', + elements: null, + start, + end, + range: [start, end], + parent, + }; + node.elements = deserializeVecArrayExpressionElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeArrayExpressionElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxSpreadElement(pos + 8); + case 65: + return deserializeElision(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ArrayExpressionElement`); + } +} + +function deserializeElision(pos) { + return null; +} + +function deserializeObjectExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectExpression', + properties: null, + start, + end, + range: [start, end], + parent, + }; + node.properties = deserializeVecObjectPropertyKind(pos + 8); + parent = previousParent; + return node; +} + +function deserializeObjectPropertyKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxObjectProperty(pos + 8); + case 1: + return deserializeBoxSpreadElement(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ObjectPropertyKind`); + } +} + +function deserializeObjectProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: deserializePropertyKind(pos + 40), + key: null, + value: null, + method: deserializeBool(pos + 41), + shorthand: deserializeBool(pos + 42), + computed: deserializeBool(pos + 43), + optional: null, + start, + end, + range: [start, end], + parent, + }; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeExpression(pos + 24); + node.optional = false; + parent = previousParent; + return node; +} + +function deserializePropertyKey(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxIdentifierName(pos + 8); + case 65: + return deserializeBoxPrivateIdentifier(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyKey`); + } +} + +function deserializePropertyKind(pos) { + switch (uint8[pos]) { + case 0: + return 'init'; + case 1: + return 'get'; + case 2: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyKind`); + } +} + +function deserializeTemplateLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TemplateLiteral', + quasis: null, + expressions: null, + start, + end, + range: [start, end], + parent, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.expressions = deserializeVecExpression(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTaggedTemplateExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TaggedTemplateExpression', + tag: null, + typeArguments: null, + quasi: null, + start, + end, + range: [start, end], + parent, + }; + node.tag = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.quasi = deserializeTemplateLiteral(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTemplateElement(pos) { + let tail = deserializeBool(pos + 40), + start = deserializeU32(pos) - 1, + end = deserializeU32(pos + 4) + 2 - tail, + value = deserializeTemplateElementValue(pos + 8); + value.cooked !== null && deserializeBool(pos + 41) && + (value.cooked = value.cooked.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); + return { + type: 'TemplateElement', + value, + tail, + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTemplateElementValue(pos) { + return { + raw: deserializeStr(pos), + cooked: deserializeOptionStr(pos + 16), + }; +} + +function deserializeComputedMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 40), + computed: null, + start, + end, + range: [start, end], + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeExpression(pos + 24); + node.computed = true; + parent = previousParent; + return node; +} + +function deserializeStaticMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + range: [start, end], + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializeIdentifierName(pos + 24); + node.computed = false; + parent = previousParent; + return node; +} + +function deserializePrivateFieldExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MemberExpression', + object: null, + property: null, + optional: deserializeBool(pos + 48), + computed: null, + start, + end, + range: [start, end], + parent, + }; + node.object = deserializeExpression(pos + 8); + node.property = deserializePrivateIdentifier(pos + 24); + node.computed = false; + parent = previousParent; + return node; +} + +function deserializeCallExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'CallExpression', + callee: null, + typeArguments: null, + arguments: null, + optional: deserializeBool(pos + 56), + start, + end, + range: [start, end], + parent, + }; + node.callee = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeNewExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'NewExpression', + callee: null, + typeArguments: null, + arguments: null, + start, + end, + range: [start, end], + parent, + }; + node.callee = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeMetaProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'MetaProperty', + meta: null, + property: null, + start, + end, + range: [start, end], + parent, + }; + node.meta = deserializeIdentifierName(pos + 8); + node.property = deserializeIdentifierName(pos + 32); + parent = previousParent; + return node; +} + +function deserializeSpreadElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SpreadElement', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeArgument(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxSpreadElement(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Argument`); + } +} + +function deserializeUpdateExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'UpdateExpression', + operator: deserializeUpdateOperator(pos + 24), + prefix: deserializeBool(pos + 25), + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeSimpleAssignmentTarget(pos + 8); + parent = previousParent; + return node; +} + +function deserializeUnaryExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'UnaryExpression', + operator: deserializeUnaryOperator(pos + 24), + argument: null, + prefix: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeExpression(pos + 8); + node.prefix = true; + parent = previousParent; + return node; +} + +function deserializeBinaryExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BinaryExpression', + left: null, + operator: deserializeBinaryOperator(pos + 40), + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializePrivateInExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BinaryExpression', + left: null, + operator: null, + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializePrivateIdentifier(pos + 8); + node.operator = 'in'; + node.right = deserializeExpression(pos + 32); + parent = previousParent; + return node; +} + +function deserializeLogicalExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'LogicalExpression', + left: null, + operator: deserializeLogicalOperator(pos + 40), + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeExpression(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeConditionalExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ConditionalExpression', + test: null, + consequent: null, + alternate: null, + start, + end, + range: [start, end], + parent, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeExpression(pos + 24); + node.alternate = deserializeExpression(pos + 40); + parent = previousParent; + return node; +} + +function deserializeAssignmentExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentExpression', + operator: deserializeAssignmentOperator(pos + 40), + left: null, + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeAssignmentTarget(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTarget`); + } +} + +function deserializeSimpleAssignmentTarget(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for SimpleAssignmentTarget`); + } +} + +function deserializeArrayAssignmentTarget(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayPattern', + decorators: null, + elements: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }, + elements = deserializeVecOptionAssignmentTargetMaybeDefault(pos + 8), + rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); + rest !== null && elements.push(rest); + node.decorators = []; + node.elements = elements; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeObjectAssignmentTarget(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectPattern', + decorators: null, + properties: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }, + properties = deserializeVecAssignmentTargetProperty(pos + 8), + rest = deserializeOptionBoxAssignmentTargetRest(pos + 32); + rest !== null && properties.push(rest); + node.decorators = []; + node.properties = properties; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetRest(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'RestElement', + decorators: null, + argument: null, + optional: null, + typeAnnotation: null, + value: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.argument = deserializeAssignmentTarget(pos + 8); + node.optional = false; + node.typeAnnotation = null; + node.value = null; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetMaybeDefault(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 16: + return deserializeBoxAssignmentTargetWithDefault(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTargetMaybeDefault`); + } +} + +function deserializeAssignmentTargetWithDefault(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentPattern', + decorators: null, + left: null, + right: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.left = deserializeAssignmentTarget(pos + 8); + node.right = deserializeExpression(pos + 24); + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetProperty(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxAssignmentTargetPropertyIdentifier(pos + 8); + case 1: + return deserializeBoxAssignmentTargetPropertyProperty(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentTargetProperty`); + } +} + +function deserializeAssignmentTargetPropertyIdentifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: null, + optional: null, + start, + end, + range: [start, end], + parent, + }, + key = deserializeIdentifierReference(pos + 8), + init = deserializeOptionExpression(pos + 40), + value = { ...key }; + if (init !== null) { + let left = value, previousParent = parent; + value = parent = { + type: 'AssignmentPattern', + decorators: [], + left, + right: init, + optional: false, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + left.parent = value; + init.parent = value; + parent = previousParent; + } + node.kind = 'init'; + node.key = key; + node.value = value; + node.method = false; + node.shorthand = true; + node.computed = false; + node.optional = false; + parent = previousParent; + return node; +} + +function deserializeAssignmentTargetPropertyProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: null, + computed: deserializeBool(pos + 40), + optional: null, + start, + end, + range: [start, end], + parent, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeAssignmentTargetMaybeDefault(pos + 24); + node.method = false; + node.shorthand = false; + node.optional = false; + parent = previousParent; + return node; +} + +function deserializeSequenceExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SequenceExpression', + expressions: null, + start, + end, + range: [start, end], + parent, + }; + node.expressions = deserializeVecExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeSuper(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Super', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeAwaitExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AwaitExpression', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeChainExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ChainExpression', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeChainElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeChainElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxCallExpression(pos + 8); + case 1: + return deserializeBoxTSNonNullExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ChainElement`); + } +} + +function deserializeParenthesizedExpression(pos) { + let node; + { + let start, end, previousParent = parent; + node = parent = { + type: 'ParenthesizedExpression', + expression: null, + start: start = deserializeU32(pos), + end: end = deserializeU32(pos + 4), + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + } + return node; +} + +function deserializeStatement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBlockStatement(pos + 8); + case 1: + return deserializeBoxBreakStatement(pos + 8); + case 2: + return deserializeBoxContinueStatement(pos + 8); + case 3: + return deserializeBoxDebuggerStatement(pos + 8); + case 4: + return deserializeBoxDoWhileStatement(pos + 8); + case 5: + return deserializeBoxEmptyStatement(pos + 8); + case 6: + return deserializeBoxExpressionStatement(pos + 8); + case 7: + return deserializeBoxForInStatement(pos + 8); + case 8: + return deserializeBoxForOfStatement(pos + 8); + case 9: + return deserializeBoxForStatement(pos + 8); + case 10: + return deserializeBoxIfStatement(pos + 8); + case 11: + return deserializeBoxLabeledStatement(pos + 8); + case 12: + return deserializeBoxReturnStatement(pos + 8); + case 13: + return deserializeBoxSwitchStatement(pos + 8); + case 14: + return deserializeBoxThrowStatement(pos + 8); + case 15: + return deserializeBoxTryStatement(pos + 8); + case 16: + return deserializeBoxWhileStatement(pos + 8); + case 17: + return deserializeBoxWithStatement(pos + 8); + case 32: + return deserializeBoxVariableDeclaration(pos + 8); + case 33: + return deserializeBoxFunction(pos + 8); + case 34: + return deserializeBoxClass(pos + 8); + case 35: + return deserializeBoxTSTypeAliasDeclaration(pos + 8); + case 36: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + case 37: + return deserializeBoxTSEnumDeclaration(pos + 8); + case 38: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 39: + return deserializeBoxTSImportEqualsDeclaration(pos + 8); + case 64: + return deserializeBoxImportDeclaration(pos + 8); + case 65: + return deserializeBoxExportAllDeclaration(pos + 8); + case 66: + return deserializeBoxExportDefaultDeclaration(pos + 8); + case 67: + return deserializeBoxExportNamedDeclaration(pos + 8); + case 68: + return deserializeBoxTSExportAssignment(pos + 8); + case 69: + return deserializeBoxTSNamespaceExportDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Statement`); + } +} + +function deserializeDirective(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExpressionStatement', + expression: null, + directive: deserializeStr(pos + 56), + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeStringLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeHashbang(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Hashbang', + value: deserializeStr(pos + 8), + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeBlockStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BlockStatement', + body: null, + start, + end, + range: [start, end], + parent, + }; + node.body = deserializeVecStatement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeDeclaration(pos) { + switch (uint8[pos]) { + case 32: + return deserializeBoxVariableDeclaration(pos + 8); + case 33: + return deserializeBoxFunction(pos + 8); + case 34: + return deserializeBoxClass(pos + 8); + case 35: + return deserializeBoxTSTypeAliasDeclaration(pos + 8); + case 36: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + case 37: + return deserializeBoxTSEnumDeclaration(pos + 8); + case 38: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 39: + return deserializeBoxTSImportEqualsDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for Declaration`); + } +} + +function deserializeVariableDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'VariableDeclaration', + kind: deserializeVariableDeclarationKind(pos + 32), + declarations: null, + declare: deserializeBool(pos + 33), + start, + end, + range: [start, end], + parent, + }; + node.declarations = deserializeVecVariableDeclarator(pos + 8); + parent = previousParent; + return node; +} + +function deserializeVariableDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return 'var'; + case 1: + return 'let'; + case 2: + return 'const'; + case 3: + return 'using'; + case 4: + return 'await using'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for VariableDeclarationKind`); + } +} + +function deserializeVariableDeclarator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'VariableDeclarator', + id: null, + init: null, + definite: deserializeBool(pos + 57), + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeBindingPattern(pos + 8); + node.init = deserializeOptionExpression(pos + 40); + parent = previousParent; + return node; +} + +function deserializeEmptyStatement(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'EmptyStatement', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeExpressionStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExpressionStatement', + expression: null, + directive: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.directive = null; + parent = previousParent; + return node; +} + +function deserializeIfStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'IfStatement', + test: null, + consequent: null, + alternate: null, + start, + end, + range: [start, end], + parent, + }; + node.test = deserializeExpression(pos + 8); + node.consequent = deserializeStatement(pos + 24); + node.alternate = deserializeOptionStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeDoWhileStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'DoWhileStatement', + body: null, + test: null, + start, + end, + range: [start, end], + parent, + }; + node.body = deserializeStatement(pos + 8); + node.test = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeWhileStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'WhileStatement', + test: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.test = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeForStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForStatement', + init: null, + test: null, + update: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.init = deserializeOptionForStatementInit(pos + 8); + node.test = deserializeOptionExpression(pos + 24); + node.update = deserializeOptionExpression(pos + 40); + node.body = deserializeStatement(pos + 56); + parent = previousParent; + return node; +} + +function deserializeForStatementInit(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxVariableDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ForStatementInit`); + } +} + +function deserializeForInStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForInStatement', + left: null, + right: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeForStatementLeft(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSAsExpression(pos + 8); + case 2: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 3: + return deserializeBoxTSNonNullExpression(pos + 8); + case 4: + return deserializeBoxTSTypeAssertion(pos + 8); + case 8: + return deserializeBoxArrayAssignmentTarget(pos + 8); + case 9: + return deserializeBoxObjectAssignmentTarget(pos + 8); + case 16: + return deserializeBoxVariableDeclaration(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ForStatementLeft`); + } +} + +function deserializeForOfStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ForOfStatement', + await: deserializeBool(pos + 60), + left: null, + right: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeForStatementLeft(pos + 8); + node.right = deserializeExpression(pos + 24); + node.body = deserializeStatement(pos + 40); + parent = previousParent; + return node; +} + +function deserializeContinueStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ContinueStatement', + label: null, + start, + end, + range: [start, end], + parent, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeBreakStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BreakStatement', + label: null, + start, + end, + range: [start, end], + parent, + }; + node.label = deserializeOptionLabelIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeReturnStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ReturnStatement', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeOptionExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeWithStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'WithStatement', + object: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.object = deserializeExpression(pos + 8); + node.body = deserializeStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeSwitchStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SwitchStatement', + discriminant: null, + cases: null, + start, + end, + range: [start, end], + parent, + }; + node.discriminant = deserializeExpression(pos + 8); + node.cases = deserializeVecSwitchCase(pos + 24); + parent = previousParent; + return node; +} + +function deserializeSwitchCase(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'SwitchCase', + test: null, + consequent: null, + start, + end, + range: [start, end], + parent, + }; + node.test = deserializeOptionExpression(pos + 8); + node.consequent = deserializeVecStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeLabeledStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'LabeledStatement', + label: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.label = deserializeLabelIdentifier(pos + 8); + node.body = deserializeStatement(pos + 32); + parent = previousParent; + return node; +} + +function deserializeThrowStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ThrowStatement', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTryStatement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TryStatement', + block: null, + handler: null, + finalizer: null, + start, + end, + range: [start, end], + parent, + }; + node.block = deserializeBoxBlockStatement(pos + 8); + node.handler = deserializeOptionBoxCatchClause(pos + 16); + node.finalizer = deserializeOptionBoxBlockStatement(pos + 24); + parent = previousParent; + return node; +} + +function deserializeCatchClause(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'CatchClause', + param: null, + body: null, + start, + end, + range: [start, end], + parent, + }; + node.param = deserializeOptionCatchParameter(pos + 8); + node.body = deserializeBoxBlockStatement(pos + 48); + parent = previousParent; + return node; +} + +function deserializeCatchParameter(pos) { + return deserializeBindingPattern(pos + 8); +} + +function deserializeDebuggerStatement(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'DebuggerStatement', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeBindingPattern(pos) { + let pattern = deserializeBindingPatternKind(pos); + { + let previousParent = parent; + parent = pattern; + pattern.optional = deserializeBool(pos + 24); + pattern.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + parent = previousParent; + } + return pattern; +} + +function deserializeBindingPatternKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBindingIdentifier(pos + 8); + case 1: + return deserializeBoxObjectPattern(pos + 8); + case 2: + return deserializeBoxArrayPattern(pos + 8); + case 3: + return deserializeBoxAssignmentPattern(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for BindingPatternKind`); + } +} + +function deserializeAssignmentPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'AssignmentPattern', + decorators: null, + left: null, + right: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.left = deserializeBindingPattern(pos + 8); + node.right = deserializeExpression(pos + 40); + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeObjectPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ObjectPattern', + decorators: null, + properties: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }, + properties = deserializeVecBindingProperty(pos + 8), + rest = deserializeOptionBoxBindingRestElement(pos + 32); + rest !== null && properties.push(rest); + node.decorators = []; + node.properties = properties; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeBindingProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Property', + kind: null, + key: null, + value: null, + method: null, + shorthand: deserializeBool(pos + 56), + computed: deserializeBool(pos + 57), + optional: null, + start, + end, + range: [start, end], + parent, + }; + node.kind = 'init'; + node.key = deserializePropertyKey(pos + 8); + node.value = deserializeBindingPattern(pos + 24); + node.method = false; + node.optional = false; + parent = previousParent; + return node; +} + +function deserializeArrayPattern(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrayPattern', + decorators: null, + elements: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }, + elements = deserializeVecOptionBindingPattern(pos + 8), + rest = deserializeOptionBoxBindingRestElement(pos + 32); + rest !== null && elements.push(rest); + node.decorators = []; + node.elements = elements; + node.optional = false; + node.typeAnnotation = null; + parent = previousParent; + return node; +} + +function deserializeBindingRestElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'RestElement', + decorators: null, + argument: null, + optional: null, + typeAnnotation: null, + value: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.argument = deserializeBindingPattern(pos + 8); + node.optional = false; + node.typeAnnotation = null; + node.value = null; + parent = previousParent; + return node; +} + +function deserializeFunction(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeFunctionType(pos + 84), + id: null, + generator: deserializeBool(pos + 85), + async: deserializeBool(pos + 86), + declare: deserializeBool(pos + 87), + typeParameters: null, + params: null, + returnType: null, + body: null, + expression: null, + start, + end, + range: [start, end], + parent, + }, + params = deserializeBoxFormalParameters(pos + 56); + { + let thisParam = deserializeOptionBoxTSThisParameter(pos + 48); + thisParam !== null && params.unshift(thisParam); + } + node.id = deserializeOptionBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 64); + node.body = deserializeOptionBoxFunctionBody(pos + 72); + node.expression = false; + parent = previousParent; + return node; +} + +function deserializeFunctionType(pos) { + switch (uint8[pos]) { + case 0: + return 'FunctionDeclaration'; + case 1: + return 'FunctionExpression'; + case 2: + return 'TSDeclareFunction'; + case 3: + return 'TSEmptyBodyFunctionExpression'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for FunctionType`); + } +} + +function deserializeFormalParameters(pos) { + let params = deserializeVecFormalParameter(pos + 8); + if (uint32[pos + 32 >> 2] !== 0 && uint32[pos + 36 >> 2] !== 0) { + pos = uint32[pos + 32 >> 2]; + let start, + end, + previousParent = parent, + rest = parent = { + type: 'RestElement', + decorators: [], + argument: null, + optional: deserializeBool(pos + 32), + typeAnnotation: null, + value: null, + start: start = deserializeU32(pos), + end: end = deserializeU32(pos + 4), + range: [start, end], + parent, + }; + rest.argument = deserializeBindingPatternKind(pos + 8); + rest.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + params.push(rest); + parent = previousParent; + } + return params; +} + +function deserializeFormalParameter(pos) { + let param; + { + let accessibility = deserializeOptionTSAccessibility(pos + 64), + readonly = deserializeBool(pos + 65), + override = deserializeBool(pos + 66), + previousParent = parent; + if (accessibility === null && !readonly && !override) { + param = parent = deserializeBindingPatternKind(pos + 32); + param.decorators = deserializeVecDecorator(pos + 8); + param.optional = deserializeBool(pos + 56); + param.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + } else { + let start, end; + param = parent = { + type: 'TSParameterProperty', + accessibility, + decorators: null, + override, + parameter: null, + readonly, + static: false, + start: start = deserializeU32(pos), + end: end = deserializeU32(pos + 4), + range: [start, end], + parent, + }; + param.decorators = deserializeVecDecorator(pos + 8); + param.parameter = deserializeBindingPattern(pos + 32); + } + parent = previousParent; + } + return param; +} + +function deserializeFunctionBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'BlockStatement', + body: null, + start, + end, + range: [start, end], + parent, + }, + body = deserializeVecDirective(pos + 8); + body.push(...deserializeVecStatement(pos + 32)); + node.body = body; + parent = previousParent; + return node; +} + +function deserializeArrowFunctionExpression(pos) { + let expression = deserializeBool(pos + 44), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ArrowFunctionExpression', + expression, + async: deserializeBool(pos + 45), + typeParameters: null, + params: null, + returnType: null, + body: null, + id: null, + generator: null, + start, + end, + range: [start, end], + parent, + }, + body = deserializeBoxFunctionBody(pos + 32); + if (expression === true) { + body = body.body[0].expression; + body.parent = parent; + } + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.body = body; + node.id = null; + node.generator = false; + parent = previousParent; + return node; +} + +function deserializeYieldExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'YieldExpression', + delegate: deserializeBool(pos + 24), + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeOptionExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeClass(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeClassType(pos + 132), + decorators: null, + id: null, + typeParameters: null, + superClass: null, + superTypeArguments: null, + implements: null, + body: null, + abstract: deserializeBool(pos + 133), + declare: deserializeBool(pos + 134), + start, + end, + range: [start, end], + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.id = deserializeOptionBindingIdentifier(pos + 32); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 64); + node.superClass = deserializeOptionExpression(pos + 72); + node.superTypeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 88); + node.implements = deserializeVecTSClassImplements(pos + 96); + node.body = deserializeBoxClassBody(pos + 120); + parent = previousParent; + return node; +} + +function deserializeClassType(pos) { + switch (uint8[pos]) { + case 0: + return 'ClassDeclaration'; + case 1: + return 'ClassExpression'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ClassType`); + } +} + +function deserializeClassBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ClassBody', + body: null, + start, + end, + range: [start, end], + parent, + }; + node.body = deserializeVecClassElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeClassElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxStaticBlock(pos + 8); + case 1: + return deserializeBoxMethodDefinition(pos + 8); + case 2: + return deserializeBoxPropertyDefinition(pos + 8); + case 3: + return deserializeBoxAccessorProperty(pos + 8); + case 4: + return deserializeBoxTSIndexSignature(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ClassElement`); + } +} + +function deserializeMethodDefinition(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeMethodDefinitionType(pos + 56), + decorators: null, + key: null, + value: null, + kind: deserializeMethodDefinitionKind(pos + 57), + computed: deserializeBool(pos + 58), + static: deserializeBool(pos + 59), + override: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + accessibility: deserializeOptionTSAccessibility(pos + 62), + start, + end, + range: [start, end], + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.value = deserializeBoxFunction(pos + 48); + parent = previousParent; + return node; +} + +function deserializeMethodDefinitionType(pos) { + switch (uint8[pos]) { + case 0: + return 'MethodDefinition'; + case 1: + return 'TSAbstractMethodDefinition'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for MethodDefinitionType`); + } +} + +function deserializePropertyDefinition(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializePropertyDefinitionType(pos + 72), + decorators: null, + key: null, + typeAnnotation: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + declare: deserializeBool(pos + 75), + override: deserializeBool(pos + 76), + optional: deserializeBool(pos + 77), + definite: deserializeBool(pos + 78), + readonly: deserializeBool(pos + 79), + accessibility: deserializeOptionTSAccessibility(pos + 80), + start, + end, + range: [start, end], + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.value = deserializeOptionExpression(pos + 56); + parent = previousParent; + return node; +} + +function deserializePropertyDefinitionType(pos) { + switch (uint8[pos]) { + case 0: + return 'PropertyDefinition'; + case 1: + return 'TSAbstractPropertyDefinition'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for PropertyDefinitionType`); + } +} + +function deserializeMethodDefinitionKind(pos) { + switch (uint8[pos]) { + case 0: + return 'constructor'; + case 1: + return 'method'; + case 2: + return 'get'; + case 3: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for MethodDefinitionKind`); + } +} + +function deserializePrivateIdentifier(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'PrivateIdentifier', + name: deserializeStr(pos + 8), + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeStaticBlock(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'StaticBlock', + body: null, + start, + end, + range: [start, end], + parent, + }; + node.body = deserializeVecStatement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeAccessorPropertyType(pos) { + switch (uint8[pos]) { + case 0: + return 'AccessorProperty'; + case 1: + return 'TSAbstractAccessorProperty'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AccessorPropertyType`); + } +} + +function deserializeAccessorProperty(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: deserializeAccessorPropertyType(pos + 72), + decorators: null, + key: null, + typeAnnotation: null, + value: null, + computed: deserializeBool(pos + 73), + static: deserializeBool(pos + 74), + override: deserializeBool(pos + 75), + definite: deserializeBool(pos + 76), + accessibility: deserializeOptionTSAccessibility(pos + 77), + declare: null, + optional: null, + readonly: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = deserializeVecDecorator(pos + 8); + node.key = deserializePropertyKey(pos + 32); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.value = deserializeOptionExpression(pos + 56); + node.declare = false; + node.optional = false; + node.readonly = false; + parent = previousParent; + return node; +} + +function deserializeImportExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportExpression', + source: null, + options: null, + phase: deserializeOptionImportPhase(pos + 40), + start, + end, + range: [start, end], + parent, + }; + node.source = deserializeExpression(pos + 8); + node.options = deserializeOptionExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeImportDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportDeclaration', + specifiers: null, + source: null, + phase: deserializeOptionImportPhase(pos + 88), + attributes: null, + importKind: deserializeImportOrExportKind(pos + 89), + start, + end, + range: [start, end], + parent, + }, + specifiers = deserializeOptionVecImportDeclarationSpecifier(pos + 8); + specifiers === null && (specifiers = []); + let withClause = deserializeOptionBoxWithClause(pos + 80); + node.specifiers = specifiers; + node.source = deserializeStringLiteral(pos + 32); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeImportPhase(pos) { + switch (uint8[pos]) { + case 0: + return 'source'; + case 1: + return 'defer'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportPhase`); + } +} + +function deserializeImportDeclarationSpecifier(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxImportSpecifier(pos + 8); + case 1: + return deserializeBoxImportDefaultSpecifier(pos + 8); + case 2: + return deserializeBoxImportNamespaceSpecifier(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportDeclarationSpecifier`); + } +} + +function deserializeImportSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportSpecifier', + imported: null, + local: null, + importKind: deserializeImportOrExportKind(pos + 96), + start, + end, + range: [start, end], + parent, + }; + node.imported = deserializeModuleExportName(pos + 8); + node.local = deserializeBindingIdentifier(pos + 64); + parent = previousParent; + return node; +} + +function deserializeImportDefaultSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportDefaultSpecifier', + local: null, + start, + end, + range: [start, end], + parent, + }; + node.local = deserializeBindingIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeImportNamespaceSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportNamespaceSpecifier', + local: null, + start, + end, + range: [start, end], + parent, + }; + node.local = deserializeBindingIdentifier(pos + 8); + parent = previousParent; + return node; +} + +function deserializeWithClause(pos) { + return { attributes: deserializeVecImportAttribute(pos + 8) }; +} + +function deserializeImportAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ImportAttribute', + key: null, + value: null, + start, + end, + range: [start, end], + parent, + }; + node.key = deserializeImportAttributeKey(pos + 8); + node.value = deserializeStringLiteral(pos + 64); + parent = previousParent; + return node; +} + +function deserializeImportAttributeKey(pos) { + switch (uint8[pos]) { + case 0: + return deserializeIdentifierName(pos + 8); + case 1: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportAttributeKey`); + } +} + +function deserializeExportNamedDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportNamedDeclaration', + declaration: null, + specifiers: null, + source: null, + exportKind: deserializeImportOrExportKind(pos + 104), + attributes: null, + start, + end, + range: [start, end], + parent, + }, + withClause = deserializeOptionBoxWithClause(pos + 96); + node.declaration = deserializeOptionDeclaration(pos + 8); + node.specifiers = deserializeVecExportSpecifier(pos + 24); + node.source = deserializeOptionStringLiteral(pos + 48); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeExportDefaultDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportDefaultDeclaration', + declaration: null, + exportKind: null, + start, + end, + range: [start, end], + parent, + }; + node.declaration = deserializeExportDefaultDeclarationKind(pos + 8); + node.exportKind = 'value'; + parent = previousParent; + return node; +} + +function deserializeExportAllDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportAllDeclaration', + exported: null, + source: null, + attributes: null, + exportKind: deserializeImportOrExportKind(pos + 120), + start, + end, + range: [start, end], + parent, + }, + withClause = deserializeOptionBoxWithClause(pos + 112); + node.exported = deserializeOptionModuleExportName(pos + 8); + node.source = deserializeStringLiteral(pos + 64); + node.attributes = withClause === null ? [] : withClause.attributes; + parent = previousParent; + return node; +} + +function deserializeExportSpecifier(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'ExportSpecifier', + local: null, + exported: null, + exportKind: deserializeImportOrExportKind(pos + 120), + start, + end, + range: [start, end], + parent, + }; + node.local = deserializeModuleExportName(pos + 8); + node.exported = deserializeModuleExportName(pos + 64); + parent = previousParent; + return node; +} + +function deserializeExportDefaultDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeBoxFunction(pos + 8); + case 65: + return deserializeBoxClass(pos + 8); + case 66: + return deserializeBoxTSInterfaceDeclaration(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportDefaultDeclarationKind`); + } +} + +function deserializeModuleExportName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeIdentifierName(pos + 8); + case 1: + return deserializeIdentifierReference(pos + 8); + case 2: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ModuleExportName`); + } +} + +function deserializeV8IntrinsicExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'V8IntrinsicExpression', + name: null, + arguments: null, + start, + end, + range: [start, end], + parent, + }; + node.name = deserializeIdentifierName(pos + 8); + node.arguments = deserializeVecArgument(pos + 32); + parent = previousParent; + return node; +} + +function deserializeBooleanLiteral(pos) { + let value = deserializeBool(pos + 8), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value, + raw: null, + start, + end, + range: [start, end], + parent, + }; + node.raw = start === 0 && end === 0 ? null : value + ''; + parent = previousParent; + return node; +} + +function deserializeNullLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: null, + start, + end, + range: [start, end], + parent, + }; + node.value = null; + node.raw = start === 0 && end === 0 ? null : 'null'; + parent = previousParent; + return node; +} + +function deserializeNumericLiteral(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'Literal', + value: deserializeF64(pos + 8), + raw: deserializeOptionStr(pos + 16), + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeStringLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + start, + end, + range: [start, end], + parent, + }, + value = deserializeStr(pos + 8); + deserializeBool(pos + 40) && + (value = value.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))); + node.value = value; + parent = previousParent; + return node; +} + +function deserializeBigIntLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 24), + bigint: null, + start, + end, + range: [start, end], + parent, + }, + bigint = deserializeStr(pos + 8); + node.value = BigInt(bigint); + node.bigint = bigint; + parent = previousParent; + return node; +} + +function deserializeRegExpLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Literal', + value: null, + raw: deserializeOptionStr(pos + 40), + regex: null, + start, + end, + range: [start, end], + parent, + }, + regex = deserializeRegExp(pos + 8), + value = null; + try { + value = new RegExp(regex.pattern, regex.flags); + } catch {} + node.value = value; + node.regex = regex; + parent = previousParent; + return node; +} + +function deserializeRegExp(pos) { + return { + pattern: deserializeStr(pos), + flags: deserializeRegExpFlags(pos + 24), + }; +} + +function deserializeRegExpFlags(pos) { + let flagBits = deserializeU8(pos), flags = ''; + // Alphabetical order + flagBits & 64 && (flags += 'd'); + flagBits & 1 && (flags += 'g'); + flagBits & 2 && (flags += 'i'); + flagBits & 4 && (flags += 'm'); + flagBits & 8 && (flags += 's'); + flagBits & 16 && (flags += 'u'); + flagBits & 128 && (flags += 'v'); + flagBits & 32 && (flags += 'y'); + return flags; +} + +function deserializeJSXElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXElement', + openingElement: null, + children: null, + closingElement: null, + start, + end, + range: [start, end], + parent, + }, + closingElement = deserializeOptionBoxJSXClosingElement(pos + 40), + openingElement = deserializeBoxJSXOpeningElement(pos + 8); + closingElement === null && (openingElement.selfClosing = true); + node.openingElement = openingElement; + node.children = deserializeVecJSXChild(pos + 16); + node.closingElement = closingElement; + parent = previousParent; + return node; +} + +function deserializeJSXOpeningElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXOpeningElement', + name: null, + typeArguments: null, + attributes: null, + selfClosing: null, + start, + end, + range: [start, end], + parent, + }; + node.name = deserializeJSXElementName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + node.attributes = deserializeVecJSXAttributeItem(pos + 32); + node.selfClosing = false; + parent = previousParent; + return node; +} + +function deserializeJSXClosingElement(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXClosingElement', + name: null, + start, + end, + range: [start, end], + parent, + }; + node.name = deserializeJSXElementName(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXFragment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXFragment', + openingFragment: null, + children: null, + closingFragment: null, + start, + end, + range: [start, end], + parent, + }; + node.openingFragment = deserializeJSXOpeningFragment(pos + 8); + node.children = deserializeVecJSXChild(pos + 16); + node.closingFragment = deserializeJSXClosingFragment(pos + 40); + parent = previousParent; + return node; +} + +function deserializeJSXOpeningFragment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXOpeningFragment', + start, + end, + range: [start, end], + parent, + }; + parent = previousParent; + return node; +} + +function deserializeJSXClosingFragment(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXClosingFragment', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeJSXElementName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXIdentifier(pos + 8); + case 1: + let ident = deserializeBoxIdentifierReference(pos + 8); + return { + type: 'JSXIdentifier', + name: ident.name, + start: ident.start, + end: ident.end, + range: ident.range, + parent, + }; + case 2: + return deserializeBoxJSXNamespacedName(pos + 8); + case 3: + return deserializeBoxJSXMemberExpression(pos + 8); + case 4: + let thisExpr = deserializeBoxThisExpression(pos + 8); + return { + type: 'JSXIdentifier', + name: 'this', + start: thisExpr.start, + end: thisExpr.end, + range: thisExpr.range, + parent, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXElementName`); + } +} + +function deserializeJSXNamespacedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXNamespacedName', + namespace: null, + name: null, + start, + end, + range: [start, end], + parent, + }; + node.namespace = deserializeJSXIdentifier(pos + 8); + node.name = deserializeJSXIdentifier(pos + 32); + parent = previousParent; + return node; +} + +function deserializeJSXMemberExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXMemberExpression', + object: null, + property: null, + start, + end, + range: [start, end], + parent, + }; + node.object = deserializeJSXMemberExpressionObject(pos + 8); + node.property = deserializeJSXIdentifier(pos + 24); + parent = previousParent; + return node; +} + +function deserializeJSXMemberExpressionObject(pos) { + switch (uint8[pos]) { + case 0: + let ident = deserializeBoxIdentifierReference(pos + 8); + return { + type: 'JSXIdentifier', + name: ident.name, + start: ident.start, + end: ident.end, + range: ident.range, + parent, + }; + case 1: + return deserializeBoxJSXMemberExpression(pos + 8); + case 2: + let thisExpr = deserializeBoxThisExpression(pos + 8); + return { + type: 'JSXIdentifier', + name: 'this', + start: thisExpr.start, + end: thisExpr.end, + range: thisExpr.range, + parent, + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXMemberExpressionObject`); + } +} + +function deserializeJSXExpressionContainer(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXExpressionContainer', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeJSXExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXExpression(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNullLiteral(pos + 8); + case 2: + return deserializeBoxNumericLiteral(pos + 8); + case 3: + return deserializeBoxBigIntLiteral(pos + 8); + case 4: + return deserializeBoxRegExpLiteral(pos + 8); + case 5: + return deserializeBoxStringLiteral(pos + 8); + case 6: + return deserializeBoxTemplateLiteral(pos + 8); + case 7: + return deserializeBoxIdentifierReference(pos + 8); + case 8: + return deserializeBoxMetaProperty(pos + 8); + case 9: + return deserializeBoxSuper(pos + 8); + case 10: + return deserializeBoxArrayExpression(pos + 8); + case 11: + return deserializeBoxArrowFunctionExpression(pos + 8); + case 12: + return deserializeBoxAssignmentExpression(pos + 8); + case 13: + return deserializeBoxAwaitExpression(pos + 8); + case 14: + return deserializeBoxBinaryExpression(pos + 8); + case 15: + return deserializeBoxCallExpression(pos + 8); + case 16: + return deserializeBoxChainExpression(pos + 8); + case 17: + return deserializeBoxClass(pos + 8); + case 18: + return deserializeBoxConditionalExpression(pos + 8); + case 19: + return deserializeBoxFunction(pos + 8); + case 20: + return deserializeBoxImportExpression(pos + 8); + case 21: + return deserializeBoxLogicalExpression(pos + 8); + case 22: + return deserializeBoxNewExpression(pos + 8); + case 23: + return deserializeBoxObjectExpression(pos + 8); + case 24: + return deserializeBoxParenthesizedExpression(pos + 8); + case 25: + return deserializeBoxSequenceExpression(pos + 8); + case 26: + return deserializeBoxTaggedTemplateExpression(pos + 8); + case 27: + return deserializeBoxThisExpression(pos + 8); + case 28: + return deserializeBoxUnaryExpression(pos + 8); + case 29: + return deserializeBoxUpdateExpression(pos + 8); + case 30: + return deserializeBoxYieldExpression(pos + 8); + case 31: + return deserializeBoxPrivateInExpression(pos + 8); + case 32: + return deserializeBoxJSXElement(pos + 8); + case 33: + return deserializeBoxJSXFragment(pos + 8); + case 34: + return deserializeBoxTSAsExpression(pos + 8); + case 35: + return deserializeBoxTSSatisfiesExpression(pos + 8); + case 36: + return deserializeBoxTSTypeAssertion(pos + 8); + case 37: + return deserializeBoxTSNonNullExpression(pos + 8); + case 38: + return deserializeBoxTSInstantiationExpression(pos + 8); + case 39: + return deserializeBoxV8IntrinsicExpression(pos + 8); + case 48: + return deserializeBoxComputedMemberExpression(pos + 8); + case 49: + return deserializeBoxStaticMemberExpression(pos + 8); + case 50: + return deserializeBoxPrivateFieldExpression(pos + 8); + case 64: + return deserializeJSXEmptyExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXExpression`); + } +} + +function deserializeJSXEmptyExpression(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXEmptyExpression', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeJSXAttributeItem(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXAttribute(pos + 8); + case 1: + return deserializeBoxJSXSpreadAttribute(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeItem`); + } +} + +function deserializeJSXAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXAttribute', + name: null, + value: null, + start, + end, + range: [start, end], + parent, + }; + node.name = deserializeJSXAttributeName(pos + 8); + node.value = deserializeOptionJSXAttributeValue(pos + 24); + parent = previousParent; + return node; +} + +function deserializeJSXSpreadAttribute(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXSpreadAttribute', + argument: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXAttributeName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXIdentifier(pos + 8); + case 1: + return deserializeBoxJSXNamespacedName(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeName`); + } +} + +function deserializeJSXAttributeValue(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxStringLiteral(pos + 8); + case 1: + return deserializeBoxJSXExpressionContainer(pos + 8); + case 2: + return deserializeBoxJSXElement(pos + 8); + case 3: + return deserializeBoxJSXFragment(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXAttributeValue`); + } +} + +function deserializeJSXIdentifier(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXIdentifier', + name: deserializeStr(pos + 8), + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeJSXChild(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxJSXText(pos + 8); + case 1: + return deserializeBoxJSXElement(pos + 8); + case 2: + return deserializeBoxJSXFragment(pos + 8); + case 3: + return deserializeBoxJSXExpressionContainer(pos + 8); + case 4: + return deserializeBoxJSXSpreadChild(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for JSXChild`); + } +} + +function deserializeJSXSpreadChild(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'JSXSpreadChild', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSXText(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'JSXText', + value: deserializeStr(pos + 8), + raw: deserializeOptionStr(pos + 24), + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSThisParameter(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: null, + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.name = 'this'; + node.optional = false; + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); + parent = previousParent; + return node; +} + +function deserializeTSEnumDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumDeclaration', + id: null, + body: null, + const: deserializeBool(pos + 76), + declare: deserializeBool(pos + 77), + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.body = deserializeTSEnumBody(pos + 40); + parent = previousParent; + return node; +} + +function deserializeTSEnumBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumBody', + members: null, + start, + end, + range: [start, end], + parent, + }; + node.members = deserializeVecTSEnumMember(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSEnumMember(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSEnumMember', + id: null, + initializer: null, + computed: null, + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeTSEnumMemberName(pos + 8); + node.initializer = deserializeOptionExpression(pos + 24); + node.computed = deserializeU8(pos + 8) > 1; + parent = previousParent; + return node; +} + +function deserializeTSEnumMemberName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeBoxStringLiteral(pos + 8); + case 2: + return deserializeBoxStringLiteral(pos + 8); + case 3: + return deserializeBoxTemplateLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSEnumMemberName`); + } +} + +function deserializeTSTypeAnnotation(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAnnotation', + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSLiteralType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSLiteralType', + literal: null, + start, + end, + range: [start, end], + parent, + }; + node.literal = deserializeTSLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSLiteral(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxBooleanLiteral(pos + 8); + case 1: + return deserializeBoxNumericLiteral(pos + 8); + case 2: + return deserializeBoxBigIntLiteral(pos + 8); + case 3: + return deserializeBoxStringLiteral(pos + 8); + case 4: + return deserializeBoxTemplateLiteral(pos + 8); + case 5: + return deserializeBoxUnaryExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSLiteral`); + } +} + +function deserializeTSType(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSAnyKeyword(pos + 8); + case 1: + return deserializeBoxTSBigIntKeyword(pos + 8); + case 2: + return deserializeBoxTSBooleanKeyword(pos + 8); + case 3: + return deserializeBoxTSIntrinsicKeyword(pos + 8); + case 4: + return deserializeBoxTSNeverKeyword(pos + 8); + case 5: + return deserializeBoxTSNullKeyword(pos + 8); + case 6: + return deserializeBoxTSNumberKeyword(pos + 8); + case 7: + return deserializeBoxTSObjectKeyword(pos + 8); + case 8: + return deserializeBoxTSStringKeyword(pos + 8); + case 9: + return deserializeBoxTSSymbolKeyword(pos + 8); + case 10: + return deserializeBoxTSThisType(pos + 8); + case 11: + return deserializeBoxTSUndefinedKeyword(pos + 8); + case 12: + return deserializeBoxTSUnknownKeyword(pos + 8); + case 13: + return deserializeBoxTSVoidKeyword(pos + 8); + case 14: + return deserializeBoxTSArrayType(pos + 8); + case 15: + return deserializeBoxTSConditionalType(pos + 8); + case 16: + return deserializeBoxTSConstructorType(pos + 8); + case 17: + return deserializeBoxTSFunctionType(pos + 8); + case 18: + return deserializeBoxTSImportType(pos + 8); + case 19: + return deserializeBoxTSIndexedAccessType(pos + 8); + case 20: + return deserializeBoxTSInferType(pos + 8); + case 21: + return deserializeBoxTSIntersectionType(pos + 8); + case 22: + return deserializeBoxTSLiteralType(pos + 8); + case 23: + return deserializeBoxTSMappedType(pos + 8); + case 24: + return deserializeBoxTSNamedTupleMember(pos + 8); + case 26: + return deserializeBoxTSTemplateLiteralType(pos + 8); + case 27: + return deserializeBoxTSTupleType(pos + 8); + case 28: + return deserializeBoxTSTypeLiteral(pos + 8); + case 29: + return deserializeBoxTSTypeOperator(pos + 8); + case 30: + return deserializeBoxTSTypePredicate(pos + 8); + case 31: + return deserializeBoxTSTypeQuery(pos + 8); + case 32: + return deserializeBoxTSTypeReference(pos + 8); + case 33: + return deserializeBoxTSUnionType(pos + 8); + case 34: + return deserializeBoxTSParenthesizedType(pos + 8); + case 35: + return deserializeBoxJSDocNullableType(pos + 8); + case 36: + return deserializeBoxJSDocNonNullableType(pos + 8); + case 37: + return deserializeBoxJSDocUnknownType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSType`); + } +} + +function deserializeTSConditionalType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConditionalType', + checkType: null, + extendsType: null, + trueType: null, + falseType: null, + start, + end, + range: [start, end], + parent, + }; + node.checkType = deserializeTSType(pos + 8); + node.extendsType = deserializeTSType(pos + 24); + node.trueType = deserializeTSType(pos + 40); + node.falseType = deserializeTSType(pos + 56); + parent = previousParent; + return node; +} + +function deserializeTSUnionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSUnionType', + types: null, + start, + end, + range: [start, end], + parent, + }; + node.types = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSIntersectionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIntersectionType', + types: null, + start, + end, + range: [start, end], + parent, + }; + node.types = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSParenthesizedType(pos) { + let node; + { + let start, end, previousParent = parent; + node = parent = { + type: 'TSParenthesizedType', + typeAnnotation: null, + start: start = deserializeU32(pos), + end: end = deserializeU32(pos + 4), + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + } + return node; +} + +function deserializeTSTypeOperator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeOperator', + operator: deserializeTSTypeOperatorOperator(pos + 24), + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeOperatorOperator(pos) { + switch (uint8[pos]) { + case 0: + return 'keyof'; + case 1: + return 'unique'; + case 2: + return 'readonly'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeOperatorOperator`); + } +} + +function deserializeTSArrayType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSArrayType', + elementType: null, + start, + end, + range: [start, end], + parent, + }; + node.elementType = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSIndexedAccessType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIndexedAccessType', + objectType: null, + indexType: null, + start, + end, + range: [start, end], + parent, + }; + node.objectType = deserializeTSType(pos + 8); + node.indexType = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTupleType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTupleType', + elementTypes: null, + start, + end, + range: [start, end], + parent, + }; + node.elementTypes = deserializeVecTSTupleElement(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNamedTupleMember(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNamedTupleMember', + label: null, + elementType: null, + optional: deserializeBool(pos + 48), + start, + end, + range: [start, end], + parent, + }; + node.label = deserializeIdentifierName(pos + 8); + node.elementType = deserializeTSTupleElement(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSOptionalType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSOptionalType', + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSRestType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSRestType', + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTupleElement(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSAnyKeyword(pos + 8); + case 1: + return deserializeBoxTSBigIntKeyword(pos + 8); + case 2: + return deserializeBoxTSBooleanKeyword(pos + 8); + case 3: + return deserializeBoxTSIntrinsicKeyword(pos + 8); + case 4: + return deserializeBoxTSNeverKeyword(pos + 8); + case 5: + return deserializeBoxTSNullKeyword(pos + 8); + case 6: + return deserializeBoxTSNumberKeyword(pos + 8); + case 7: + return deserializeBoxTSObjectKeyword(pos + 8); + case 8: + return deserializeBoxTSStringKeyword(pos + 8); + case 9: + return deserializeBoxTSSymbolKeyword(pos + 8); + case 10: + return deserializeBoxTSThisType(pos + 8); + case 11: + return deserializeBoxTSUndefinedKeyword(pos + 8); + case 12: + return deserializeBoxTSUnknownKeyword(pos + 8); + case 13: + return deserializeBoxTSVoidKeyword(pos + 8); + case 14: + return deserializeBoxTSArrayType(pos + 8); + case 15: + return deserializeBoxTSConditionalType(pos + 8); + case 16: + return deserializeBoxTSConstructorType(pos + 8); + case 17: + return deserializeBoxTSFunctionType(pos + 8); + case 18: + return deserializeBoxTSImportType(pos + 8); + case 19: + return deserializeBoxTSIndexedAccessType(pos + 8); + case 20: + return deserializeBoxTSInferType(pos + 8); + case 21: + return deserializeBoxTSIntersectionType(pos + 8); + case 22: + return deserializeBoxTSLiteralType(pos + 8); + case 23: + return deserializeBoxTSMappedType(pos + 8); + case 24: + return deserializeBoxTSNamedTupleMember(pos + 8); + case 26: + return deserializeBoxTSTemplateLiteralType(pos + 8); + case 27: + return deserializeBoxTSTupleType(pos + 8); + case 28: + return deserializeBoxTSTypeLiteral(pos + 8); + case 29: + return deserializeBoxTSTypeOperator(pos + 8); + case 30: + return deserializeBoxTSTypePredicate(pos + 8); + case 31: + return deserializeBoxTSTypeQuery(pos + 8); + case 32: + return deserializeBoxTSTypeReference(pos + 8); + case 33: + return deserializeBoxTSUnionType(pos + 8); + case 34: + return deserializeBoxTSParenthesizedType(pos + 8); + case 35: + return deserializeBoxJSDocNullableType(pos + 8); + case 36: + return deserializeBoxJSDocNonNullableType(pos + 8); + case 37: + return deserializeBoxJSDocUnknownType(pos + 8); + case 64: + return deserializeBoxTSOptionalType(pos + 8); + case 65: + return deserializeBoxTSRestType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTupleElement`); + } +} + +function deserializeTSAnyKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSAnyKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSStringKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSStringKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSBooleanKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSBooleanKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSNumberKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNumberKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSNeverKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNeverKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSIntrinsicKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSIntrinsicKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSUnknownKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSUnknownKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSNullKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSNullKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSUndefinedKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSUndefinedKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSVoidKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSVoidKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSSymbolKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSSymbolKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSThisType(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSThisType', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSObjectKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSObjectKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSBigIntKeyword(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSBigIntKeyword', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeTSTypeReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeReference', + typeName: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }; + node.typeName = deserializeTSTypeName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeName`); + } +} + +function deserializeTSQualifiedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeTSTypeName(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameterInstantiation(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameterInstantiation', + params: null, + start, + end, + range: [start, end], + parent, + }; + node.params = deserializeVecTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameter(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameter', + name: null, + constraint: null, + default: null, + in: deserializeBool(pos + 72), + out: deserializeBool(pos + 73), + const: deserializeBool(pos + 74), + start, + end, + range: [start, end], + parent, + }; + node.name = deserializeBindingIdentifier(pos + 8); + node.constraint = deserializeOptionTSType(pos + 40); + node.default = deserializeOptionTSType(pos + 56); + parent = previousParent; + return node; +} + +function deserializeTSTypeParameterDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeParameterDeclaration', + params: null, + start, + end, + range: [start, end], + parent, + }; + node.params = deserializeVecTSTypeParameter(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeAliasDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAliasDeclaration', + id: null, + typeParameters: null, + typeAnnotation: null, + declare: deserializeBool(pos + 68), + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.typeAnnotation = deserializeTSType(pos + 48); + parent = previousParent; + return node; +} + +function deserializeTSAccessibility(pos) { + switch (uint8[pos]) { + case 0: + return 'private'; + case 1: + return 'protected'; + case 2: + return 'public'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSAccessibility`); + } +} + +function deserializeTSClassImplements(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSClassImplements', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }, + expression = deserializeTSTypeName(pos + 8); + if (expression.type === 'TSQualifiedName') { + let object = expression.left, + { right } = expression, + start, + end, + previous = expression = { + type: 'MemberExpression', + object, + property: right, + optional: false, + computed: false, + start: start = expression.start, + end: end = expression.end, + range: [start, end], + parent, + }; + right.parent = previous; + for (;;) { + if (object.type !== 'TSQualifiedName') { + object.parent = previous; + break; + } + let { left, right } = object; + previous = previous.object = { + type: 'MemberExpression', + object: left, + property: right, + optional: false, + computed: false, + start: start = object.start, + end: end = object.end, + range: [start, end], + parent: previous, + }; + right.parent = previous; + object = left; + } + } + node.expression = expression; + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceDeclaration', + id: null, + typeParameters: null, + extends: null, + body: null, + declare: deserializeBool(pos + 84), + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 40); + node.extends = deserializeVecTSInterfaceHeritage(pos + 48); + node.body = deserializeBoxTSInterfaceBody(pos + 72); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceBody(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceBody', + body: null, + start, + end, + range: [start, end], + parent, + }; + node.body = deserializeVecTSSignature(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSPropertySignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSPropertySignature', + computed: deserializeBool(pos + 32), + optional: deserializeBool(pos + 33), + readonly: deserializeBool(pos + 34), + key: null, + typeAnnotation: null, + accessibility: null, + static: null, + start, + end, + range: [start, end], + parent, + }; + node.key = deserializePropertyKey(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + node.accessibility = null; + node.static = false; + parent = previousParent; + return node; +} + +function deserializeTSSignature(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSIndexSignature(pos + 8); + case 1: + return deserializeBoxTSPropertySignature(pos + 8); + case 2: + return deserializeBoxTSCallSignatureDeclaration(pos + 8); + case 3: + return deserializeBoxTSConstructSignatureDeclaration(pos + 8); + case 4: + return deserializeBoxTSMethodSignature(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSSignature`); + } +} + +function deserializeTSIndexSignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSIndexSignature', + parameters: null, + typeAnnotation: null, + readonly: deserializeBool(pos + 40), + static: deserializeBool(pos + 41), + accessibility: null, + start, + end, + range: [start, end], + parent, + }; + node.parameters = deserializeVecTSIndexSignatureName(pos + 8); + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 32); + node.accessibility = null; + parent = previousParent; + return node; +} + +function deserializeTSCallSignatureDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSCallSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + parent, + }, + params = deserializeBoxFormalParameters(pos + 24), + thisParam = deserializeOptionBoxTSThisParameter(pos + 16); + thisParam !== null && params.unshift(thisParam); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSMethodSignatureKind(pos) { + switch (uint8[pos]) { + case 0: + return 'method'; + case 1: + return 'get'; + case 2: + return 'set'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSMethodSignatureKind`); + } +} + +function deserializeTSMethodSignature(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSMethodSignature', + key: null, + computed: deserializeBool(pos + 60), + optional: deserializeBool(pos + 61), + kind: deserializeTSMethodSignatureKind(pos + 62), + typeParameters: null, + params: null, + returnType: null, + accessibility: null, + readonly: null, + static: null, + start, + end, + range: [start, end], + parent, + }, + params = deserializeBoxFormalParameters(pos + 40), + thisParam = deserializeOptionBoxTSThisParameter(pos + 32); + thisParam !== null && params.unshift(thisParam); + node.key = deserializePropertyKey(pos + 8); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 24); + node.params = params; + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 48); + node.accessibility = null; + node.readonly = false; + node.static = false; + parent = previousParent; + return node; +} + +function deserializeTSConstructSignatureDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConstructSignatureDeclaration', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + parent, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeOptionBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSIndexSignatureName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Identifier', + decorators: null, + name: deserializeStr(pos + 8), + optional: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.decorators = []; + node.optional = false; + node.typeAnnotation = deserializeBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSInterfaceHeritage(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInterfaceHeritage', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypePredicate(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypePredicate', + parameterName: null, + asserts: deserializeBool(pos + 32), + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.parameterName = deserializeTSTypePredicateName(pos + 8); + node.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypePredicateName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeTSThisType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypePredicateName`); + } +} + +function deserializeTSModuleDeclaration(pos) { + let kind = deserializeTSModuleDeclarationKind(pos + 84), + global = kind === 'global', + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + declare = deserializeBool(pos + 85), + node, + previousParent = parent, + body = deserializeOptionTSModuleDeclarationBody(pos + 64); + if (body === null) { + node = parent = { + type: 'TSModuleDeclaration', + id: null, + kind, + declare, + global, + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeTSModuleDeclarationName(pos + 8); + } else { + node = parent = { + type: 'TSModuleDeclaration', + id: null, + body, + kind, + declare, + global, + start, + end, + range: [start, end], + parent, + }; + let id = deserializeTSModuleDeclarationName(pos + 8); + if (body.type === 'TSModuleBlock') { + node.id = id; + body.parent = node; + } else { + let innerId = body.id; + if (innerId.type === 'Identifier') { + let start, end; + id.parent = + innerId.parent = + node.id = + parent = + { + type: 'TSQualifiedName', + left: id, + right: innerId, + start: start = id.start, + end: end = innerId.end, + range: [start, end], + parent: node, + }; + } else { + // Replace `left` of innermost `TSQualifiedName` with a nested `TSQualifiedName` with `id` of + // this module on left, and previous `left` of innermost `TSQualifiedName` on right + node.id = innerId; + innerId.parent = node; + let { start } = id; + for (;;) { + innerId.start = innerId.range[0] = start; + if (innerId.left.type === 'Identifier') break; + innerId = innerId.left; + } + let end, right = innerId.left; + id.parent = right.parent = innerId.left = { + type: 'TSQualifiedName', + left: id, + right, + start, + end: end = right.end, + range: [start, end], + parent: innerId, + }; + } + if (Object.hasOwn(body, 'body')) { + body = body.body; + node.body = body; + body.parent = node; + } else body = null; + } + } + parent = previousParent; + return node; +} + +function deserializeTSModuleDeclarationKind(pos) { + switch (uint8[pos]) { + case 0: + return 'global'; + case 1: + return 'module'; + case 2: + return 'namespace'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationKind`); + } +} + +function deserializeTSModuleDeclarationName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBindingIdentifier(pos + 8); + case 1: + return deserializeStringLiteral(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationName`); + } +} + +function deserializeTSModuleDeclarationBody(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxTSModuleDeclaration(pos + 8); + case 1: + return deserializeBoxTSModuleBlock(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleDeclarationBody`); + } +} + +function deserializeTSModuleBlock(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSModuleBlock', + body: null, + start, + end, + range: [start, end], + parent, + }, + body = deserializeVecDirective(pos + 8); + body.push(...deserializeVecStatement(pos + 32)); + node.body = body; + parent = previousParent; + return node; +} + +function deserializeTSTypeLiteral(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeLiteral', + members: null, + start, + end, + range: [start, end], + parent, + }; + node.members = deserializeVecTSSignature(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSInferType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInferType', + typeParameter: null, + start, + end, + range: [start, end], + parent, + }; + node.typeParameter = deserializeBoxTSTypeParameter(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSTypeQuery(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeQuery', + exprName: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }; + node.exprName = deserializeTSTypeQueryExprName(pos + 8); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeQueryExprName(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + case 3: + return deserializeBoxTSImportType(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSTypeQueryExprName`); + } +} + +function deserializeTSImportType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSImportType', + argument: null, + options: null, + qualifier: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }; + node.argument = deserializeTSType(pos + 8); + node.options = deserializeOptionBoxObjectExpression(pos + 24); + node.qualifier = deserializeOptionTSImportTypeQualifier(pos + 32); + node.typeArguments = deserializeOptionBoxTSTypeParameterInstantiation(pos + 48); + parent = previousParent; + return node; +} + +function deserializeTSImportTypeQualifier(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierName(pos + 8); + case 1: + return deserializeBoxTSImportTypeQualifiedName(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSImportTypeQualifier`); + } +} + +function deserializeTSImportTypeQualifiedName(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSQualifiedName', + left: null, + right: null, + start, + end, + range: [start, end], + parent, + }; + node.left = deserializeTSImportTypeQualifier(pos + 8); + node.right = deserializeIdentifierName(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSFunctionType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSFunctionType', + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + parent, + }, + params = deserializeBoxFormalParameters(pos + 24), + thisParam = deserializeOptionBoxTSThisParameter(pos + 16); + thisParam !== null && params.unshift(thisParam); + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = params; + node.returnType = deserializeBoxTSTypeAnnotation(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSConstructorType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSConstructorType', + abstract: deserializeBool(pos + 32), + typeParameters: null, + params: null, + returnType: null, + start, + end, + range: [start, end], + parent, + }; + node.typeParameters = deserializeOptionBoxTSTypeParameterDeclaration(pos + 8); + node.params = deserializeBoxFormalParameters(pos + 16); + node.returnType = deserializeBoxTSTypeAnnotation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSMappedType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSMappedType', + key: null, + constraint: null, + nameType: null, + typeAnnotation: null, + optional: null, + readonly: deserializeOptionTSMappedTypeModifierOperator(pos + 53), + start, + end, + range: [start, end], + parent, + }, + typeParameter = deserializeBoxTSTypeParameter(pos + 8), + key = typeParameter.name; + key.parent = parent; + let { constraint } = typeParameter; + constraint !== null && (constraint.parent = parent); + let optional = deserializeOptionTSMappedTypeModifierOperator(pos + 52); + optional === null && (optional = false); + node.key = key; + node.constraint = constraint; + node.nameType = deserializeOptionTSType(pos + 16); + node.typeAnnotation = deserializeOptionTSType(pos + 32); + node.optional = optional; + parent = previousParent; + return node; +} + +function deserializeTSMappedTypeModifierOperator(pos) { + switch (uint8[pos]) { + case 0: + return true; + case 1: + return '+'; + case 2: + return '-'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSMappedTypeModifierOperator`); + } +} + +function deserializeTSTemplateLiteralType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTemplateLiteralType', + quasis: null, + types: null, + start, + end, + range: [start, end], + parent, + }; + node.quasis = deserializeVecTemplateElement(pos + 8); + node.types = deserializeVecTSType(pos + 32); + parent = previousParent; + return node; +} + +function deserializeTSAsExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSAsExpression', + expression: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSSatisfiesExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSSatisfiesExpression', + expression: null, + typeAnnotation: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeAnnotation = deserializeTSType(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSTypeAssertion(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSTypeAssertion', + typeAnnotation: null, + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + node.expression = deserializeExpression(pos + 24); + parent = previousParent; + return node; +} + +function deserializeTSImportEqualsDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSImportEqualsDeclaration', + id: null, + moduleReference: null, + importKind: deserializeImportOrExportKind(pos + 56), + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeBindingIdentifier(pos + 8); + node.moduleReference = deserializeTSModuleReference(pos + 40); + parent = previousParent; + return node; +} + +function deserializeTSModuleReference(pos) { + switch (uint8[pos]) { + case 0: + return deserializeBoxIdentifierReference(pos + 8); + case 1: + return deserializeBoxTSQualifiedName(pos + 8); + case 2: + return deserializeBoxThisExpression(pos + 8); + case 3: + return deserializeBoxTSExternalModuleReference(pos + 8); + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for TSModuleReference`); + } +} + +function deserializeTSExternalModuleReference(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSExternalModuleReference', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeStringLiteral(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNonNullExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNonNullExpression', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeDecorator(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'Decorator', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSExportAssignment(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSExportAssignment', + expression: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSNamespaceExportDeclaration(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSNamespaceExportDeclaration', + id: null, + start, + end, + range: [start, end], + parent, + }; + node.id = deserializeIdentifierName(pos + 8); + parent = previousParent; + return node; +} + +function deserializeTSInstantiationExpression(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSInstantiationExpression', + expression: null, + typeArguments: null, + start, + end, + range: [start, end], + parent, + }; + node.expression = deserializeExpression(pos + 8); + node.typeArguments = deserializeBoxTSTypeParameterInstantiation(pos + 24); + parent = previousParent; + return node; +} + +function deserializeImportOrExportKind(pos) { + switch (uint8[pos]) { + case 0: + return 'value'; + case 1: + return 'type'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportOrExportKind`); + } +} + +function deserializeJSDocNullableType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSJSDocNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSDocNonNullableType(pos) { + let start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type: 'TSJSDocNonNullableType', + typeAnnotation: null, + postfix: deserializeBool(pos + 24), + start, + end, + range: [start, end], + parent, + }; + node.typeAnnotation = deserializeTSType(pos + 8); + parent = previousParent; + return node; +} + +function deserializeJSDocUnknownType(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + type: 'TSJSDocUnknownType', + start, + end, + range: [start, end], + parent, + }; +} + +function deserializeCommentKind(pos) { + switch (uint8[pos]) { + case 0: + return 'Line'; + case 1: + return 'Block'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for CommentKind`); + } +} + +function deserializeComment(pos) { + let type = deserializeCommentKind(pos + 12), + start = deserializeU32(pos), + end = deserializeU32(pos + 4), + previousParent = parent, + node = parent = { + type, + value: null, + start, + end, + range: [start, end], + parent, + }, + endCut = type === 'Line' ? 0 : 2; + node.value = sourceText.slice(start + 2, end - endCut); + parent = previousParent; + return node; +} + +function deserializeNameSpan(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + value: deserializeStr(pos + 8), + start, + end, + range: [start, end], + }; +} + +function deserializeImportEntry(pos) { + return { + importName: deserializeImportImportName(pos + 32), + localName: deserializeNameSpan(pos + 64), + isType: deserializeBool(pos + 88), + }; +} + +function deserializeImportImportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + range: nameSpan.range, + }; + case 1: + return { + kind: 'NamespaceObject', + name: null, + start: null, + end: null, + range: [null, null], + }; + case 2: + var { start, end } = deserializeSpan(pos + 8); + return { + kind: 'Default', + name: null, + start, + end, + range: [start, end], + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ImportImportName`); + } +} + +function deserializeExportEntry(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeOptionNameSpan(pos + 16), + importName: deserializeExportImportName(pos + 40), + exportName: deserializeExportExportName(pos + 72), + localName: deserializeExportLocalName(pos + 104), + isType: deserializeBool(pos + 136), + start, + end, + range: [start, end], + }; +} + +function deserializeExportImportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + range: nameSpan.range, + }; + case 1: + return { + kind: 'All', + name: null, + start: null, + end: null, + range: [null, null], + }; + case 2: + return { + kind: 'AllButDefault', + name: null, + start: null, + end: null, + range: [null, null], + }; + case 3: + return { + kind: 'None', + name: null, + start: null, + end: null, + range: [null, null], + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportImportName`); + } +} + +function deserializeExportExportName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + range: nameSpan.range, + }; + case 1: + var { start, end } = deserializeSpan(pos + 8); + return { + kind: 'Default', + name: null, + start, + end, + range: [start, end], + }; + case 2: + return { + kind: 'None', + name: null, + start: null, + end: null, + range: [null, null], + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportExportName`); + } +} + +function deserializeExportLocalName(pos) { + switch (uint8[pos]) { + case 0: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Name', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + range: nameSpan.range, + }; + case 1: + var nameSpan = deserializeNameSpan(pos + 8); + return { + kind: 'Default', + name: nameSpan.value, + start: nameSpan.start, + end: nameSpan.end, + range: nameSpan.range, + }; + case 2: + return { + kind: 'None', + name: null, + start: null, + end: null, + range: [null, null], + }; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ExportLocalName`); + } +} + +function deserializeDynamicImport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeSpan(pos + 8), + start, + end, + range: [start, end], + }; +} + +function deserializeAssignmentOperator(pos) { + switch (uint8[pos]) { + case 0: + return '='; + case 1: + return '+='; + case 2: + return '-='; + case 3: + return '*='; + case 4: + return '/='; + case 5: + return '%='; + case 6: + return '**='; + case 7: + return '<<='; + case 8: + return '>>='; + case 9: + return '>>>='; + case 10: + return '|='; + case 11: + return '^='; + case 12: + return '&='; + case 13: + return '||='; + case 14: + return '&&='; + case 15: + return '??='; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for AssignmentOperator`); + } +} + +function deserializeBinaryOperator(pos) { + switch (uint8[pos]) { + case 0: + return '=='; + case 1: + return '!='; + case 2: + return '==='; + case 3: + return '!=='; + case 4: + return '<'; + case 5: + return '<='; + case 6: + return '>'; + case 7: + return '>='; + case 8: + return '+'; + case 9: + return '-'; + case 10: + return '*'; + case 11: + return '/'; + case 12: + return '%'; + case 13: + return '**'; + case 14: + return '<<'; + case 15: + return '>>'; + case 16: + return '>>>'; + case 17: + return '|'; + case 18: + return '^'; + case 19: + return '&'; + case 20: + return 'in'; + case 21: + return 'instanceof'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for BinaryOperator`); + } +} + +function deserializeLogicalOperator(pos) { + switch (uint8[pos]) { + case 0: + return '||'; + case 1: + return '&&'; + case 2: + return '??'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for LogicalOperator`); + } +} + +function deserializeUnaryOperator(pos) { + switch (uint8[pos]) { + case 0: + return '+'; + case 1: + return '-'; + case 2: + return '!'; + case 3: + return '~'; + case 4: + return 'typeof'; + case 5: + return 'void'; + case 6: + return 'delete'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for UnaryOperator`); + } +} + +function deserializeUpdateOperator(pos) { + switch (uint8[pos]) { + case 0: + return '++'; + case 1: + return '--'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for UpdateOperator`); + } +} + +function deserializeSpan(pos) { + return { + start: deserializeU32(pos), + end: deserializeU32(pos + 4), + }; +} + +function deserializeModuleKind(pos) { + switch (uint8[pos]) { + case 0: + return 'script'; + case 1: + return 'module'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ModuleKind`); + } +} + +function deserializeRawTransferData(pos) { + return { + program: deserializeProgram(pos), + comments: deserializeVecComment(pos + 128), + module: deserializeEcmaScriptModule(pos + 152), + errors: deserializeVecError(pos + 256), + }; +} + +function deserializeError(pos) { + return { + severity: deserializeErrorSeverity(pos + 72), + message: deserializeStr(pos), + labels: deserializeVecErrorLabel(pos + 16), + helpMessage: deserializeOptionStr(pos + 40), + codeframe: deserializeStr(pos + 56), + }; +} + +function deserializeErrorSeverity(pos) { + switch (uint8[pos]) { + case 0: + return 'Error'; + case 1: + return 'Warning'; + case 2: + return 'Advice'; + default: + throw Error(`Unexpected discriminant ${uint8[pos]} for ErrorSeverity`); + } +} + +function deserializeErrorLabel(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + message: deserializeOptionStr(pos + 8), + start, + end, + range: [start, end], + }; +} + +function deserializeEcmaScriptModule(pos) { + return { + hasModuleSyntax: deserializeBool(pos + 96), + staticImports: deserializeVecStaticImport(pos), + staticExports: deserializeVecStaticExport(pos + 24), + dynamicImports: deserializeVecDynamicImport(pos + 48), + importMetas: deserializeVecSpan(pos + 72), + }; +} + +function deserializeStaticImport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + moduleRequest: deserializeNameSpan(pos + 8), + entries: deserializeVecImportEntry(pos + 32), + start, + end, + range: [start, end], + }; +} + +function deserializeStaticExport(pos) { + let start = deserializeU32(pos), end = deserializeU32(pos + 4); + return { + entries: deserializeVecExportEntry(pos + 8), + start, + end, + range: [start, end], + }; +} + +function deserializeU32(pos) { + return uint32[pos >> 2]; +} + +function deserializeU8(pos) { + return uint8[pos]; +} + +function deserializeStr(pos) { + let pos32 = pos >> 2, len = uint32[pos32 + 2]; + if (len === 0) return ''; + pos = uint32[pos32]; + if (sourceIsAscii && pos < sourceByteLen) return sourceText.substr(pos, len); + // Longer strings use `TextDecoder` + // TODO: Find best switch-over point + let end = pos + len; + if (len > 50) return decodeStr(uint8.subarray(pos, end)); + // Shorter strings decode by hand to avoid native call + let out = '', c; + do { + c = uint8[pos++]; + if (c < 128) out += fromCodePoint(c); + else { + out += decodeStr(uint8.subarray(pos - 1, end)); + break; + } + } while (pos < end); + return out; +} + +function deserializeVecComment(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeComment(pos)); + pos += 16; + } + return arr; +} + +function deserializeOptionHashbang(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeHashbang(pos); +} + +function deserializeVecDirective(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 72; + for (; pos !== endPos;) { + arr.push(deserializeDirective(pos)); + pos += 72; + } + return arr; +} + +function deserializeVecStatement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeStatement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxBooleanLiteral(pos) { + return deserializeBooleanLiteral(uint32[pos >> 2]); +} + +function deserializeBoxNullLiteral(pos) { + return deserializeNullLiteral(uint32[pos >> 2]); +} + +function deserializeBoxNumericLiteral(pos) { + return deserializeNumericLiteral(uint32[pos >> 2]); +} + +function deserializeBoxBigIntLiteral(pos) { + return deserializeBigIntLiteral(uint32[pos >> 2]); +} + +function deserializeBoxRegExpLiteral(pos) { + return deserializeRegExpLiteral(uint32[pos >> 2]); +} + +function deserializeBoxStringLiteral(pos) { + return deserializeStringLiteral(uint32[pos >> 2]); +} + +function deserializeBoxTemplateLiteral(pos) { + return deserializeTemplateLiteral(uint32[pos >> 2]); +} + +function deserializeBoxIdentifierReference(pos) { + return deserializeIdentifierReference(uint32[pos >> 2]); +} + +function deserializeBoxMetaProperty(pos) { + return deserializeMetaProperty(uint32[pos >> 2]); +} + +function deserializeBoxSuper(pos) { + return deserializeSuper(uint32[pos >> 2]); +} + +function deserializeBoxArrayExpression(pos) { + return deserializeArrayExpression(uint32[pos >> 2]); +} + +function deserializeBoxArrowFunctionExpression(pos) { + return deserializeArrowFunctionExpression(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentExpression(pos) { + return deserializeAssignmentExpression(uint32[pos >> 2]); +} + +function deserializeBoxAwaitExpression(pos) { + return deserializeAwaitExpression(uint32[pos >> 2]); +} + +function deserializeBoxBinaryExpression(pos) { + return deserializeBinaryExpression(uint32[pos >> 2]); +} + +function deserializeBoxCallExpression(pos) { + return deserializeCallExpression(uint32[pos >> 2]); +} + +function deserializeBoxChainExpression(pos) { + return deserializeChainExpression(uint32[pos >> 2]); +} + +function deserializeBoxClass(pos) { + return deserializeClass(uint32[pos >> 2]); +} + +function deserializeBoxConditionalExpression(pos) { + return deserializeConditionalExpression(uint32[pos >> 2]); +} + +function deserializeBoxFunction(pos) { + return deserializeFunction(uint32[pos >> 2]); +} + +function deserializeBoxImportExpression(pos) { + return deserializeImportExpression(uint32[pos >> 2]); +} + +function deserializeBoxLogicalExpression(pos) { + return deserializeLogicalExpression(uint32[pos >> 2]); +} + +function deserializeBoxNewExpression(pos) { + return deserializeNewExpression(uint32[pos >> 2]); +} + +function deserializeBoxObjectExpression(pos) { + return deserializeObjectExpression(uint32[pos >> 2]); +} + +function deserializeBoxParenthesizedExpression(pos) { + return deserializeParenthesizedExpression(uint32[pos >> 2]); +} + +function deserializeBoxSequenceExpression(pos) { + return deserializeSequenceExpression(uint32[pos >> 2]); +} + +function deserializeBoxTaggedTemplateExpression(pos) { + return deserializeTaggedTemplateExpression(uint32[pos >> 2]); +} + +function deserializeBoxThisExpression(pos) { + return deserializeThisExpression(uint32[pos >> 2]); +} + +function deserializeBoxUnaryExpression(pos) { + return deserializeUnaryExpression(uint32[pos >> 2]); +} + +function deserializeBoxUpdateExpression(pos) { + return deserializeUpdateExpression(uint32[pos >> 2]); +} + +function deserializeBoxYieldExpression(pos) { + return deserializeYieldExpression(uint32[pos >> 2]); +} + +function deserializeBoxPrivateInExpression(pos) { + return deserializePrivateInExpression(uint32[pos >> 2]); +} + +function deserializeBoxJSXElement(pos) { + return deserializeJSXElement(uint32[pos >> 2]); +} + +function deserializeBoxJSXFragment(pos) { + return deserializeJSXFragment(uint32[pos >> 2]); +} + +function deserializeBoxTSAsExpression(pos) { + return deserializeTSAsExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSSatisfiesExpression(pos) { + return deserializeTSSatisfiesExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeAssertion(pos) { + return deserializeTSTypeAssertion(uint32[pos >> 2]); +} + +function deserializeBoxTSNonNullExpression(pos) { + return deserializeTSNonNullExpression(uint32[pos >> 2]); +} + +function deserializeBoxTSInstantiationExpression(pos) { + return deserializeTSInstantiationExpression(uint32[pos >> 2]); +} + +function deserializeBoxV8IntrinsicExpression(pos) { + return deserializeV8IntrinsicExpression(uint32[pos >> 2]); +} + +function deserializeVecArrayExpressionElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeArrayExpressionElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxSpreadElement(pos) { + return deserializeSpreadElement(uint32[pos >> 2]); +} + +function deserializeVecObjectPropertyKind(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeObjectPropertyKind(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxObjectProperty(pos) { + return deserializeObjectProperty(uint32[pos >> 2]); +} + +function deserializeBool(pos) { + return uint8[pos] === 1; +} + +function deserializeBoxIdentifierName(pos) { + return deserializeIdentifierName(uint32[pos >> 2]); +} + +function deserializeBoxPrivateIdentifier(pos) { + return deserializePrivateIdentifier(uint32[pos >> 2]); +} + +function deserializeVecTemplateElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 48; + for (; pos !== endPos;) { + arr.push(deserializeTemplateElement(pos)); + pos += 48; + } + return arr; +} + +function deserializeVecExpression(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeExpression(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSTypeParameterInstantiation(pos) { + return deserializeTSTypeParameterInstantiation(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeParameterInstantiation(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeParameterInstantiation(pos); +} + +function deserializeOptionStr(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeStr(pos); +} + +function deserializeBoxComputedMemberExpression(pos) { + return deserializeComputedMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxStaticMemberExpression(pos) { + return deserializeStaticMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxPrivateFieldExpression(pos) { + return deserializePrivateFieldExpression(uint32[pos >> 2]); +} + +function deserializeVecArgument(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeArgument(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxArrayAssignmentTarget(pos) { + return deserializeArrayAssignmentTarget(uint32[pos >> 2]); +} + +function deserializeBoxObjectAssignmentTarget(pos) { + return deserializeObjectAssignmentTarget(uint32[pos >> 2]); +} + +function deserializeOptionAssignmentTargetMaybeDefault(pos) { + if (uint8[pos] === 51) return null; + return deserializeAssignmentTargetMaybeDefault(pos); +} + +function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeOptionAssignmentTargetMaybeDefault(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxAssignmentTargetRest(pos) { + return deserializeAssignmentTargetRest(uint32[pos >> 2]); +} + +function deserializeOptionBoxAssignmentTargetRest(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxAssignmentTargetRest(pos); +} + +function deserializeVecAssignmentTargetProperty(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeAssignmentTargetProperty(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxAssignmentTargetWithDefault(pos) { + return deserializeAssignmentTargetWithDefault(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentTargetPropertyIdentifier(pos) { + return deserializeAssignmentTargetPropertyIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentTargetPropertyProperty(pos) { + return deserializeAssignmentTargetPropertyProperty(uint32[pos >> 2]); +} + +function deserializeOptionExpression(pos) { + if (uint8[pos] === 51) return null; + return deserializeExpression(pos); +} + +function deserializeBoxBlockStatement(pos) { + return deserializeBlockStatement(uint32[pos >> 2]); +} + +function deserializeBoxBreakStatement(pos) { + return deserializeBreakStatement(uint32[pos >> 2]); +} + +function deserializeBoxContinueStatement(pos) { + return deserializeContinueStatement(uint32[pos >> 2]); +} + +function deserializeBoxDebuggerStatement(pos) { + return deserializeDebuggerStatement(uint32[pos >> 2]); +} + +function deserializeBoxDoWhileStatement(pos) { + return deserializeDoWhileStatement(uint32[pos >> 2]); +} + +function deserializeBoxEmptyStatement(pos) { + return deserializeEmptyStatement(uint32[pos >> 2]); +} + +function deserializeBoxExpressionStatement(pos) { + return deserializeExpressionStatement(uint32[pos >> 2]); +} + +function deserializeBoxForInStatement(pos) { + return deserializeForInStatement(uint32[pos >> 2]); +} + +function deserializeBoxForOfStatement(pos) { + return deserializeForOfStatement(uint32[pos >> 2]); +} + +function deserializeBoxForStatement(pos) { + return deserializeForStatement(uint32[pos >> 2]); +} + +function deserializeBoxIfStatement(pos) { + return deserializeIfStatement(uint32[pos >> 2]); +} + +function deserializeBoxLabeledStatement(pos) { + return deserializeLabeledStatement(uint32[pos >> 2]); +} + +function deserializeBoxReturnStatement(pos) { + return deserializeReturnStatement(uint32[pos >> 2]); +} + +function deserializeBoxSwitchStatement(pos) { + return deserializeSwitchStatement(uint32[pos >> 2]); +} + +function deserializeBoxThrowStatement(pos) { + return deserializeThrowStatement(uint32[pos >> 2]); +} + +function deserializeBoxTryStatement(pos) { + return deserializeTryStatement(uint32[pos >> 2]); +} + +function deserializeBoxWhileStatement(pos) { + return deserializeWhileStatement(uint32[pos >> 2]); +} + +function deserializeBoxWithStatement(pos) { + return deserializeWithStatement(uint32[pos >> 2]); +} + +function deserializeBoxVariableDeclaration(pos) { + return deserializeVariableDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeAliasDeclaration(pos) { + return deserializeTSTypeAliasDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSInterfaceDeclaration(pos) { + return deserializeTSInterfaceDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSEnumDeclaration(pos) { + return deserializeTSEnumDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSModuleDeclaration(pos) { + return deserializeTSModuleDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSImportEqualsDeclaration(pos) { + return deserializeTSImportEqualsDeclaration(uint32[pos >> 2]); +} + +function deserializeVecVariableDeclarator(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 64; + for (; pos !== endPos;) { + arr.push(deserializeVariableDeclarator(pos)); + pos += 64; + } + return arr; +} + +function deserializeOptionStatement(pos) { + if (uint8[pos] === 70) return null; + return deserializeStatement(pos); +} + +function deserializeOptionForStatementInit(pos) { + if (uint8[pos] === 65) return null; + return deserializeForStatementInit(pos); +} + +function deserializeOptionLabelIdentifier(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeLabelIdentifier(pos); +} + +function deserializeVecSwitchCase(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 48; + for (; pos !== endPos;) { + arr.push(deserializeSwitchCase(pos)); + pos += 48; + } + return arr; +} + +function deserializeBoxCatchClause(pos) { + return deserializeCatchClause(uint32[pos >> 2]); +} + +function deserializeOptionBoxCatchClause(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxCatchClause(pos); +} + +function deserializeOptionBoxBlockStatement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxBlockStatement(pos); +} + +function deserializeOptionCatchParameter(pos) { + if (uint8[pos + 32] === 2) return null; + return deserializeCatchParameter(pos); +} + +function deserializeBoxTSTypeAnnotation(pos) { + return deserializeTSTypeAnnotation(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeAnnotation(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeAnnotation(pos); +} + +function deserializeBoxBindingIdentifier(pos) { + return deserializeBindingIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxObjectPattern(pos) { + return deserializeObjectPattern(uint32[pos >> 2]); +} + +function deserializeBoxArrayPattern(pos) { + return deserializeArrayPattern(uint32[pos >> 2]); +} + +function deserializeBoxAssignmentPattern(pos) { + return deserializeAssignmentPattern(uint32[pos >> 2]); +} + +function deserializeVecBindingProperty(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 64; + for (; pos !== endPos;) { + arr.push(deserializeBindingProperty(pos)); + pos += 64; + } + return arr; +} + +function deserializeBoxBindingRestElement(pos) { + return deserializeBindingRestElement(uint32[pos >> 2]); +} + +function deserializeOptionBoxBindingRestElement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxBindingRestElement(pos); +} + +function deserializeOptionBindingPattern(pos) { + if (uint8[pos + 24] === 2) return null; + return deserializeBindingPattern(pos); +} + +function deserializeVecOptionBindingPattern(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeOptionBindingPattern(pos)); + pos += 32; + } + return arr; +} + +function deserializeOptionBindingIdentifier(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeBindingIdentifier(pos); +} + +function deserializeBoxTSTypeParameterDeclaration(pos) { + return deserializeTSTypeParameterDeclaration(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSTypeParameterDeclaration(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSTypeParameterDeclaration(pos); +} + +function deserializeBoxTSThisParameter(pos) { + return deserializeTSThisParameter(uint32[pos >> 2]); +} + +function deserializeOptionBoxTSThisParameter(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxTSThisParameter(pos); +} + +function deserializeBoxFormalParameters(pos) { + return deserializeFormalParameters(uint32[pos >> 2]); +} + +function deserializeBoxFunctionBody(pos) { + return deserializeFunctionBody(uint32[pos >> 2]); +} + +function deserializeOptionBoxFunctionBody(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxFunctionBody(pos); +} + +function deserializeVecFormalParameter(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 72; + for (; pos !== endPos;) { + arr.push(deserializeFormalParameter(pos)); + pos += 72; + } + return arr; +} + +function deserializeVecDecorator(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 24; + for (; pos !== endPos;) { + arr.push(deserializeDecorator(pos)); + pos += 24; + } + return arr; +} + +function deserializeOptionTSAccessibility(pos) { + if (uint8[pos] === 3) return null; + return deserializeTSAccessibility(pos); +} + +function deserializeVecTSClassImplements(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeTSClassImplements(pos)); + pos += 32; + } + return arr; +} + +function deserializeBoxClassBody(pos) { + return deserializeClassBody(uint32[pos >> 2]); +} + +function deserializeVecClassElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeClassElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxStaticBlock(pos) { + return deserializeStaticBlock(uint32[pos >> 2]); +} + +function deserializeBoxMethodDefinition(pos) { + return deserializeMethodDefinition(uint32[pos >> 2]); +} + +function deserializeBoxPropertyDefinition(pos) { + return deserializePropertyDefinition(uint32[pos >> 2]); +} + +function deserializeBoxAccessorProperty(pos) { + return deserializeAccessorProperty(uint32[pos >> 2]); +} + +function deserializeBoxTSIndexSignature(pos) { + return deserializeTSIndexSignature(uint32[pos >> 2]); +} + +function deserializeBoxImportDeclaration(pos) { + return deserializeImportDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportAllDeclaration(pos) { + return deserializeExportAllDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportDefaultDeclaration(pos) { + return deserializeExportDefaultDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxExportNamedDeclaration(pos) { + return deserializeExportNamedDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSExportAssignment(pos) { + return deserializeTSExportAssignment(uint32[pos >> 2]); +} + +function deserializeBoxTSNamespaceExportDeclaration(pos) { + return deserializeTSNamespaceExportDeclaration(uint32[pos >> 2]); +} + +function deserializeOptionImportPhase(pos) { + if (uint8[pos] === 2) return null; + return deserializeImportPhase(pos); +} + +function deserializeVecImportDeclarationSpecifier(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeImportDeclarationSpecifier(pos)); + pos += 16; + } + return arr; +} + +function deserializeOptionVecImportDeclarationSpecifier(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeVecImportDeclarationSpecifier(pos); +} + +function deserializeBoxWithClause(pos) { + return deserializeWithClause(uint32[pos >> 2]); +} + +function deserializeOptionBoxWithClause(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxWithClause(pos); +} + +function deserializeBoxImportSpecifier(pos) { + return deserializeImportSpecifier(uint32[pos >> 2]); +} + +function deserializeBoxImportDefaultSpecifier(pos) { + return deserializeImportDefaultSpecifier(uint32[pos >> 2]); +} + +function deserializeBoxImportNamespaceSpecifier(pos) { + return deserializeImportNamespaceSpecifier(uint32[pos >> 2]); +} + +function deserializeVecImportAttribute(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 112; + for (; pos !== endPos;) { + arr.push(deserializeImportAttribute(pos)); + pos += 112; + } + return arr; +} + +function deserializeOptionDeclaration(pos) { + if (uint8[pos] === 31) return null; + return deserializeDeclaration(pos); +} + +function deserializeVecExportSpecifier(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 128; + for (; pos !== endPos;) { + arr.push(deserializeExportSpecifier(pos)); + pos += 128; + } + return arr; +} + +function deserializeOptionStringLiteral(pos) { + if (uint8[pos + 40] === 2) return null; + return deserializeStringLiteral(pos); +} + +function deserializeOptionModuleExportName(pos) { + if (uint8[pos] === 3) return null; + return deserializeModuleExportName(pos); +} + +function deserializeF64(pos) { + return float64[pos >> 3]; +} + +function deserializeBoxJSXOpeningElement(pos) { + return deserializeJSXOpeningElement(uint32[pos >> 2]); +} + +function deserializeVecJSXChild(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeJSXChild(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxJSXClosingElement(pos) { + return deserializeJSXClosingElement(uint32[pos >> 2]); +} + +function deserializeOptionBoxJSXClosingElement(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxJSXClosingElement(pos); +} + +function deserializeVecJSXAttributeItem(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeJSXAttributeItem(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxJSXIdentifier(pos) { + return deserializeJSXIdentifier(uint32[pos >> 2]); +} + +function deserializeBoxJSXNamespacedName(pos) { + return deserializeJSXNamespacedName(uint32[pos >> 2]); +} + +function deserializeBoxJSXMemberExpression(pos) { + return deserializeJSXMemberExpression(uint32[pos >> 2]); +} + +function deserializeBoxJSXAttribute(pos) { + return deserializeJSXAttribute(uint32[pos >> 2]); +} + +function deserializeBoxJSXSpreadAttribute(pos) { + return deserializeJSXSpreadAttribute(uint32[pos >> 2]); +} + +function deserializeOptionJSXAttributeValue(pos) { + if (uint8[pos] === 4) return null; + return deserializeJSXAttributeValue(pos); +} + +function deserializeBoxJSXExpressionContainer(pos) { + return deserializeJSXExpressionContainer(uint32[pos >> 2]); +} + +function deserializeBoxJSXText(pos) { + return deserializeJSXText(uint32[pos >> 2]); +} + +function deserializeBoxJSXSpreadChild(pos) { + return deserializeJSXSpreadChild(uint32[pos >> 2]); +} + +function deserializeVecTSEnumMember(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 40; + for (; pos !== endPos;) { + arr.push(deserializeTSEnumMember(pos)); + pos += 40; + } + return arr; +} + +function deserializeBoxTSAnyKeyword(pos) { + return deserializeTSAnyKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSBigIntKeyword(pos) { + return deserializeTSBigIntKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSBooleanKeyword(pos) { + return deserializeTSBooleanKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSIntrinsicKeyword(pos) { + return deserializeTSIntrinsicKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNeverKeyword(pos) { + return deserializeTSNeverKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNullKeyword(pos) { + return deserializeTSNullKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSNumberKeyword(pos) { + return deserializeTSNumberKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSObjectKeyword(pos) { + return deserializeTSObjectKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSStringKeyword(pos) { + return deserializeTSStringKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSSymbolKeyword(pos) { + return deserializeTSSymbolKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSUndefinedKeyword(pos) { + return deserializeTSUndefinedKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSUnknownKeyword(pos) { + return deserializeTSUnknownKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSVoidKeyword(pos) { + return deserializeTSVoidKeyword(uint32[pos >> 2]); +} + +function deserializeBoxTSArrayType(pos) { + return deserializeTSArrayType(uint32[pos >> 2]); +} + +function deserializeBoxTSConditionalType(pos) { + return deserializeTSConditionalType(uint32[pos >> 2]); +} + +function deserializeBoxTSConstructorType(pos) { + return deserializeTSConstructorType(uint32[pos >> 2]); +} + +function deserializeBoxTSFunctionType(pos) { + return deserializeTSFunctionType(uint32[pos >> 2]); +} + +function deserializeBoxTSImportType(pos) { + return deserializeTSImportType(uint32[pos >> 2]); +} + +function deserializeBoxTSIndexedAccessType(pos) { + return deserializeTSIndexedAccessType(uint32[pos >> 2]); +} + +function deserializeBoxTSInferType(pos) { + return deserializeTSInferType(uint32[pos >> 2]); +} + +function deserializeBoxTSIntersectionType(pos) { + return deserializeTSIntersectionType(uint32[pos >> 2]); +} + +function deserializeBoxTSLiteralType(pos) { + return deserializeTSLiteralType(uint32[pos >> 2]); +} + +function deserializeBoxTSMappedType(pos) { + return deserializeTSMappedType(uint32[pos >> 2]); +} + +function deserializeBoxTSNamedTupleMember(pos) { + return deserializeTSNamedTupleMember(uint32[pos >> 2]); +} + +function deserializeBoxTSTemplateLiteralType(pos) { + return deserializeTSTemplateLiteralType(uint32[pos >> 2]); +} + +function deserializeBoxTSThisType(pos) { + return deserializeTSThisType(uint32[pos >> 2]); +} + +function deserializeBoxTSTupleType(pos) { + return deserializeTSTupleType(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeLiteral(pos) { + return deserializeTSTypeLiteral(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeOperator(pos) { + return deserializeTSTypeOperator(uint32[pos >> 2]); +} + +function deserializeBoxTSTypePredicate(pos) { + return deserializeTSTypePredicate(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeQuery(pos) { + return deserializeTSTypeQuery(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeReference(pos) { + return deserializeTSTypeReference(uint32[pos >> 2]); +} + +function deserializeBoxTSUnionType(pos) { + return deserializeTSUnionType(uint32[pos >> 2]); +} + +function deserializeBoxTSParenthesizedType(pos) { + return deserializeTSParenthesizedType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocNullableType(pos) { + return deserializeJSDocNullableType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocNonNullableType(pos) { + return deserializeJSDocNonNullableType(uint32[pos >> 2]); +} + +function deserializeBoxJSDocUnknownType(pos) { + return deserializeJSDocUnknownType(uint32[pos >> 2]); +} + +function deserializeVecTSType(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSType(pos)); + pos += 16; + } + return arr; +} + +function deserializeVecTSTupleElement(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSTupleElement(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSOptionalType(pos) { + return deserializeTSOptionalType(uint32[pos >> 2]); +} + +function deserializeBoxTSRestType(pos) { + return deserializeTSRestType(uint32[pos >> 2]); +} + +function deserializeBoxTSQualifiedName(pos) { + return deserializeTSQualifiedName(uint32[pos >> 2]); +} + +function deserializeOptionTSType(pos) { + if (uint8[pos] === 38) return null; + return deserializeTSType(pos); +} + +function deserializeVecTSTypeParameter(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 80; + for (; pos !== endPos;) { + arr.push(deserializeTSTypeParameter(pos)); + pos += 80; + } + return arr; +} + +function deserializeVecTSInterfaceHeritage(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeTSInterfaceHeritage(pos)); + pos += 32; + } + return arr; +} + +function deserializeBoxTSInterfaceBody(pos) { + return deserializeTSInterfaceBody(uint32[pos >> 2]); +} + +function deserializeVecTSSignature(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeTSSignature(pos)); + pos += 16; + } + return arr; +} + +function deserializeBoxTSPropertySignature(pos) { + return deserializeTSPropertySignature(uint32[pos >> 2]); +} + +function deserializeBoxTSCallSignatureDeclaration(pos) { + return deserializeTSCallSignatureDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSConstructSignatureDeclaration(pos) { + return deserializeTSConstructSignatureDeclaration(uint32[pos >> 2]); +} + +function deserializeBoxTSMethodSignature(pos) { + return deserializeTSMethodSignature(uint32[pos >> 2]); +} + +function deserializeVecTSIndexSignatureName(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeTSIndexSignatureName(pos)); + pos += 32; + } + return arr; +} + +function deserializeOptionTSModuleDeclarationBody(pos) { + if (uint8[pos] === 2) return null; + return deserializeTSModuleDeclarationBody(pos); +} + +function deserializeBoxTSModuleBlock(pos) { + return deserializeTSModuleBlock(uint32[pos >> 2]); +} + +function deserializeBoxTSTypeParameter(pos) { + return deserializeTSTypeParameter(uint32[pos >> 2]); +} + +function deserializeOptionBoxObjectExpression(pos) { + if (uint32[pos >> 2] === 0 && uint32[pos + 4 >> 2] === 0) return null; + return deserializeBoxObjectExpression(pos); +} + +function deserializeOptionTSImportTypeQualifier(pos) { + if (uint8[pos] === 2) return null; + return deserializeTSImportTypeQualifier(pos); +} + +function deserializeBoxTSImportTypeQualifiedName(pos) { + return deserializeTSImportTypeQualifiedName(uint32[pos >> 2]); +} + +function deserializeOptionTSMappedTypeModifierOperator(pos) { + if (uint8[pos] === 3) return null; + return deserializeTSMappedTypeModifierOperator(pos); +} + +function deserializeBoxTSExternalModuleReference(pos) { + return deserializeTSExternalModuleReference(uint32[pos >> 2]); +} + +function deserializeOptionNameSpan(pos) { + if (uint32[pos + 8 >> 2] === 0 && uint32[pos + 12 >> 2] === 0) return null; + return deserializeNameSpan(pos); +} + +function deserializeVecError(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 80; + for (; pos !== endPos;) { + arr.push(deserializeError(pos)); + pos += 80; + } + return arr; +} + +function deserializeVecErrorLabel(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 24; + for (; pos !== endPos;) { + arr.push(deserializeErrorLabel(pos)); + pos += 24; + } + return arr; +} + +function deserializeVecStaticImport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 56; + for (; pos !== endPos;) { + arr.push(deserializeStaticImport(pos)); + pos += 56; + } + return arr; +} + +function deserializeVecStaticExport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 32; + for (; pos !== endPos;) { + arr.push(deserializeStaticExport(pos)); + pos += 32; + } + return arr; +} + +function deserializeVecDynamicImport(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 16; + for (; pos !== endPos;) { + arr.push(deserializeDynamicImport(pos)); + pos += 16; + } + return arr; +} + +function deserializeVecSpan(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 8; + for (; pos !== endPos;) { + arr.push(deserializeSpan(pos)); + pos += 8; + } + return arr; +} + +function deserializeVecImportEntry(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 96; + for (; pos !== endPos;) { + arr.push(deserializeImportEntry(pos)); + pos += 96; + } + return arr; +} + +function deserializeVecExportEntry(pos) { + let arr = [], pos32 = pos >> 2; + pos = uint32[pos32]; + let endPos = pos + uint32[pos32 + 2] * 144; + for (; pos !== endPos;) { + arr.push(deserializeExportEntry(pos)); + pos += 144; + } + return arr; +} diff --git a/napi/parser/src-js/raw-transfer/common.js b/napi/parser/src-js/raw-transfer/common.js index c4ef8522af017..fe0151104cc2a 100644 --- a/napi/parser/src-js/raw-transfer/common.js +++ b/napi/parser/src-js/raw-transfer/common.js @@ -35,7 +35,7 @@ if (!rawTransferSupported()) { export function parseSyncRawImpl(filename, sourceText, options, convert) { const { buffer, sourceByteLen } = prepareRaw(sourceText); parseSyncRawBinding(filename, buffer, sourceByteLen, options); - return convert(buffer, sourceText, sourceByteLen, !!options.range); + return convert(buffer, sourceText, sourceByteLen, options); } // User should not schedule more async tasks than there are available CPUs, as it hurts performance, @@ -115,7 +115,7 @@ export async function parseAsyncRawImpl(filename, sourceText, options, convert) // Parse const { buffer, sourceByteLen } = prepareRaw(sourceText); await parseAsyncRawBinding(filename, buffer, sourceByteLen, options); - const data = convert(buffer, sourceText, sourceByteLen, !!options.range); + const data = convert(buffer, sourceText, sourceByteLen, options); // Free the CPU core if (queue.length > 0) { diff --git a/napi/parser/src-js/raw-transfer/eager.js b/napi/parser/src-js/raw-transfer/eager.js index 0c62eb185b3eb..f09a6d19538aa 100644 --- a/napi/parser/src-js/raw-transfer/eager.js +++ b/napi/parser/src-js/raw-transfer/eager.js @@ -43,9 +43,18 @@ export function parseAsyncRaw(filename, sourceText, options) { // Deserializers are large files, so lazy-loaded. // `deserialize` functions are stored in this array once loaded. -// Index into these arrays is `isJs * 1 + range * 2`. -const deserializers = [null, null, null, null]; -const deserializerNames = ['ts', 'js', 'ts_range', 'js_range']; +// Index into these arrays is `isJs * 1 + range * 2 + experimentalParent * 4`. +const deserializers = [null, null, null, null, null, null, null, null]; +const deserializerNames = [ + 'ts', + 'js', + 'ts_range', + 'js_range', + 'ts_parent', + 'js_parent', + 'ts_range_parent', + 'js_range_parent', +]; /** * Deserialize whole AST from buffer. @@ -53,14 +62,16 @@ const deserializerNames = ['ts', 'js', 'ts_range', 'js_range']; * @param {Uint8Array} buffer - Buffer containing AST in raw form * @param {string} sourceText - Source for the file * @param {number} sourceByteLen - Length of source text in UTF-8 bytes - * @param {boolean} range - `true` if AST should contain `range` fields + * @param {Object} options - Parsing options * @returns {Object} - Object with property getters for `program`, `module`, `comments`, and `errors` */ -function deserialize(buffer, sourceText, sourceByteLen, range) { - const isJs = isJsAst(buffer); +function deserialize(buffer, sourceText, sourceByteLen, options) { + const isJs = isJsAst(buffer), + range = !!options.range, + parent = !!options.experimentalParent; // Lazy load deserializer, and deserialize buffer to JS objects - const deserializerIndex = (+isJs) | ((+range) << 1); + const deserializerIndex = (+isJs) | ((+range) << 1) | ((+parent) << 2); let deserializeThis = deserializers[deserializerIndex]; if (deserializeThis === null) { deserializeThis = deserializers[deserializerIndex] = require( diff --git a/napi/parser/src-js/raw-transfer/lazy.js b/napi/parser/src-js/raw-transfer/lazy.js index d14dc899f5dc9..475c0514c31fb 100644 --- a/napi/parser/src-js/raw-transfer/lazy.js +++ b/napi/parser/src-js/raw-transfer/lazy.js @@ -87,10 +87,11 @@ const bufferRecycleRegistry = typeof FinalizationRegistry === 'undefined' * @param {Uint8Array} buffer - Buffer containing AST in raw form * @param {string} sourceText - Source for the file * @param {number} sourceByteLen - Length of source text in UTF-8 bytes + * @param {Object} _options - Parsing options * @returns {Object} - Object with property getters for `program`, `module`, `comments`, and `errors`, * and `dispose` and `visit` methods */ -function construct(buffer, sourceText, sourceByteLen) { +function construct(buffer, sourceText, sourceByteLen, _options) { // Create AST object const sourceIsAscii = sourceText.length === sourceByteLen; const ast = { buffer, sourceText, sourceByteLen, sourceIsAscii, nodes: new Map(), token: TOKEN }; diff --git a/napi/parser/test/parse-raw-common.js b/napi/parser/test/parse-raw-common.js index 1e7938f598833..8551f1cd57e36 100644 --- a/napi/parser/test/parse-raw-common.js +++ b/napi/parser/test/parse-raw-common.js @@ -9,8 +9,9 @@ export const TEST_TYPE_FIXTURE = 3; export const TEST_TYPE_INLINE_FIXTURE = 4; export const TEST_TYPE_MAIN_MASK = 7; -export const TEST_TYPE_LAZY = 8; -export const TEST_TYPE_PRETTY = 16; +export const TEST_TYPE_RANGE_PARENT = 8; +export const TEST_TYPE_LAZY = 16; +export const TEST_TYPE_PRETTY = 32; export const ROOT_DIR_PATH = pathJoin(import.meta.dirname, '../../..'); export const TARGET_DIR_PATH = pathJoin(ROOT_DIR_PATH, 'target'); diff --git a/napi/parser/test/parse-raw-worker.js b/napi/parser/test/parse-raw-worker.js index 93f505c7ff5d2..e07c2cb8f8d41 100644 --- a/napi/parser/test/parse-raw-worker.js +++ b/napi/parser/test/parse-raw-worker.js @@ -15,6 +15,7 @@ import { TEST_TYPE_LAZY, TEST_TYPE_MAIN_MASK, TEST_TYPE_PRETTY, + TEST_TYPE_RANGE_PARENT, TEST_TYPE_TEST262, TEST_TYPE_TS, TS_DIR_PATH, @@ -22,6 +23,9 @@ import { } from './parse-raw-common.js'; import { makeUnitsFromTest } from './typescript-make-units-from-test.js'; +const { hasOwn } = Object, + { isArray } = Array; + // Run test case and return whether it passes. // This is the entry point when run as a worker. export default async function(data) { @@ -37,25 +41,26 @@ export default async function(data) { // If test fails, will throw an error. // Can be called from main thread. export async function runCase({ type, props }, expect) { - const lazy = (type & TEST_TYPE_LAZY) !== 0, + const rangeParent = (type & TEST_TYPE_RANGE_PARENT) !== 0, + lazy = (type & TEST_TYPE_LAZY) !== 0, pretty = (type & TEST_TYPE_PRETTY) !== 0; type &= TEST_TYPE_MAIN_MASK; switch (type) { case TEST_TYPE_TEST262: - await runTest262Case(props, lazy, expect); + await runTest262Case(props, rangeParent, lazy, expect); break; case TEST_TYPE_JSX: - await runJsxCase(props, lazy, expect); + await runJsxCase(props, rangeParent, lazy, expect); break; case TEST_TYPE_TS: - await runTsCase(props, lazy, expect); + await runTsCase(props, rangeParent, lazy, expect); break; case TEST_TYPE_FIXTURE: - await runFixture(props, lazy, pretty, expect); + await runFixture(props, rangeParent, lazy, pretty, expect); break; case TEST_TYPE_INLINE_FIXTURE: - await runInlineFixture(props, lazy, pretty, expect); + await runInlineFixture(props, rangeParent, lazy, pretty, expect); break; default: throw new Error('Unexpected test type'); @@ -63,7 +68,7 @@ export async function runCase({ type, props }, expect) { } // Run Test262 test case -async function runTest262Case(path, lazy, expect) { +async function runTest262Case(path, rangeParent, lazy, expect) { const filename = basename(path); const [sourceText, acornJson] = await Promise.all([ readFile(pathJoin(TEST262_DIR_PATH, path), 'utf8'), @@ -72,6 +77,10 @@ async function runTest262Case(path, lazy, expect) { const sourceType = getSourceTypeFromJSON(acornJson); + if (rangeParent) { + testRangeParent(filename, sourceText, { sourceType }, expect); + return; + } if (lazy) { testLazy(filename, sourceText, { sourceType }); return; @@ -84,7 +93,7 @@ async function runTest262Case(path, lazy, expect) { } // Run JSX test case -async function runJsxCase(filename, lazy, expect) { +async function runJsxCase(filename, rangeParent, lazy, expect) { const sourcePath = pathJoin(JSX_DIR_PATH, filename), jsonPath = sourcePath.slice(0, -1) + 'on'; // `.jsx` -> `.json` const [sourceText, acornJson] = await Promise.all([ @@ -94,6 +103,10 @@ async function runJsxCase(filename, lazy, expect) { const sourceType = getSourceTypeFromJSON(acornJson); + if (rangeParent) { + testRangeParent(filename, sourceText, { sourceType }, expect); + return; + } if (lazy) { testLazy(filename, sourceText, { sourceType }); return; @@ -110,7 +123,7 @@ const TS_CASE_HEADER = '__ESTREE_TEST__:PASS:\n```json\n'; const TS_CASE_FOOTER = '\n```\n'; const TS_CASE_FOOTER_LEN = TS_CASE_FOOTER.length; -async function runTsCase(path, lazy, expect) { +async function runTsCase(path, rangeParent, lazy, expect) { const tsPath = path.slice(0, -3); // Trim off `.md` let [sourceText, casesJson] = await Promise.all([ readFile(pathJoin(TS_DIR_PATH, tsPath), 'utf8'), @@ -136,6 +149,10 @@ async function runTsCase(path, lazy, expect) { experimentalRawTransfer: true, }; + if (rangeParent) { + testRangeParent(filename, sourceText, options, expect); + continue; + } if (lazy) { testLazy(filename, sourceText, options); continue; @@ -168,26 +185,81 @@ async function runTsCase(path, lazy, expect) { } // Test raw transfer output matches standard (via JSON) output for a fixture file -async function runFixture(path, lazy, pretty, expect) { +async function runFixture(path, rangeParent, lazy, pretty, expect) { const filename = basename(path); const sourceText = await readFile(pathJoin(ROOT_DIR_PATH, path), 'utf8'); - if (lazy) { - testLazy(filename, sourceText); + if (rangeParent) { + testRangeParent(filename, sourceText, null, expect); + } else if (lazy) { + testLazy(filename, sourceText, null); } else { assertRawAndStandardMatch(filename, sourceText, pretty, expect); } } // Test raw transfer output matches standard (via JSON) output for a fixture, with provided source text -async function runInlineFixture({ filename, sourceText }, lazy, pretty, expect) { - if (lazy) { - testLazy(filename, sourceText); +async function runInlineFixture({ filename, sourceText }, rangeParent, lazy, pretty, expect) { + if (rangeParent) { + testRangeParent(filename, sourceText, null, expect); + } else if (lazy) { + testLazy(filename, sourceText, null); } else { assertRawAndStandardMatch(filename, sourceText, pretty, expect); } } +// Test `range` and `parent` fields are correct on all AST nodes. +function testRangeParent(filename, sourceText, options, expect) { + // @ts-ignore + const ret = parseSync(filename, sourceText, { + ...options, + range: true, + experimentalRawTransfer: true, + experimentalParent: true, + }); + + let parent = null; + function walk(node) { + if (node === null || typeof node !== 'object') return; + + if (isArray(node)) { + for (const child of node) { + walk(child); + } + return; + } + + // Check `range` + if (hasOwn(node, 'start')) { + const { range } = node; + expect(isArray(range)).toBe(true); + expect(range.length).toBe(2); + expect(range[0]).toBe(node.start); + expect(range[1]).toBe(node.end); + } + + // Check `parent` + let previousParent = parent; + const isNode = hasOwn(node, 'type'); + if (isNode) { + expect(node.parent).toBe(parent); + parent = node; + } + + // Walk children + for (const key in node) { + if (!hasOwn(node, key)) continue; + if (key === 'type' || key === 'start' || key === 'end' || key === 'range' || key === 'parent') continue; + walk(node[key]); + } + + if (isNode) parent = previousParent; + } + + walk(ret.program); +} + // Test lazy deserialization does not throw an error. // We don't test the correctness of the output. function testLazy(filename, sourceText, options) { @@ -296,12 +368,11 @@ function removeNullProperties(obj) { } // Very simple `expect` implementation. -// Only supports `expect(x).toEqual(y)`, and uses only a simple `===` comparison. +// Only supports `expect(x).toEqual(y)` and `expect(x).toBe(y)`, and both use only a simple `===` comparison. // Therefore, only works for primitive values e.g. strings. function simpleExpect(value) { - return { - toEqual(expected) { - if (value !== expected) throw new Error('Mismatch'); - }, + const toBe = (expected) => { + if (value !== expected) throw new Error('Mismatch'); }; + return { toEqual: toBe, toBe }; } diff --git a/napi/parser/test/parse-raw.test.ts b/napi/parser/test/parse-raw.test.ts index a667b47956dc6..4d1ccd24ea240 100644 --- a/napi/parser/test/parse-raw.test.ts +++ b/napi/parser/test/parse-raw.test.ts @@ -21,6 +21,7 @@ import { TEST_TYPE_JSX, TEST_TYPE_LAZY, TEST_TYPE_PRETTY, + TEST_TYPE_RANGE_PARENT, TEST_TYPE_TEST262, TEST_TYPE_TS, TS_ESTREE_DIR_PATH, @@ -28,7 +29,14 @@ import { TS_SNAPSHOT_PATH, } from './parse-raw-common.js'; -const [describeLazy, itLazy] = process.env.RUN_LAZY_TESTS === 'true' +const { env } = process; +const isEnabled = envValue => envValue === 'true' || envValue === '1'; + +const [describeRangeParent, itRangeParent] = isEnabled(env.RUN_RAW_RANGE_TESTS) + ? [describe, it] + : (noop => [noop, noop])(Object.assign(() => {}, { concurrent() {} })); + +const [describeLazy, itLazy] = isEnabled(env.RUN_LAZY_TESTS) ? [describe, it] : (noop => [noop, noop])(Object.assign(() => {}, { concurrent() {} })); @@ -103,6 +111,11 @@ describe.concurrent('test262', () => { it.each(test262FixturePaths)('%s', path => runCaseInWorker(TEST_TYPE_TEST262, path)); }); +describeRangeParent.concurrent('range & parent test262', () => { + // oxlint-disable-next-line jest/expect-expect + it.each(test262FixturePaths)('%s', path => runCaseInWorker(TEST_TYPE_TEST262 | TEST_TYPE_RANGE_PARENT, path)); +}); + // Check lazy deserialization doesn't throw describeLazy.concurrent('lazy test262', () => { // oxlint-disable-next-line jest/expect-expect @@ -122,6 +135,11 @@ describe.concurrent('JSX', () => { it.each(jsxFixturePaths)('%s', filename => runCaseInWorker(TEST_TYPE_JSX, filename)); }); +describeRangeParent.concurrent('range & parent JSX', () => { + // oxlint-disable-next-line jest/expect-expect + it.each(jsxFixturePaths)('%s', filename => runCaseInWorker(TEST_TYPE_JSX | TEST_TYPE_RANGE_PARENT, filename)); +}); + // Check lazy deserialization doesn't throw describeLazy.concurrent('lazy JSX', () => { // oxlint-disable-next-line jest/expect-expect @@ -145,6 +163,11 @@ describe.concurrent('TypeScript', () => { it.each(tsFixturePaths)('%s', path => runCaseInWorker(TEST_TYPE_TS, path)); }); +describeRangeParent.concurrent('range & parent TypeScript', () => { + // oxlint-disable-next-line jest/expect-expect + it.each(tsFixturePaths)('%s', path => runCaseInWorker(TEST_TYPE_TS | TEST_TYPE_RANGE_PARENT, path)); +}); + // Check lazy deserialization doesn't throw describeLazy.concurrent('lazy TypeScript', () => { // oxlint-disable-next-line jest/expect-expect @@ -176,12 +199,21 @@ describe.concurrent('edge cases', () => { // oxlint-disable-next-line jest/expect-expect it('TS', () => runCaseInWorker(TEST_TYPE_INLINE_FIXTURE, { filename: 'dummy.ts', sourceText })); + itRangeParent( + 'JS range & parent', + () => runCaseInWorker(TEST_TYPE_INLINE_FIXTURE | TEST_TYPE_RANGE_PARENT, { filename: 'dummy.js', sourceText }), + ); + itRangeParent( + 'TS range & parent', + () => runCaseInWorker(TEST_TYPE_INLINE_FIXTURE | TEST_TYPE_RANGE_PARENT, { filename: 'dummy.ts', sourceText }), + ); + itLazy( - 'JS', + 'JS lazy', () => runCaseInWorker(TEST_TYPE_INLINE_FIXTURE | TEST_TYPE_LAZY, { filename: 'dummy.js', sourceText }), ); itLazy( - 'TS', + 'TS lazy', () => runCaseInWorker(TEST_TYPE_INLINE_FIXTURE | TEST_TYPE_LAZY, { filename: 'dummy.ts', sourceText }), ); }); @@ -193,6 +225,11 @@ describe.concurrent('fixtures', () => { it.each(benchFixturePaths)('%s', path => runCaseInWorker(TEST_TYPE_FIXTURE, path)); }); +describeRangeParent.concurrent('range & parent fixtures', () => { + // oxlint-disable-next-line jest/expect-expect + it.each(benchFixturePaths)('%s', path => runCaseInWorker(TEST_TYPE_FIXTURE | TEST_TYPE_RANGE_PARENT, path)); +}); + // Check lazy deserialization doesn't throw describeLazy.concurrent('lazy fixtures', () => { // oxlint-disable-next-line jest/expect-expect @@ -384,3 +421,73 @@ describe.concurrent('`range` option', () => { }); }); }); + +describe.concurrent('`experimentalParent` option', () => { + describe.concurrent('should not include `parent` fields when false', () => { + it.concurrent('JS', async () => { + const code = 'let x = 1;'; + + // @ts-ignore + let ret = parseSync('test.js', code, { experimentalRawTransfer: true, experimentalParent: false }); + expect(ret.errors.length).toBe(0); + const { program } = ret; + expect(program).not.toHaveProperty('parent'); + const stmt = ret.program.body[0] as VariableDeclaration; + expect(stmt).not.toHaveProperty('parent'); + const declaration = stmt.declarations[0]; + expect(declaration).not.toHaveProperty('parent'); + expect(declaration.id).not.toHaveProperty('parent'); + expect(declaration.init).not.toHaveProperty('parent'); + }); + + it.concurrent('TS', async () => { + const code = 'let x = 1;'; + + // @ts-ignore + let ret = parseSync('test.ts', code, { experimentalRawTransfer: true, experimentalParent: false }); + expect(ret.errors.length).toBe(0); + const { program } = ret; + expect(program).not.toHaveProperty('parent'); + const stmt = ret.program.body[0] as VariableDeclaration; + expect(stmt).not.toHaveProperty('parent'); + const declaration = stmt.declarations[0]; + expect(declaration).not.toHaveProperty('parent'); + expect(declaration.id).not.toHaveProperty('parent'); + expect(declaration.init).not.toHaveProperty('parent'); + }); + }); + + describe.concurrent('should include `parent` fields when true', () => { + it.concurrent('JS', async () => { + const code = 'let x = 1;'; + + // @ts-ignore + let ret = parseSync('test.js', code, { experimentalRawTransfer: true, experimentalParent: true }); + expect(ret.errors.length).toBe(0); + const { program } = ret; + expect(program.parent).toBe(null); + const stmt = ret.program.body[0] as VariableDeclaration; + expect(stmt.parent).toBe(program); + const declaration = stmt.declarations[0]; + expect(declaration.parent).toBe(stmt); + expect(declaration.id.parent).toBe(declaration); + expect(declaration.init.parent).toBe(declaration); + }); + + it.concurrent('TS', async () => { + const code = 'let x = 1;'; + + // @ts-ignore + let ret = parseSync('test.ts', code, { experimentalRawTransfer: true, experimentalParent: true }); + expect(ret.errors.length).toBe(0); + const { program } = ret; + expect(program.parent).toBe(null); + const stmt = ret.program.body[0] as VariableDeclaration; + expect(stmt.parent).toBe(program); + const declaration = stmt.declarations[0]; + expect(declaration.parent).toBe(stmt); + expect(declaration.id.parent).toBe(declaration); + expect(declaration.init.parent).toBe(declaration); + }); + }); +}); diff --git a/napi/parser/vitest.config.ts b/napi/parser/vitest.config.ts index a4d79ecda6b3f..e211976510ba1 100644 --- a/napi/parser/vitest.config.ts +++ b/napi/parser/vitest.config.ts @@ -1,10 +1,11 @@ import { defineConfig } from 'vitest/config'; const { env } = process; +const isEnabled = envValue => envValue === 'true' || envValue === '1'; let exclude; -if (env.RUN_LAZY_TESTS !== 'true') { +if (!isEnabled(env.RUN_LAZY_TESTS)) { exclude = ['lazy-deserialization.test.ts']; - if (env.RUN_RAW_TESTS !== 'true') exclude.push('parse-raw.test.ts'); + if (!isEnabled(env.RUN_RAW_TESTS) && !isEnabled(env.RUN_RAW_RANGE_TESTS)) exclude.push('parse-raw.test.ts'); } export default defineConfig({ diff --git a/npm/oxc-types/types.d.ts b/npm/oxc-types/types.d.ts index 93dc12b7bfe25..3b61e71c909f4 100644 --- a/npm/oxc-types/types.d.ts +++ b/npm/oxc-types/types.d.ts @@ -6,6 +6,7 @@ export interface Program extends Span { body: Array; sourceType: ModuleKind; hashbang: Hashbang | null; + parent?: null; } export type Expression = @@ -57,6 +58,7 @@ export interface IdentifierName extends Span { name: string; optional?: false; typeAnnotation?: null; + parent?: Node; } export interface IdentifierReference extends Span { @@ -65,6 +67,7 @@ export interface IdentifierReference extends Span { name: string; optional?: false; typeAnnotation?: null; + parent?: Node; } export interface BindingIdentifier extends Span { @@ -73,6 +76,7 @@ export interface BindingIdentifier extends Span { name: string; optional?: false; typeAnnotation?: null; + parent?: Node; } export interface LabelIdentifier extends Span { @@ -81,15 +85,18 @@ export interface LabelIdentifier extends Span { name: string; optional?: false; typeAnnotation?: null; + parent?: Node; } export interface ThisExpression extends Span { type: 'ThisExpression'; + parent?: Node; } export interface ArrayExpression extends Span { type: 'ArrayExpression'; elements: Array; + parent?: Node; } export type ArrayExpressionElement = SpreadElement | null | Expression; @@ -97,6 +104,7 @@ export type ArrayExpressionElement = SpreadElement | null | Expression; export interface ObjectExpression extends Span { type: 'ObjectExpression'; properties: Array; + parent?: Node; } export type ObjectPropertyKind = ObjectProperty | SpreadElement; @@ -110,6 +118,7 @@ export interface ObjectProperty extends Span { shorthand: boolean; computed: boolean; optional?: false; + parent?: Node; } export type PropertyKey = IdentifierName | PrivateIdentifier | Expression; @@ -120,6 +129,7 @@ export interface TemplateLiteral extends Span { type: 'TemplateLiteral'; quasis: Array; expressions: Array; + parent?: Node; } export interface TaggedTemplateExpression extends Span { @@ -127,12 +137,14 @@ export interface TaggedTemplateExpression extends Span { tag: Expression; typeArguments?: TSTypeParameterInstantiation | null; quasi: TemplateLiteral; + parent?: Node; } export interface TemplateElement extends Span { type: 'TemplateElement'; value: TemplateElementValue; tail: boolean; + parent?: Node; } export interface TemplateElementValue { @@ -148,6 +160,7 @@ export interface ComputedMemberExpression extends Span { property: Expression; optional: boolean; computed: true; + parent?: Node; } export interface StaticMemberExpression extends Span { @@ -156,6 +169,7 @@ export interface StaticMemberExpression extends Span { property: IdentifierName; optional: boolean; computed: false; + parent?: Node; } export interface PrivateFieldExpression extends Span { @@ -164,6 +178,7 @@ export interface PrivateFieldExpression extends Span { property: PrivateIdentifier; optional: boolean; computed: false; + parent?: Node; } export interface CallExpression extends Span { @@ -172,6 +187,7 @@ export interface CallExpression extends Span { typeArguments?: TSTypeParameterInstantiation | null; arguments: Array; optional: boolean; + parent?: Node; } export interface NewExpression extends Span { @@ -179,17 +195,20 @@ export interface NewExpression extends Span { callee: Expression; typeArguments?: TSTypeParameterInstantiation | null; arguments: Array; + parent?: Node; } export interface MetaProperty extends Span { type: 'MetaProperty'; meta: IdentifierName; property: IdentifierName; + parent?: Node; } export interface SpreadElement extends Span { type: 'SpreadElement'; argument: Expression; + parent?: Node; } export type Argument = SpreadElement | Expression; @@ -199,6 +218,7 @@ export interface UpdateExpression extends Span { operator: UpdateOperator; prefix: boolean; argument: SimpleAssignmentTarget; + parent?: Node; } export interface UnaryExpression extends Span { @@ -206,6 +226,7 @@ export interface UnaryExpression extends Span { operator: UnaryOperator; argument: Expression; prefix: true; + parent?: Node; } export interface BinaryExpression extends Span { @@ -213,6 +234,7 @@ export interface BinaryExpression extends Span { left: Expression; operator: BinaryOperator; right: Expression; + parent?: Node; } export interface PrivateInExpression extends Span { @@ -220,6 +242,7 @@ export interface PrivateInExpression extends Span { left: PrivateIdentifier; operator: 'in'; right: Expression; + parent?: Node; } export interface LogicalExpression extends Span { @@ -227,6 +250,7 @@ export interface LogicalExpression extends Span { left: Expression; operator: LogicalOperator; right: Expression; + parent?: Node; } export interface ConditionalExpression extends Span { @@ -234,6 +258,7 @@ export interface ConditionalExpression extends Span { test: Expression; consequent: Expression; alternate: Expression; + parent?: Node; } export interface AssignmentExpression extends Span { @@ -241,6 +266,7 @@ export interface AssignmentExpression extends Span { operator: AssignmentOperator; left: AssignmentTarget; right: Expression; + parent?: Node; } export type AssignmentTarget = SimpleAssignmentTarget | AssignmentTargetPattern; @@ -261,6 +287,7 @@ export interface ArrayAssignmentTarget extends Span { elements: Array; optional?: false; typeAnnotation?: null; + parent?: Node; } export interface ObjectAssignmentTarget extends Span { @@ -269,6 +296,7 @@ export interface ObjectAssignmentTarget extends Span { properties: Array; optional?: false; typeAnnotation?: null; + parent?: Node; } export interface AssignmentTargetRest extends Span { @@ -278,6 +306,7 @@ export interface AssignmentTargetRest extends Span { optional?: false; typeAnnotation?: null; value?: null; + parent?: Node; } export type AssignmentTargetMaybeDefault = AssignmentTargetWithDefault | AssignmentTarget; @@ -289,6 +318,7 @@ export interface AssignmentTargetWithDefault extends Span { right: Expression; optional?: false; typeAnnotation?: null; + parent?: Node; } export type AssignmentTargetProperty = AssignmentTargetPropertyIdentifier | AssignmentTargetPropertyProperty; @@ -302,6 +332,7 @@ export interface AssignmentTargetPropertyIdentifier extends Span { shorthand: true; computed: false; optional?: false; + parent?: Node; } export interface AssignmentTargetPropertyProperty extends Span { @@ -313,25 +344,30 @@ export interface AssignmentTargetPropertyProperty extends Span { shorthand: false; computed: boolean; optional?: false; + parent?: Node; } export interface SequenceExpression extends Span { type: 'SequenceExpression'; expressions: Array; + parent?: Node; } export interface Super extends Span { type: 'Super'; + parent?: Node; } export interface AwaitExpression extends Span { type: 'AwaitExpression'; argument: Expression; + parent?: Node; } export interface ChainExpression extends Span { type: 'ChainExpression'; expression: ChainElement; + parent?: Node; } export type ChainElement = CallExpression | TSNonNullExpression | MemberExpression; @@ -339,6 +375,7 @@ export type ChainElement = CallExpression | TSNonNullExpression | MemberExpressi export interface ParenthesizedExpression extends Span { type: 'ParenthesizedExpression'; expression: Expression; + parent?: Node; } export type Statement = @@ -367,16 +404,19 @@ export interface Directive extends Span { type: 'ExpressionStatement'; expression: StringLiteral; directive: string; + parent?: Node; } export interface Hashbang extends Span { type: 'Hashbang'; value: string; + parent?: Node; } export interface BlockStatement extends Span { type: 'BlockStatement'; body: Array; + parent?: Node; } export type Declaration = @@ -394,6 +434,7 @@ export interface VariableDeclaration extends Span { kind: VariableDeclarationKind; declarations: Array; declare?: boolean; + parent?: Node; } export type VariableDeclarationKind = 'var' | 'let' | 'const' | 'using' | 'await using'; @@ -403,16 +444,19 @@ export interface VariableDeclarator extends Span { id: BindingPattern; init: Expression | null; definite?: boolean; + parent?: Node; } export interface EmptyStatement extends Span { type: 'EmptyStatement'; + parent?: Node; } export interface ExpressionStatement extends Span { type: 'ExpressionStatement'; expression: Expression; directive?: string | null; + parent?: Node; } export interface IfStatement extends Span { @@ -420,18 +464,21 @@ export interface IfStatement extends Span { test: Expression; consequent: Statement; alternate: Statement | null; + parent?: Node; } export interface DoWhileStatement extends Span { type: 'DoWhileStatement'; body: Statement; test: Expression; + parent?: Node; } export interface WhileStatement extends Span { type: 'WhileStatement'; test: Expression; body: Statement; + parent?: Node; } export interface ForStatement extends Span { @@ -440,6 +487,7 @@ export interface ForStatement extends Span { test: Expression | null; update: Expression | null; body: Statement; + parent?: Node; } export type ForStatementInit = VariableDeclaration | Expression; @@ -449,6 +497,7 @@ export interface ForInStatement extends Span { left: ForStatementLeft; right: Expression; body: Statement; + parent?: Node; } export type ForStatementLeft = VariableDeclaration | AssignmentTarget; @@ -459,50 +508,59 @@ export interface ForOfStatement extends Span { left: ForStatementLeft; right: Expression; body: Statement; + parent?: Node; } export interface ContinueStatement extends Span { type: 'ContinueStatement'; label: LabelIdentifier | null; + parent?: Node; } export interface BreakStatement extends Span { type: 'BreakStatement'; label: LabelIdentifier | null; + parent?: Node; } export interface ReturnStatement extends Span { type: 'ReturnStatement'; argument: Expression | null; + parent?: Node; } export interface WithStatement extends Span { type: 'WithStatement'; object: Expression; body: Statement; + parent?: Node; } export interface SwitchStatement extends Span { type: 'SwitchStatement'; discriminant: Expression; cases: Array; + parent?: Node; } export interface SwitchCase extends Span { type: 'SwitchCase'; test: Expression | null; consequent: Array; + parent?: Node; } export interface LabeledStatement extends Span { type: 'LabeledStatement'; label: LabelIdentifier; body: Statement; + parent?: Node; } export interface ThrowStatement extends Span { type: 'ThrowStatement'; argument: Expression; + parent?: Node; } export interface TryStatement extends Span { @@ -510,16 +568,19 @@ export interface TryStatement extends Span { block: BlockStatement; handler: CatchClause | null; finalizer: BlockStatement | null; + parent?: Node; } export interface CatchClause extends Span { type: 'CatchClause'; param: BindingPattern | null; body: BlockStatement; + parent?: Node; } export interface DebuggerStatement extends Span { type: 'DebuggerStatement'; + parent?: Node; } export type BindingPattern = @@ -538,6 +599,7 @@ export interface AssignmentPattern extends Span { right: Expression; optional?: false; typeAnnotation?: null; + parent?: Node; } export interface ObjectPattern extends Span { @@ -546,6 +608,7 @@ export interface ObjectPattern extends Span { properties: Array; optional?: false; typeAnnotation?: null; + parent?: Node; } export interface BindingProperty extends Span { @@ -557,6 +620,7 @@ export interface BindingProperty extends Span { shorthand: boolean; computed: boolean; optional?: false; + parent?: Node; } export interface ArrayPattern extends Span { @@ -565,6 +629,7 @@ export interface ArrayPattern extends Span { elements: Array; optional?: false; typeAnnotation?: null; + parent?: Node; } export interface BindingRestElement extends Span { @@ -574,6 +639,7 @@ export interface BindingRestElement extends Span { optional?: false; typeAnnotation?: null; value?: null; + parent?: Node; } export interface Function extends Span { @@ -587,6 +653,7 @@ export interface Function extends Span { returnType?: TSTypeAnnotation | null; body: FunctionBody | null; expression: false; + parent?: Node; } export type ParamPattern = FormalParameter | TSParameterProperty | FormalParameterRest; @@ -625,6 +692,7 @@ export interface TSParameterProperty extends Span { export interface FunctionBody extends Span { type: 'BlockStatement'; body: Array; + parent?: Node; } export interface ArrowFunctionExpression extends Span { @@ -637,12 +705,14 @@ export interface ArrowFunctionExpression extends Span { body: FunctionBody | Expression; id: null; generator: false; + parent?: Node; } export interface YieldExpression extends Span { type: 'YieldExpression'; delegate: boolean; argument: Expression | null; + parent?: Node; } export interface Class extends Span { @@ -656,6 +726,7 @@ export interface Class extends Span { body: ClassBody; abstract?: boolean; declare?: boolean; + parent?: Node; } export type ClassType = 'ClassDeclaration' | 'ClassExpression'; @@ -663,6 +734,7 @@ export type ClassType = 'ClassDeclaration' | 'ClassExpression'; export interface ClassBody extends Span { type: 'ClassBody'; body: Array; + parent?: Node; } export type ClassElement = StaticBlock | MethodDefinition | PropertyDefinition | AccessorProperty | TSIndexSignature; @@ -678,6 +750,7 @@ export interface MethodDefinition extends Span { override?: boolean; optional?: boolean; accessibility?: TSAccessibility | null; + parent?: Node; } export type MethodDefinitionType = 'MethodDefinition' | 'TSAbstractMethodDefinition'; @@ -696,6 +769,7 @@ export interface PropertyDefinition extends Span { definite?: boolean; readonly?: boolean; accessibility?: TSAccessibility | null; + parent?: Node; } export type PropertyDefinitionType = 'PropertyDefinition' | 'TSAbstractPropertyDefinition'; @@ -705,11 +779,13 @@ export type MethodDefinitionKind = 'constructor' | 'method' | 'get' | 'set'; export interface PrivateIdentifier extends Span { type: 'PrivateIdentifier'; name: string; + parent?: Node; } export interface StaticBlock extends Span { type: 'StaticBlock'; body: Array; + parent?: Node; } export type ModuleDeclaration = @@ -736,6 +812,7 @@ export interface AccessorProperty extends Span { declare?: false; optional?: false; readonly?: false; + parent?: Node; } export interface ImportExpression extends Span { @@ -743,6 +820,7 @@ export interface ImportExpression extends Span { source: Expression; options: Expression | null; phase: ImportPhase | null; + parent?: Node; } export interface ImportDeclaration extends Span { @@ -752,6 +830,7 @@ export interface ImportDeclaration extends Span { phase: ImportPhase | null; attributes: Array; importKind?: ImportOrExportKind; + parent?: Node; } export type ImportPhase = 'source' | 'defer'; @@ -763,22 +842,26 @@ export interface ImportSpecifier extends Span { imported: ModuleExportName; local: BindingIdentifier; importKind?: ImportOrExportKind; + parent?: Node; } export interface ImportDefaultSpecifier extends Span { type: 'ImportDefaultSpecifier'; local: BindingIdentifier; + parent?: Node; } export interface ImportNamespaceSpecifier extends Span { type: 'ImportNamespaceSpecifier'; local: BindingIdentifier; + parent?: Node; } export interface ImportAttribute extends Span { type: 'ImportAttribute'; key: ImportAttributeKey; value: StringLiteral; + parent?: Node; } export type ImportAttributeKey = IdentifierName | StringLiteral; @@ -790,12 +873,14 @@ export interface ExportNamedDeclaration extends Span { source: StringLiteral | null; exportKind?: ImportOrExportKind; attributes: Array; + parent?: Node; } export interface ExportDefaultDeclaration extends Span { type: 'ExportDefaultDeclaration'; declaration: ExportDefaultDeclarationKind; exportKind?: 'value'; + parent?: Node; } export interface ExportAllDeclaration extends Span { @@ -804,6 +889,7 @@ export interface ExportAllDeclaration extends Span { source: StringLiteral; attributes: Array; exportKind?: ImportOrExportKind; + parent?: Node; } export interface ExportSpecifier extends Span { @@ -811,6 +897,7 @@ export interface ExportSpecifier extends Span { local: ModuleExportName; exported: ModuleExportName; exportKind?: ImportOrExportKind; + parent?: Node; } export type ExportDefaultDeclarationKind = Function | Class | TSInterfaceDeclaration | Expression; @@ -821,30 +908,35 @@ export interface V8IntrinsicExpression extends Span { type: 'V8IntrinsicExpression'; name: IdentifierName; arguments: Array; + parent?: Node; } export interface BooleanLiteral extends Span { type: 'Literal'; value: boolean; raw: string | null; + parent?: Node; } export interface NullLiteral extends Span { type: 'Literal'; value: null; raw: 'null' | null; + parent?: Node; } export interface NumericLiteral extends Span { type: 'Literal'; value: number; raw: string | null; + parent?: Node; } export interface StringLiteral extends Span { type: 'Literal'; value: string; raw: string | null; + parent?: Node; } export interface BigIntLiteral extends Span { @@ -852,6 +944,7 @@ export interface BigIntLiteral extends Span { value: bigint; raw: string | null; bigint: string; + parent?: Node; } export interface RegExpLiteral extends Span { @@ -859,6 +952,7 @@ export interface RegExpLiteral extends Span { value: RegExp | null; raw: string | null; regex: { pattern: string; flags: string }; + parent?: Node; } export interface JSXElement extends Span { @@ -866,6 +960,7 @@ export interface JSXElement extends Span { openingElement: JSXOpeningElement; children: Array; closingElement: JSXClosingElement | null; + parent?: Node; } export interface JSXOpeningElement extends Span { @@ -874,11 +969,13 @@ export interface JSXOpeningElement extends Span { typeArguments?: TSTypeParameterInstantiation | null; attributes: Array; selfClosing: boolean; + parent?: Node; } export interface JSXClosingElement extends Span { type: 'JSXClosingElement'; name: JSXElementName; + parent?: Node; } export interface JSXFragment extends Span { @@ -886,16 +983,19 @@ export interface JSXFragment extends Span { openingFragment: JSXOpeningFragment; children: Array; closingFragment: JSXClosingFragment; + parent?: Node; } export interface JSXOpeningFragment extends Span { type: 'JSXOpeningFragment'; attributes?: []; selfClosing?: false; + parent?: Node; } export interface JSXClosingFragment extends Span { type: 'JSXClosingFragment'; + parent?: Node; } export type JSXElementName = JSXIdentifier | JSXNamespacedName | JSXMemberExpression; @@ -904,12 +1004,14 @@ export interface JSXNamespacedName extends Span { type: 'JSXNamespacedName'; namespace: JSXIdentifier; name: JSXIdentifier; + parent?: Node; } export interface JSXMemberExpression extends Span { type: 'JSXMemberExpression'; object: JSXMemberExpressionObject; property: JSXIdentifier; + parent?: Node; } export type JSXMemberExpressionObject = JSXIdentifier | JSXMemberExpression; @@ -917,12 +1019,14 @@ export type JSXMemberExpressionObject = JSXIdentifier | JSXMemberExpression; export interface JSXExpressionContainer extends Span { type: 'JSXExpressionContainer'; expression: JSXExpression; + parent?: Node; } export type JSXExpression = JSXEmptyExpression | Expression; export interface JSXEmptyExpression extends Span { type: 'JSXEmptyExpression'; + parent?: Node; } export type JSXAttributeItem = JSXAttribute | JSXSpreadAttribute; @@ -931,11 +1035,13 @@ export interface JSXAttribute extends Span { type: 'JSXAttribute'; name: JSXAttributeName; value: JSXAttributeValue | null; + parent?: Node; } export interface JSXSpreadAttribute extends Span { type: 'JSXSpreadAttribute'; argument: Expression; + parent?: Node; } export type JSXAttributeName = JSXIdentifier | JSXNamespacedName; @@ -945,6 +1051,7 @@ export type JSXAttributeValue = StringLiteral | JSXExpressionContainer | JSXElem export interface JSXIdentifier extends Span { type: 'JSXIdentifier'; name: string; + parent?: Node; } export type JSXChild = JSXText | JSXElement | JSXFragment | JSXExpressionContainer | JSXSpreadChild; @@ -952,12 +1059,14 @@ export type JSXChild = JSXText | JSXElement | JSXFragment | JSXExpressionContain export interface JSXSpreadChild extends Span { type: 'JSXSpreadChild'; expression: Expression; + parent?: Node; } export interface JSXText extends Span { type: 'JSXText'; value: string; raw: string | null; + parent?: Node; } export interface TSThisParameter extends Span { @@ -966,6 +1075,7 @@ export interface TSThisParameter extends Span { name: 'this'; optional: false; typeAnnotation: TSTypeAnnotation | null; + parent?: Node; } export interface TSEnumDeclaration extends Span { @@ -974,11 +1084,13 @@ export interface TSEnumDeclaration extends Span { body: TSEnumBody; const: boolean; declare: boolean; + parent?: Node; } export interface TSEnumBody extends Span { type: 'TSEnumBody'; members: Array; + parent?: Node; } export interface TSEnumMember extends Span { @@ -986,6 +1098,7 @@ export interface TSEnumMember extends Span { id: TSEnumMemberName; initializer: Expression | null; computed: boolean; + parent?: Node; } export type TSEnumMemberName = IdentifierName | StringLiteral | TemplateLiteral; @@ -993,11 +1106,13 @@ export type TSEnumMemberName = IdentifierName | StringLiteral | TemplateLiteral; export interface TSTypeAnnotation extends Span { type: 'TSTypeAnnotation'; typeAnnotation: TSType; + parent?: Node; } export interface TSLiteralType extends Span { type: 'TSLiteralType'; literal: TSLiteral; + parent?: Node; } export type TSLiteral = @@ -1053,27 +1168,32 @@ export interface TSConditionalType extends Span { extendsType: TSType; trueType: TSType; falseType: TSType; + parent?: Node; } export interface TSUnionType extends Span { type: 'TSUnionType'; types: Array; + parent?: Node; } export interface TSIntersectionType extends Span { type: 'TSIntersectionType'; types: Array; + parent?: Node; } export interface TSParenthesizedType extends Span { type: 'TSParenthesizedType'; typeAnnotation: TSType; + parent?: Node; } export interface TSTypeOperator extends Span { type: 'TSTypeOperator'; operator: TSTypeOperatorOperator; typeAnnotation: TSType; + parent?: Node; } export type TSTypeOperatorOperator = 'keyof' | 'unique' | 'readonly'; @@ -1081,17 +1201,20 @@ export type TSTypeOperatorOperator = 'keyof' | 'unique' | 'readonly'; export interface TSArrayType extends Span { type: 'TSArrayType'; elementType: TSType; + parent?: Node; } export interface TSIndexedAccessType extends Span { type: 'TSIndexedAccessType'; objectType: TSType; indexType: TSType; + parent?: Node; } export interface TSTupleType extends Span { type: 'TSTupleType'; elementTypes: Array; + parent?: Node; } export interface TSNamedTupleMember extends Span { @@ -1099,80 +1222,98 @@ export interface TSNamedTupleMember extends Span { label: IdentifierName; elementType: TSTupleElement; optional: boolean; + parent?: Node; } export interface TSOptionalType extends Span { type: 'TSOptionalType'; typeAnnotation: TSType; + parent?: Node; } export interface TSRestType extends Span { type: 'TSRestType'; typeAnnotation: TSType; + parent?: Node; } export type TSTupleElement = TSOptionalType | TSRestType | TSType; export interface TSAnyKeyword extends Span { type: 'TSAnyKeyword'; + parent?: Node; } export interface TSStringKeyword extends Span { type: 'TSStringKeyword'; + parent?: Node; } export interface TSBooleanKeyword extends Span { type: 'TSBooleanKeyword'; + parent?: Node; } export interface TSNumberKeyword extends Span { type: 'TSNumberKeyword'; + parent?: Node; } export interface TSNeverKeyword extends Span { type: 'TSNeverKeyword'; + parent?: Node; } export interface TSIntrinsicKeyword extends Span { type: 'TSIntrinsicKeyword'; + parent?: Node; } export interface TSUnknownKeyword extends Span { type: 'TSUnknownKeyword'; + parent?: Node; } export interface TSNullKeyword extends Span { type: 'TSNullKeyword'; + parent?: Node; } export interface TSUndefinedKeyword extends Span { type: 'TSUndefinedKeyword'; + parent?: Node; } export interface TSVoidKeyword extends Span { type: 'TSVoidKeyword'; + parent?: Node; } export interface TSSymbolKeyword extends Span { type: 'TSSymbolKeyword'; + parent?: Node; } export interface TSThisType extends Span { type: 'TSThisType'; + parent?: Node; } export interface TSObjectKeyword extends Span { type: 'TSObjectKeyword'; + parent?: Node; } export interface TSBigIntKeyword extends Span { type: 'TSBigIntKeyword'; + parent?: Node; } export interface TSTypeReference extends Span { type: 'TSTypeReference'; typeName: TSTypeName; typeArguments: TSTypeParameterInstantiation | null; + parent?: Node; } export type TSTypeName = IdentifierReference | TSQualifiedName | ThisExpression; @@ -1181,11 +1322,13 @@ export interface TSQualifiedName extends Span { type: 'TSQualifiedName'; left: TSTypeName; right: IdentifierName; + parent?: Node; } export interface TSTypeParameterInstantiation extends Span { type: 'TSTypeParameterInstantiation'; params: Array; + parent?: Node; } export interface TSTypeParameter extends Span { @@ -1196,11 +1339,13 @@ export interface TSTypeParameter extends Span { in: boolean; out: boolean; const: boolean; + parent?: Node; } export interface TSTypeParameterDeclaration extends Span { type: 'TSTypeParameterDeclaration'; params: Array; + parent?: Node; } export interface TSTypeAliasDeclaration extends Span { @@ -1209,6 +1354,7 @@ export interface TSTypeAliasDeclaration extends Span { typeParameters: TSTypeParameterDeclaration | null; typeAnnotation: TSType; declare: boolean; + parent?: Node; } export type TSAccessibility = 'private' | 'protected' | 'public'; @@ -1217,6 +1363,7 @@ export interface TSClassImplements extends Span { type: 'TSClassImplements'; expression: IdentifierReference | ThisExpression | MemberExpression; typeArguments: TSTypeParameterInstantiation | null; + parent?: Node; } export interface TSInterfaceDeclaration extends Span { @@ -1226,11 +1373,13 @@ export interface TSInterfaceDeclaration extends Span { extends: Array; body: TSInterfaceBody; declare: boolean; + parent?: Node; } export interface TSInterfaceBody extends Span { type: 'TSInterfaceBody'; body: Array; + parent?: Node; } export interface TSPropertySignature extends Span { @@ -1242,6 +1391,7 @@ export interface TSPropertySignature extends Span { typeAnnotation: TSTypeAnnotation | null; accessibility: null; static: false; + parent?: Node; } export type TSSignature = @@ -1258,6 +1408,7 @@ export interface TSIndexSignature extends Span { readonly: boolean; static: boolean; accessibility: null; + parent?: Node; } export interface TSCallSignatureDeclaration extends Span { @@ -1265,6 +1416,7 @@ export interface TSCallSignatureDeclaration extends Span { typeParameters: TSTypeParameterDeclaration | null; params: ParamPattern[]; returnType: TSTypeAnnotation | null; + parent?: Node; } export type TSMethodSignatureKind = 'method' | 'get' | 'set'; @@ -1281,6 +1433,7 @@ export interface TSMethodSignature extends Span { accessibility: null; readonly: false; static: false; + parent?: Node; } export interface TSConstructSignatureDeclaration extends Span { @@ -1288,6 +1441,7 @@ export interface TSConstructSignatureDeclaration extends Span { typeParameters: TSTypeParameterDeclaration | null; params: ParamPattern[]; returnType: TSTypeAnnotation | null; + parent?: Node; } export interface TSIndexSignatureName extends Span { @@ -1296,12 +1450,14 @@ export interface TSIndexSignatureName extends Span { name: string; optional: false; typeAnnotation: TSTypeAnnotation; + parent?: Node; } export interface TSInterfaceHeritage extends Span { type: 'TSInterfaceHeritage'; expression: Expression; typeArguments: TSTypeParameterInstantiation | null; + parent?: Node; } export interface TSTypePredicate extends Span { @@ -1309,6 +1465,7 @@ export interface TSTypePredicate extends Span { parameterName: TSTypePredicateName; asserts: boolean; typeAnnotation: TSTypeAnnotation | null; + parent?: Node; } export type TSTypePredicateName = IdentifierName | TSThisType; @@ -1320,6 +1477,7 @@ export interface TSModuleDeclaration extends Span { kind: TSModuleDeclarationKind; declare: boolean; global: boolean; + parent?: Node; } export type TSModuleDeclarationKind = 'global' | 'module' | 'namespace'; @@ -1327,22 +1485,26 @@ export type TSModuleDeclarationKind = 'global' | 'module' | 'namespace'; export interface TSModuleBlock extends Span { type: 'TSModuleBlock'; body: Array; + parent?: Node; } export interface TSTypeLiteral extends Span { type: 'TSTypeLiteral'; members: Array; + parent?: Node; } export interface TSInferType extends Span { type: 'TSInferType'; typeParameter: TSTypeParameter; + parent?: Node; } export interface TSTypeQuery extends Span { type: 'TSTypeQuery'; exprName: TSTypeQueryExprName; typeArguments: TSTypeParameterInstantiation | null; + parent?: Node; } export type TSTypeQueryExprName = TSImportType | TSTypeName; @@ -1353,6 +1515,7 @@ export interface TSImportType extends Span { options: ObjectExpression | null; qualifier: TSImportTypeQualifier | null; typeArguments: TSTypeParameterInstantiation | null; + parent?: Node; } export type TSImportTypeQualifier = IdentifierName | TSImportTypeQualifiedName; @@ -1361,6 +1524,7 @@ export interface TSImportTypeQualifiedName extends Span { type: 'TSQualifiedName'; left: TSImportTypeQualifier; right: IdentifierName; + parent?: Node; } export interface TSFunctionType extends Span { @@ -1368,6 +1532,7 @@ export interface TSFunctionType extends Span { typeParameters: TSTypeParameterDeclaration | null; params: ParamPattern[]; returnType: TSTypeAnnotation; + parent?: Node; } export interface TSConstructorType extends Span { @@ -1376,6 +1541,7 @@ export interface TSConstructorType extends Span { typeParameters: TSTypeParameterDeclaration | null; params: ParamPattern[]; returnType: TSTypeAnnotation; + parent?: Node; } export interface TSMappedType extends Span { @@ -1386,6 +1552,7 @@ export interface TSMappedType extends Span { typeAnnotation: TSType | null; optional: TSMappedTypeModifierOperator | false; readonly: TSMappedTypeModifierOperator | null; + parent?: Node; } export type TSMappedTypeModifierOperator = true | '+' | '-'; @@ -1394,24 +1561,28 @@ export interface TSTemplateLiteralType extends Span { type: 'TSTemplateLiteralType'; quasis: Array; types: Array; + parent?: Node; } export interface TSAsExpression extends Span { type: 'TSAsExpression'; expression: Expression; typeAnnotation: TSType; + parent?: Node; } export interface TSSatisfiesExpression extends Span { type: 'TSSatisfiesExpression'; expression: Expression; typeAnnotation: TSType; + parent?: Node; } export interface TSTypeAssertion extends Span { type: 'TSTypeAssertion'; typeAnnotation: TSType; expression: Expression; + parent?: Node; } export interface TSImportEqualsDeclaration extends Span { @@ -1419,6 +1590,7 @@ export interface TSImportEqualsDeclaration extends Span { id: BindingIdentifier; moduleReference: TSModuleReference; importKind: ImportOrExportKind; + parent?: Node; } export type TSModuleReference = TSExternalModuleReference | TSTypeName; @@ -1426,32 +1598,38 @@ export type TSModuleReference = TSExternalModuleReference | TSTypeName; export interface TSExternalModuleReference extends Span { type: 'TSExternalModuleReference'; expression: StringLiteral; + parent?: Node; } export interface TSNonNullExpression extends Span { type: 'TSNonNullExpression'; expression: Expression; + parent?: Node; } export interface Decorator extends Span { type: 'Decorator'; expression: Expression; + parent?: Node; } export interface TSExportAssignment extends Span { type: 'TSExportAssignment'; expression: Expression; + parent?: Node; } export interface TSNamespaceExportDeclaration extends Span { type: 'TSNamespaceExportDeclaration'; id: IdentifierName; + parent?: Node; } export interface TSInstantiationExpression extends Span { type: 'TSInstantiationExpression'; expression: Expression; typeArguments: TSTypeParameterInstantiation; + parent?: Node; } export type ImportOrExportKind = 'value' | 'type'; @@ -1460,16 +1638,19 @@ export interface JSDocNullableType extends Span { type: 'TSJSDocNullableType'; typeAnnotation: TSType; postfix: boolean; + parent?: Node; } export interface JSDocNonNullableType extends Span { type: 'TSJSDocNonNullableType'; typeAnnotation: TSType; postfix: boolean; + parent?: Node; } export interface JSDocUnknownType extends Span { type: 'TSJSDocUnknownType'; + parent?: Node; } export type AssignmentOperator = diff --git a/tasks/ast_tools/src/generators/raw_transfer.rs b/tasks/ast_tools/src/generators/raw_transfer.rs index f74fa88165778..170556a1b6321 100644 --- a/tasks/ast_tools/src/generators/raw_transfer.rs +++ b/tasks/ast_tools/src/generators/raw_transfer.rs @@ -143,12 +143,15 @@ fn generate_deserializers( const IS_TS = false; const RANGE = false; + const PARENT = false; const PRESERVE_PARENS = false; const textDecoder = new TextDecoder('utf-8', {{ ignoreBOM: true }}), decodeStr = textDecoder.decode.bind(textDecoder), {{ fromCodePoint }} = String; + let parent = null; + export function deserialize(buffer, sourceText, sourceByteLen) {{ return deserializeWith(buffer, sourceText, sourceByteLen, deserializeRawTransferData); }} @@ -214,10 +217,11 @@ fn generate_deserializers( // Create deserializers with various settings, by setting `IS_TS`, `RANGE` and `PRESERVE_PARENS` consts, // and running through minifier to shake out irrelevant code let mut deserializers = vec![]; - let mut create_deserializer = |is_ts, range, preserve_parens| { + let mut create_deserializer = |is_ts, range, parent, preserve_parens| { let mut program = program.clone_in(&allocator); replace_const(&mut program, "IS_TS", is_ts); replace_const(&mut program, "RANGE", range); + replace_const(&mut program, "PARENT", parent); replace_const(&mut program, "PRESERVE_PARENS", preserve_parens); let code = print_minified(&mut program, &allocator); @@ -225,6 +229,9 @@ fn generate_deserializers( if range { name.push_str("_range"); } + if parent { + name.push_str("_parent"); + } if !preserve_parens { name.push_str("_no_parens"); } @@ -234,12 +241,14 @@ fn generate_deserializers( for is_ts in [false, true] { for range in [false, true] { - create_deserializer(is_ts, range, true); + for parent in [false, true] { + create_deserializer(is_ts, range, parent, true); + } } } // `PRESERVE_PARENS = false` is only required for linter - create_deserializer(true, true, false); + create_deserializer(true, true, false, false); deserializers } @@ -285,21 +294,27 @@ fn generate_struct( }); let body = body.unwrap_or_else(|| { - let mut preamble_str = String::new(); + let mut inline_preamble_str = String::new(); let mut fields_str = String::new(); + let mut assignments_preamble_str = String::new(); + let mut assignments_str = String::new(); generator.generate_struct_fields(struct_def, 0, DeserializerType::Both); - for (field_name, StructFieldValue { value, deser_type }) in generator.fields { + let has_type_field = generator.fields.contains_key("type"); + + let mut all_fields_inline = true; + for (field_name, StructFieldValue { value, deser_type, inline }) in generator.fields { if let Some(value) = value.strip_prefix("...") { + assert!(inline, "Spread fields must be inlined"); match deser_type { DeserializerType::Both => write_it!(fields_str, "...{value},"), DeserializerType::JsOnly => write_it!(fields_str, "...(!IS_TS && {value}),"), DeserializerType::TsOnly => write_it!(fields_str, "...(IS_TS && {value}),"), } - } else { + } else if inline || !has_type_field { let value = if generator.dependent_field_names.contains(&field_name) { - write_it!(preamble_str, "const {field_name} = {value};\n"); + write_it!(inline_preamble_str, "const {field_name} = {value};\n"); &field_name } else { &value @@ -315,19 +330,55 @@ fn generate_struct( }; write_it!(fields_str, "...({condition} && {{ {field_name}: {value} }}),"); } + } else { + all_fields_inline = false; + + let value = if generator.dependent_field_names.contains(&field_name) { + write_it!(assignments_preamble_str, "const {field_name} = {value};\n"); + &field_name + } else { + &value + }; + + if deser_type == DeserializerType::Both { + write_it!(fields_str, "{field_name}: null,"); + write_it!(assignments_str, "node.{field_name} = {value};"); + } else { + let condition = match deser_type { + DeserializerType::JsOnly => "!IS_TS", + DeserializerType::TsOnly => "IS_TS", + DeserializerType::Both => unreachable!(), + }; + write_it!(fields_str, "...({condition} && {{ {field_name}: null }}),"); + write_it!(assignments_str, "if ({condition}) node.{field_name} = {value};"); + } } } for preamble_part in generator.preamble { - preamble_str.push_str(preamble_part.trim()); + assignments_preamble_str.push_str(preamble_part.trim()); + } + + let mut parent_assignment_str = ""; + if has_type_field { + fields_str.push_str("...(PARENT && { parent }),\n"); + + if !all_fields_inline { + inline_preamble_str.push_str("const previousParent = parent;\n"); + parent_assignment_str = "parent = "; + assignments_str.push_str("if (PARENT) parent = previousParent;\n"); + } } format!( " - {preamble_str} - return {{ + {inline_preamble_str} + const node = {parent_assignment_str} {{ {fields_str} }}; + {assignments_preamble_str} + {assignments_str} + return node; " ) }); @@ -358,6 +409,8 @@ struct StructFieldValue { value: String, /// Which deserializer(s) should include this field deser_type: DeserializerType, + /// `true` if value can be inlined in object definition + inline: bool, } impl<'s> StructDeserializerGenerator<'s> { @@ -404,6 +457,7 @@ impl<'s> StructDeserializerGenerator<'s> { StructFieldValue { value: format!("'{struct_name}'"), deser_type: DeserializerType::Both, + inline: true, }, ); } @@ -448,6 +502,7 @@ impl<'s> StructDeserializerGenerator<'s> { StructFieldValue { value: "...(RANGE && { range: [start, end] })".to_string(), deser_type, + inline: true, }, ); @@ -470,6 +525,7 @@ impl<'s> StructDeserializerGenerator<'s> { concat_field_count += 1; } + let mut inline = false; let value = if concat_field_count > 1 { // Concatenate fields for (index, &field) in concat_fields[..concat_field_count].iter().enumerate() { @@ -509,12 +565,20 @@ impl<'s> StructDeserializerGenerator<'s> { let converter = self.schema.meta_by_name(converter_name); self.apply_converter(converter, struct_def, struct_offset).unwrap() } else { + // Primitives and fieldless enums can be inlined into object literal, + // because they don't have a `parent` field + inline = match field_type.innermost_type(self.schema) { + TypeDef::Primitive(_) => true, + TypeDef::Enum(enum_def) => enum_def.is_fieldless(), + _ => false, + }; + let value_fn = field_type.deser_name(self.schema); let pos = pos_offset(field_offset); format!("{value_fn}({pos})") }; - self.fields.insert(field_name, StructFieldValue { value, deser_type }); + self.fields.insert(field_name, StructFieldValue { value, deser_type, inline }); } fn generate_struct_field_added( @@ -534,7 +598,8 @@ impl<'s> StructDeserializerGenerator<'s> { } let value = self.apply_converter(converter, struct_def, struct_offset).unwrap(); - self.fields.insert(field_name.to_string(), StructFieldValue { value, deser_type }); + self.fields + .insert(field_name.to_string(), StructFieldValue { value, deser_type, inline: false }); } fn apply_converter( diff --git a/tasks/ast_tools/src/generators/typescript.rs b/tasks/ast_tools/src/generators/typescript.rs index 38cfae77b60ff..fbb124b71573d 100644 --- a/tasks/ast_tools/src/generators/typescript.rs +++ b/tasks/ast_tools/src/generators/typescript.rs @@ -11,7 +11,7 @@ use crate::{ should_skip_enum_variant, should_skip_field, }, output::Output, - schema::{Def, EnumDef, FieldDef, Schema, StructDef, TypeDef}, + schema::{Def, EnumDef, FieldDef, Schema, StructDef, TypeDef, TypeId}, utils::{FxIndexSet, format_cow, write_it}, }; @@ -26,12 +26,19 @@ impl Generator for TypescriptGenerator { /// Generate Typescript type definitions for all AST types. fn generate(&self, schema: &Schema, codegen: &Codegen) -> Output { let estree_derive_id = codegen.get_derive_id_by_name("ESTree"); + let program_type_id = schema.type_names["Program"]; let mut code = String::new(); let mut ast_node_names: Vec = vec![]; for type_def in &schema.types { if type_def.generates_derive(estree_derive_id) { - generate_ts_type_def(type_def, &mut code, &mut ast_node_names, schema); + generate_ts_type_def( + type_def, + &mut code, + &mut ast_node_names, + program_type_id, + schema, + ); } } @@ -52,6 +59,7 @@ fn generate_ts_type_def( type_def: &TypeDef, code: &mut String, ast_node_names: &mut Vec, + program_type_id: TypeId, schema: &Schema, ) { // Skip TS def generation if `#[estree(no_ts_def)]` attribute @@ -64,7 +72,7 @@ fn generate_ts_type_def( if !no_ts_def { let ts_def = match type_def { TypeDef::Struct(struct_def) => { - generate_ts_type_def_for_struct(struct_def, ast_node_names, schema) + generate_ts_type_def_for_struct(struct_def, ast_node_names, program_type_id, schema) } TypeDef::Enum(enum_def) => generate_ts_type_def_for_enum(enum_def, schema), _ => unreachable!(), @@ -90,6 +98,7 @@ fn generate_ts_type_def( fn generate_ts_type_def_for_struct( struct_def: &StructDef, ast_node_names: &mut Vec, + program_type_id: TypeId, schema: &Schema, ) -> Option { // If struct marked with `#[estree(ts_alias = "...")]`, then it needs no type def @@ -150,6 +159,11 @@ fn generate_ts_type_def_for_struct( } } + if !struct_def.estree.no_type { + let parent_type = if struct_def.id == program_type_id { "null" } else { "Node" }; + write_it!(fields_str, "\n\tparent?: {parent_type};"); + } + let ts_def = if extends.is_empty() { format!("export interface {type_name} {{{fields_str}\n}}") } else if output_as_type {