perf(napi/parser, linter/plugins): raw transfer deserialize Span fields as i32s (#21135)

Continuation of #21132. Get span `start` and `end` from the `Int32Array` view of the buffer, instead of the `Uint32Array`view. This allows V8 to statically see that they are SMIs, and skip type checks.
This commit is contained in:
overlookmotel committed 2026-04-07 17:25:42 +00:00
1 parent bc1bcdd95e
commit 8c51121e4c
22 files changed
+3845 -3801

No files matched your search

File diff suppressed because it is too large. Load diff
+13 -13
View File
@@ -185,8 +185,8 @@ impl ESTree for CatchParameterConverter<'_, '_> {
typeAnnotation: null,
value: null,
}),
start: start = DESER[u32]( POS_OFFSET<FormalParameterRest>.rest.span.start ),
end: end = DESER[u32]( POS_OFFSET<FormalParameterRest>.rest.span.end ),
start: start = DESER[i32]( POS_OFFSET<FormalParameterRest>.rest.span.start ),
end: end = DESER[i32]( POS_OFFSET<FormalParameterRest>.rest.span.end ),
...(RANGE && { range: [start, end] }),
...(PARENT && { parent: previousParent }),
};
@@ -273,8 +273,8 @@ impl ESTree for FormalParameterRest<'_> {
right: null,
optional,
typeAnnotation: null,
start: start = DESER[u32]( POS_OFFSET.span.start ),
end: end = DESER[u32]( POS_OFFSET.span.end ),
start: start = DESER[i32]( POS_OFFSET.span.start ),
end: end = DESER[i32]( POS_OFFSET.span.end ),
...(RANGE && { range: [start, end] }),
...(PARENT && { parent: previousParent }),
};
@@ -305,8 +305,8 @@ impl ESTree for FormalParameterRest<'_> {
param.end = typeAnnotation.end;
if (RANGE) param.range[1] = typeAnnotation.end;
} else if (optional) {
param.end = DESER[u32]( POS_OFFSET.span.end );
if (RANGE) param.range[1] = DESER[u32]( POS_OFFSET.span.end );
param.end = DESER[i32]( POS_OFFSET.span.end );
if (RANGE) param.range[1] = DESER[i32]( POS_OFFSET.span.end );
}
if (PARENT) parent = previousParent;
}
@@ -320,8 +320,8 @@ impl ESTree for FormalParameterRest<'_> {
parameter: null,
readonly,
static: false,
start: start = DESER[u32]( POS_OFFSET.span.start ),
end: end = DESER[u32]( POS_OFFSET.span.end ),
start: start = DESER[i32]( POS_OFFSET.span.start ),
end: end = DESER[i32]( POS_OFFSET.span.end ),
...(RANGE && { range: [start, end] }),
...(PARENT && { parent: previousParent }),
};
@@ -369,7 +369,7 @@ impl ESTree for FormalParameterRest<'_> {
param.parameter.end = paramTypeAnnotation.end;
if (RANGE) param.parameter.range[1] = paramTypeAnnotation.end;
} else if (paramOptional) {
const paramEnd = DESER[u32]( POS_OFFSET.span.end );
const paramEnd = DESER[i32]( POS_OFFSET.span.end );
const pattern = param.parameter;
param.parameter.end = paramEnd;
if (RANGE) param.parameter.range[1] = paramEnd;
@@ -384,8 +384,8 @@ impl ESTree for FormalParameterRest<'_> {
type: 'AssignmentPattern',
left: null,
right: null,
start: start = DESER[u32]( POS_OFFSET.span.start ),
end: end = DESER[u32]( POS_OFFSET.span.end ),
start: start = DESER[i32]( POS_OFFSET.span.start ),
end: end = DESER[i32]( POS_OFFSET.span.end ),
...(RANGE && { range: [start, end] }),
...(PARENT && { parent: previousParent }),
};
@@ -767,8 +767,8 @@ impl ESTree for AssignmentTargetPropertyIdentifierInit<'_> {
node = parent = {
type: 'ParenthesizedExpression',
expression: null,
start: start = DESER[u32]( POS_OFFSET.span.start ),
end: end = DESER[u32]( POS_OFFSET.span.end ),
start: start = DESER[i32]( POS_OFFSET.span.start ),
end: end = DESER[i32]( POS_OFFSET.span.end ),
...(RANGE && { range: [start, end] }),
...(PARENT && { parent }),
};
+2 -2
View File
@@ -197,8 +197,8 @@ impl ESTree for RegExpFlagsConverter<'_> {
#[ast_meta]
#[estree(raw_deser = r#"
const tail = DESER[bool](POS_OFFSET.tail),
start = IS_TS ? DESER[u32](POS_OFFSET.span.start) - 1 : DESER[u32](POS_OFFSET.span.start),
end = IS_TS ? DESER[u32](POS_OFFSET.span.end) + 2 - tail : DESER[u32](POS_OFFSET.span.end),
start = IS_TS ? DESER[i32](POS_OFFSET.span.start) - 1 : DESER[i32](POS_OFFSET.span.start),
end = IS_TS ? DESER[i32](POS_OFFSET.span.end) + 2 - tail : DESER[i32](POS_OFFSET.span.end),
value = DESER[TemplateElementValue](POS_OFFSET.value);
if (value.cooked !== null && DESER[bool](POS_OFFSET.lone_surrogates)) {
value.cooked = value.cooked
+2 -2
View File
@@ -121,8 +121,8 @@ impl Program<'_> {
/// `Program` span start is 0 (not 5).
#[ast_meta]
#[estree(raw_deser = "
const start = IS_TS ? 0 : DESER[u32](POS_OFFSET.span.start),
end = DESER[u32](POS_OFFSET.span.end);
const start = IS_TS ? 0 : DESER[i32](POS_OFFSET.span.start),
end = DESER[i32](POS_OFFSET.span.end);
const program = parent = {
type: 'Program',
+6 -6
View File
@@ -52,8 +52,8 @@ impl ESTree for ExpressionStatementDirective<'_, '_> {
#[ast_meta]
#[estree(raw_deser = "
const kind = DESER[TSModuleDeclarationKind](POS_OFFSET.kind),
start = DESER[u32](POS_OFFSET.span.start),
end = DESER[u32](POS_OFFSET.span.end),
start = DESER[i32](POS_OFFSET.span.start),
end = DESER[i32](POS_OFFSET.span.end),
declare = DESER[bool](POS_OFFSET.declare);
let node;
@@ -266,8 +266,8 @@ impl ESTree for TSModuleDeclarationIdParts<'_, '_> {
optional: false,
typeAnnotation: null,
}),
start: keywordStart = DESER[u32](POS_OFFSET.global_span.start),
end: keywordEnd = DESER[u32](POS_OFFSET.global_span.end),
start: keywordStart = DESER[i32](POS_OFFSET.global_span.start),
end: keywordEnd = DESER[i32](POS_OFFSET.global_span.end),
...(RANGE && { range: [keywordStart, keywordEnd] }),
...(PARENT && { parent }),
};
@@ -488,8 +488,8 @@ impl ESTree for TSFunctionTypeParams<'_, '_> {
node = parent = {
type: 'TSParenthesizedType',
typeAnnotation: null,
start: start = DESER[u32]( POS_OFFSET.span.start ),
end: end = DESER[u32]( POS_OFFSET.span.end ),
start: start = DESER[i32]( POS_OFFSET.span.start ),
end: end = DESER[i32]( POS_OFFSET.span.end ),
...(RANGE && { range: [start, end] }),
...(PARENT && { parent }),
};
+270 -269
View File
@@ -9,312 +9,313 @@ pub static STRUCTS: phf::Map<&'static str, StructDetails> = ::phf::Map {
key: 16287231350648472473,
disps: &[
(0, 0),
(0, 63),
(0, 14),
(0, 16),
(1, 29),
(8, 184),
(0, 3),
(0, 10),
(7, 181),
(0, 71),
(0, 134),
(0, 26),
(0, 70),
(0, 48),
(0, 2),
(0, 3),
(1, 74),
(0, 1),
(0, 14),
(1, 1),
(1, 173),
(0, 111),
(1, 102),
(0, 8),
(0, 116),
(0, 142),
(4, 180),
(1, 197),
(0, 20),
(4, 145),
(0, 44),
(0, 81),
(0, 5),
(0, 55),
(0, 145),
(0, 25),
(0, 2),
(0, 45),
(1, 7),
(0, 98),
(0, 118),
(2, 196),
(0, 0),
(0, 179),
(1, 35),
(0, 21),
(1, 135),
(19, 37),
(0, 27),
(0, 58),
(1, 228),
(0, 0),
(2, 209),
(5, 88),
(0, 30),
(84, 1),
(0, 0),
(10, 123),
(0, 93),
(1, 32),
(0, 5),
(0, 10),
(0, 166),
(0, 36),
(0, 2),
(5, 181),
(1, 131),
(8, 215),
(0, 9),
(11, 111),
(1, 27),
(0, 37),
(67, 150),
(0, 4),
(1, 120),
(0, 1),
(1, 24),
(13, 94),
(0, 10),
(12, 21),
(0, 0),
(4, 130),
(0, 2),
(0, 26),
(38, 67),
(0, 42),
(2, 120),
(20, 6),
(0, 3),
],
entries: &[
("JSXElement", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("JSDocNullableType", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("WithClause", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("NewExpression", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 2]) }),
("NumericLiteral", StructDetails { field_order: Some(&[1, 0, 4, 3, 2]) }),
("TSUnknownKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("UnicodePropertyEscape", StructDetails { field_order: Some(&[0, 3, 4, 1, 2]) }),
("TSInterfaceDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 7, 2]) }),
("ObjectAssignmentTarget", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("SwitchCase", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSPropertySignature", StructDetails { field_order: Some(&[1, 0, 2, 3, 4, 5, 6]) }),
("CatchClause", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("Decorator", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSClassImplements", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("PrivateInExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("IdentifierReference", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("TSGlobalDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 2]) }),
("TSParenthesizedType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ForInStatement", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 2]) }),
("AssignmentExpression", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("BlockStatement", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("StringLiteral", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("TSNumberKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("ImportNamespaceSpecifier", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSTypeParameterInstantiation", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ScopeId", StructDetails { field_order: None }),
("ImportDeclaration", StructDetails { field_order: Some(&[1, 0, 4, 5, 2, 6, 3]) }),
("SymbolId", StructDetails { field_order: None }),
("PrivateIdentifier", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSModuleBlock", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSEnumDeclaration", StructDetails { field_order: Some(&[1, 0, 4, 5, 2, 3]) }),
("JSXNamespacedName", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ExportAllDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 2]) }),
("Directive", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSIntrinsicKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("BindingRestElement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSTypeQuery", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("SwitchStatement", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("TSAnyKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSAsExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ReturnStatement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ArrayAssignmentTarget", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ThisExpression", StructDetails { field_order: Some(&[1, 0]) }),
("IgnoreGroup", StructDetails { field_order: None }),
("TSInterfaceBody", StructDetails { field_order: Some(&[1, 0, 2]) }),
("CatchParameter", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("RawTransferData", StructDetails { field_order: None }),
("RawTransferMetadata", StructDetails { field_order: Some(&[0, 3, 4, 5, 1, 2]) }),
("ObjectProperty", StructDetails { field_order: Some(&[1, 0, 2, 6, 7, 3, 4, 5]) }),
("DebuggerStatement", StructDetails { field_order: Some(&[1, 0]) }),
("TSModuleDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
(
"MethodDefinition",
StructDetails { field_order: Some(&[1, 0, 2, 6, 7, 8, 3, 4, 5, 9, 10, 11]) },
),
("ExportEntry", StructDetails { field_order: Some(&[1, 0, 2, 3, 4, 5, 6]) }),
("DoWhileStatement", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("FunctionBody", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("Dot", StructDetails { field_order: None }),
("UnaryExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSLiteralType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ObjectExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSRestType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TemplateElement", StructDetails { field_order: Some(&[1, 0, 4, 2, 3]) }),
("JSXSpreadChild", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSOptionalType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("IfStatement", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("Character", StructDetails { field_order: Some(&[0, 2, 1]) }),
("LookAroundAssertion", StructDetails { field_order: Some(&[0, 2, 1]) }),
("EcmaScriptModule", StructDetails { field_order: Some(&[4, 0, 1, 2, 3]) }),
("RegExp", StructDetails { field_order: None }),
("SpreadElement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("Span", StructDetails { field_order: Some(&[1, 2, 0]) }),
("Disjunction", StructDetails { field_order: None }),
("AssignmentTargetPropertyIdentifier", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ConditionalExpression", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("TSTypeAliasDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("StaticBlock", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
(
"PropertyDefinition",
StructDetails {
field_order: Some(&[1, 0, 2, 6, 7, 8, 9, 3, 4, 5, 10, 11, 12, 13, 14]),
},
),
("Comment", StructDetails { field_order: None }),
("LabeledStatement", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("StaticMemberExpression", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("CharacterClassEscape", StructDetails { field_order: None }),
("TSTupleType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSTypeParameter", StructDetails { field_order: Some(&[1, 0, 5, 6, 7, 2, 3, 4]) }),
("ErrorLabel", StructDetails { field_order: Some(&[1, 0]) }),
("RawTransferMetadata2", StructDetails { field_order: Some(&[0, 3, 4, 5, 1, 2]) }),
("ChainExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("BindingProperty", StructDetails { field_order: Some(&[1, 0, 4, 5, 2, 3]) }),
("NullLiteral", StructDetails { field_order: Some(&[1, 0]) }),
("TSObjectKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("IdentifierName", StructDetails { field_order: Some(&[1, 0, 2]) }),
("JSXOpeningFragment", StructDetails { field_order: Some(&[1, 0]) }),
("AssignmentTargetRest", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSIndexedAccessType", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("Modifiers", StructDetails { field_order: None }),
("CommentNewlines", StructDetails { field_order: None }),
("JSXText", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ExportAllDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 2]) }),
("TSMappedType", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 7, 8, 2]) }),
("TSStringKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSNamedTupleMember", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("TSTypeLiteral", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSTemplateLiteralType", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("JSXAttribute", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("AssignmentTargetPropertyProperty", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("RegExpPattern", StructDetails { field_order: None }),
("TSEnumBody", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("Decorator", StructDetails { field_order: Some(&[1, 0, 2]) }),
("EmptyStatement", StructDetails { field_order: Some(&[1, 0]) }),
("ForOfStatement", StructDetails { field_order: Some(&[1, 0, 6, 3, 4, 5, 2]) }),
("ReferenceId", StructDetails { field_order: None }),
("V8IntrinsicExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("WithStatement", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("SourceType", StructDetails { field_order: None }),
("ThrowStatement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("IdentifierReference", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("Program", StructDetails { field_order: Some(&[1, 0, 8, 3, 4, 5, 6, 7, 2]) }),
("TaggedTemplateExpression", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("JSXEmptyExpression", StructDetails { field_order: Some(&[1, 0]) }),
("JSXClosingFragment", StructDetails { field_order: Some(&[1, 0]) }),
("TSTypePredicate", StructDetails { field_order: Some(&[1, 0, 3, 2, 4]) }),
("AssignmentPattern", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("Class", StructDetails { field_order: Some(&[1, 0, 10, 3, 4, 5, 6, 7, 8, 9, 11, 12, 2]) }),
("StaticImport", StructDetails { field_order: None }),
("TSThisType", StructDetails { field_order: Some(&[1, 0]) }),
("NamedReference", StructDetails { field_order: None }),
("JSDocUnknownType", StructDetails { field_order: Some(&[1, 0]) }),
("BigIntLiteral", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("ForStatement", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("ParenthesizedExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ContinueStatement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSQualifiedName", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ArrayPattern", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSTypeOperator", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("UpdateExpression", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("CharacterClass", StructDetails { field_order: Some(&[0, 2, 3, 4, 1]) }),
("ClassString", StructDetails { field_order: Some(&[0, 2, 1]) }),
("ImportSpecifier", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("TSIntersectionType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ImportAttribute", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSNeverKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("JSXSpreadAttribute", StructDetails { field_order: Some(&[1, 0, 2]) }),
("CallExpression", StructDetails { field_order: Some(&[1, 0, 4, 5, 6, 2, 3]) }),
("Hashbang", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSUnionType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSTypeReference", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("Error", StructDetails { field_order: Some(&[4, 0, 1, 2, 3]) }),
("ArrayExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("IndexedReference", StructDetails { field_order: None }),
("TSSymbolKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSInferType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("AssignmentTargetWithDefault", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TemplateLiteral", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("PrivateInExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("JSXFragment", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("ImportEntry", StructDetails { field_order: None }),
("JSXExpressionContainer", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSTypeAssertion", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
(
"AccessorProperty",
StructDetails { field_order: Some(&[1, 0, 2, 6, 7, 8, 9, 3, 4, 5, 10, 11]) },
),
("Modifier", StructDetails { field_order: None }),
("LabelIdentifier", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSEnumMember", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSUndefinedKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSImportTypeQualifiedName", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("BoundaryAssertion", StructDetails { field_order: None }),
("TSClassImplements", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("BreakStatement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSConstructorType", StructDetails { field_order: Some(&[1, 0, 6, 3, 4, 5, 2]) }),
("TSCallSignatureDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("ExportDefaultDeclaration", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSGlobalDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 2]) }),
("TSFunctionType", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("VariableDeclarator", StructDetails { field_order: Some(&[1, 0, 2, 4, 5, 6, 3]) }),
("StaticExport", StructDetails { field_order: None }),
("MetaProperty", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSInterfaceHeritage", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("CharacterClassRange", StructDetails { field_order: None }),
("LogicalExpression", StructDetails { field_order: Some(&[1, 0, 3, 2, 4]) }),
("TSBigIntKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSConditionalType", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("CapturingGroup", StructDetails { field_order: None }),
("JSXOpeningElement", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("ImportExpression", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("ImportDefaultSpecifier", StructDetails { field_order: Some(&[1, 0, 2]) }),
("Pattern", StructDetails { field_order: None }),
("FormalParameterRest", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("TSImportType", StructDetails { field_order: Some(&[1, 0, 2, 3, 4, 5]) }),
("FormalParameter", StructDetails { field_order: Some(&[1, 0, 6, 7, 8, 9, 2, 3, 4, 5]) }),
("TSTypeLiteral", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TemplateElementValue", StructDetails { field_order: None }),
("TSThisParameter", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("RegExpLiteral", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("RegExpFlags", StructDetails { field_order: None }),
("TSSatisfiesExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ClassBody", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ClassStringDisjunction", StructDetails { field_order: Some(&[0, 2, 1]) }),
("BindingRestElement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ExportDefaultDeclaration", StructDetails { field_order: Some(&[1, 0, 2]) }),
("AssignmentTargetRest", StructDetails { field_order: Some(&[1, 0, 2]) }),
(
"TSMethodSignature",
StructDetails { field_order: Some(&[1, 0, 3, 8, 9, 10, 4, 5, 6, 7, 2]) },
"MethodDefinition",
StructDetails { field_order: Some(&[1, 0, 2, 6, 7, 8, 3, 4, 5, 9, 10, 11]) },
),
("TSIntersectionType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("AssignmentPattern", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("JSXMemberExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSOptionalType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ExpressionStatement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSNamedTupleMember", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("JSDocUnknownType", StructDetails { field_order: Some(&[1, 0]) }),
("TSTupleType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSBooleanKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("DebuggerStatement", StructDetails { field_order: Some(&[1, 0]) }),
("TSTypeParameter", StructDetails { field_order: Some(&[1, 0, 5, 6, 7, 2, 3, 4]) }),
("ObjectPattern", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ImportSpecifier", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("Error", StructDetails { field_order: Some(&[4, 0, 1, 2, 3]) }),
("Quantifier", StructDetails { field_order: Some(&[0, 1, 2, 4, 3]) }),
("DynamicImport", StructDetails { field_order: None }),
("StaticImport", StructDetails { field_order: None }),
("TSNamespaceExportDeclaration", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ArrayPattern", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSQualifiedName", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("FormalParameter", StructDetails { field_order: Some(&[1, 0, 6, 7, 8, 9, 2, 3, 4, 5]) }),
("TSImportTypeQualifiedName", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ConditionalExpression", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("JSXNamespacedName", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("Hashbang", StructDetails { field_order: Some(&[1, 0, 2]) }),
("SequenceExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("Comment", StructDetails { field_order: None }),
("JSXOpeningElement", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("TSSymbolKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSInterfaceDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 7, 2]) }),
("ObjectAssignmentTarget", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSIndexSignatureName", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("Modifiers", StructDetails { field_order: None }),
("ObjectProperty", StructDetails { field_order: Some(&[1, 0, 2, 6, 7, 3, 4, 5]) }),
("ErrorLabel", StructDetails { field_order: Some(&[1, 0]) }),
("ImportExpression", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("CatchClause", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("TSImportType", StructDetails { field_order: Some(&[1, 0, 2, 3, 4, 5]) }),
("TSTypeOperator", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("NamedReference", StructDetails { field_order: None }),
("TaggedTemplateExpression", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("TSModuleDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("NumericLiteral", StructDetails { field_order: Some(&[1, 0, 4, 3, 2]) }),
("EmptyStatement", StructDetails { field_order: Some(&[1, 0]) }),
("LookAroundAssertion", StructDetails { field_order: Some(&[0, 2, 1]) }),
("BindingProperty", StructDetails { field_order: Some(&[1, 0, 4, 5, 2, 3]) }),
("WhileStatement", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("JSXIdentifier", StructDetails { field_order: Some(&[1, 0, 2]) }),
("JSXSpreadChild", StructDetails { field_order: Some(&[1, 0, 2]) }),
("Super", StructDetails { field_order: Some(&[1, 0]) }),
("TSTypeAnnotation", StructDetails { field_order: Some(&[1, 0, 2]) }),
("LabelIdentifier", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ClassStringDisjunction", StructDetails { field_order: Some(&[0, 2, 1]) }),
("ImportNamespaceSpecifier", StructDetails { field_order: Some(&[1, 0, 2]) }),
("BindingIdentifier", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("TSEnumBody", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("ClassBody", StructDetails { field_order: Some(&[1, 0, 2]) }),
("StaticExport", StructDetails { field_order: None }),
("FormalParameters", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("ReturnStatement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("BlockStatement", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("TSSatisfiesExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("LogicalExpression", StructDetails { field_order: Some(&[1, 0, 3, 2, 4]) }),
("CallExpression", StructDetails { field_order: Some(&[1, 0, 4, 5, 6, 2, 3]) }),
("FixedSizeAllocatorMetadata", StructDetails { field_order: Some(&[1, 0, 2]) }),
(
"ArrowFunctionExpression",
StructDetails { field_order: Some(&[1, 0, 7, 8, 3, 4, 5, 6, 2, 9, 10]) },
),
("Alternative", StructDetails { field_order: None }),
("TSArrayType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSLiteralType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("Program", StructDetails { field_order: Some(&[1, 0, 8, 3, 4, 5, 6, 7, 2]) }),
("TSObjectKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSConditionalType", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("TSExternalModuleReference", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSMappedType", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 7, 8, 2]) }),
("PrivateFieldExpression", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("ExportNamedDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 2, 6]) }),
("Directive", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TryStatement", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("AwaitExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("StaticBlock", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("TSTypeAliasDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("VariableDeclaration", StructDetails { field_order: Some(&[1, 0, 2, 4, 3]) }),
("TSExportAssignment", StructDetails { field_order: Some(&[1, 0, 2]) }),
("JSDocNonNullableType", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("FixedSizeAllocatorMetadata", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSNonNullExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ThisExpression", StructDetails { field_order: Some(&[1, 0]) }),
("TSBigIntKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("RawTransferData", StructDetails { field_order: None }),
("CharacterClassRange", StructDetails { field_order: None }),
("TSTypeReference", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("JSXOpeningFragment", StructDetails { field_order: Some(&[1, 0]) }),
("AssignmentExpression", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("ComputedMemberExpression", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("TSEnumMember", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("UnicodePropertyEscape", StructDetails { field_order: Some(&[0, 3, 4, 1, 2]) }),
("CharacterClassEscape", StructDetails { field_order: None }),
("ParenthesizedExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSAnyKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSThisParameter", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSTypeParameterDeclaration", StructDetails { field_order: Some(&[1, 0, 2]) }),
("FormalParameterRest", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("RegExpPattern", StructDetails { field_order: None }),
("JSXClosingElement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("LabeledStatement", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("IdentifierName", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSThisType", StructDetails { field_order: Some(&[1, 0]) }),
("Elision", StructDetails { field_order: Some(&[1, 0]) }),
("BinaryExpression", StructDetails { field_order: Some(&[1, 0, 3, 2, 4]) }),
("TSNamespaceExportDeclaration", StructDetails { field_order: Some(&[1, 0, 2]) }),
("BooleanLiteral", StructDetails { field_order: Some(&[1, 0, 2]) }),
("NewExpression", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 2]) }),
("TSVoidKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("JSXClosingFragment", StructDetails { field_order: Some(&[1, 0]) }),
("JSDocNonNullableType", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("JSXSpreadAttribute", StructDetails { field_order: Some(&[1, 0, 2]) }),
("BreakStatement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ReferenceId", StructDetails { field_order: None }),
("TSNeverKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("SpreadElement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSArrayType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("Alternative", StructDetails { field_order: None }),
("ImportDefaultSpecifier", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ImportAttribute", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("RegExpLiteral", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("Character", StructDetails { field_order: Some(&[0, 2, 1]) }),
("JSXEmptyExpression", StructDetails { field_order: Some(&[1, 0]) }),
("WithStatement", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("BigIntLiteral", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("RawTransferMetadata2", StructDetails { field_order: Some(&[0, 3, 4, 5, 1, 2]) }),
("ChainExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("CapturingGroup", StructDetails { field_order: None }),
("ExportEntry", StructDetails { field_order: Some(&[1, 0, 2, 3, 4, 5, 6]) }),
("MetaProperty", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSUnionType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("RegExpFlags", StructDetails { field_order: None }),
("AwaitExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ForStatement", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("DoWhileStatement", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSTypeQuery", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ThrowStatement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("IgnoreGroup", StructDetails { field_order: None }),
("SymbolId", StructDetails { field_order: None }),
("Disjunction", StructDetails { field_order: None }),
("TSExportAssignment", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ArrayExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSPropertySignature", StructDetails { field_order: Some(&[1, 0, 2, 3, 4, 5, 6]) }),
("ArrayAssignmentTarget", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSTypePredicate", StructDetails { field_order: Some(&[1, 0, 3, 2, 4]) }),
("TSUndefinedKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("WithClause", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("Class", StructDetails { field_order: Some(&[1, 0, 10, 3, 4, 5, 6, 7, 8, 9, 11, 12, 2]) }),
(
"TSMethodSignature",
StructDetails { field_order: Some(&[1, 0, 3, 8, 9, 10, 4, 5, 6, 7, 2]) },
),
("TryStatement", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("TSTemplateLiteralType", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("I32Dummy", StructDetails { field_order: None }),
(
"TSConstructSignatureDeclaration",
StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 2]) },
),
("FormalParameters", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("PrivateIdentifier", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ExportSpecifier", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("JSXElement", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("ContinueStatement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("AssignmentTargetPropertyIdentifier", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSTypeAssertion", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSRestType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("NullLiteral", StructDetails { field_order: Some(&[1, 0]) }),
("SwitchCase", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("RegExp", StructDetails { field_order: None }),
("TSModuleBlock", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("StaticMemberExpression", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("CatchParameter", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("BooleanLiteral", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSInterfaceHeritage", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
(
"Function",
StructDetails {
field_order: Some(&[1, 0, 9, 3, 10, 11, 12, 4, 5, 6, 7, 8, 2, 13, 14]),
},
),
("TSNullKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("Elision", StructDetails { field_order: Some(&[1, 0]) }),
("TSIndexSignature", StructDetails { field_order: Some(&[1, 0, 4, 5, 2, 3]) }),
("TSIndexSignatureName", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("Super", StructDetails { field_order: Some(&[1, 0]) }),
("Quantifier", StructDetails { field_order: Some(&[0, 1, 2, 4, 3]) }),
("ObjectPattern", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("DynamicImport", StructDetails { field_order: None }),
("TSBooleanKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSParenthesizedType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TemplateElement", StructDetails { field_order: Some(&[1, 0, 4, 2, 3]) }),
("ExportNamedDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 2, 6]) }),
("AssignmentTargetWithDefault", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSInferType", StructDetails { field_order: Some(&[1, 0, 2]) }),
("NameSpan", StructDetails { field_order: Some(&[1, 0]) }),
("ComputedMemberExpression", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("YieldExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSTypeAnnotation", StructDetails { field_order: Some(&[1, 0, 2]) }),
("JSXMemberExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSImportEqualsDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("TSVoidKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("SequenceExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ExportSpecifier", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("TSTypeParameterDeclaration", StructDetails { field_order: Some(&[1, 0, 2]) }),
("BindingIdentifier", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("JSXClosingElement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSNullKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSUnknownKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("ImportDeclaration", StructDetails { field_order: Some(&[1, 0, 4, 5, 2, 6, 3]) }),
("SourceType", StructDetails { field_order: None }),
("TSIndexedAccessType", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
(
"AccessorProperty",
StructDetails { field_order: Some(&[1, 0, 2, 6, 7, 8, 9, 3, 4, 5, 10, 11]) },
),
("TSAsExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("Modifier", StructDetails { field_order: None }),
("IfStatement", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("JSDocNullableType", StructDetails { field_order: Some(&[1, 0, 3, 2]) }),
("EcmaScriptModule", StructDetails { field_order: Some(&[4, 0, 1, 2, 3]) }),
("TSStringKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("TSInterfaceBody", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSNumberKeyword", StructDetails { field_order: Some(&[1, 0]) }),
("VariableDeclaration", StructDetails { field_order: Some(&[1, 0, 2, 4, 3]) }),
("TemplateLiteral", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("TSFunctionType", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("CommentNodeId", StructDetails { field_order: None }),
("TSExternalModuleReference", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSInstantiationExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ExpressionStatement", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSIndexSignature", StructDetails { field_order: Some(&[1, 0, 4, 5, 2, 3]) }),
("FunctionBody", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("VariableDeclarator", StructDetails { field_order: Some(&[1, 0, 2, 4, 5, 6, 3]) }),
("YieldExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("CharacterClass", StructDetails { field_order: Some(&[0, 2, 3, 4, 1]) }),
("JSXIdentifier", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSTypeParameterInstantiation", StructDetails { field_order: Some(&[1, 0, 2]) }),
("RawTransferMetadata", StructDetails { field_order: Some(&[0, 3, 4, 5, 1, 2]) }),
("StringLiteral", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("UpdateExpression", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("Dot", StructDetails { field_order: None }),
("BoundaryAssertion", StructDetails { field_order: None }),
("JSXExpressionContainer", StructDetails { field_order: Some(&[1, 0, 2]) }),
("ScopeId", StructDetails { field_order: None }),
("TSEnumDeclaration", StructDetails { field_order: Some(&[1, 0, 4, 5, 2, 3]) }),
("Span", StructDetails { field_order: Some(&[1, 2, 0]) }),
("NonMaxU32", StructDetails { field_order: None }),
("JSXText", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ForOfStatement", StructDetails { field_order: Some(&[1, 0, 6, 3, 4, 5, 2]) }),
("UnaryExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ClassString", StructDetails { field_order: Some(&[0, 2, 1]) }),
("JSXFragment", StructDetails { field_order: Some(&[1, 0, 2, 3, 4]) }),
("IndexedReference", StructDetails { field_order: None }),
("TSNonNullExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("TSConstructorType", StructDetails { field_order: Some(&[1, 0, 6, 3, 4, 5, 2]) }),
("AssignmentTargetPropertyProperty", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("TSCallSignatureDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 5, 6, 2]) }),
("SwitchStatement", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("TSImportEqualsDeclaration", StructDetails { field_order: Some(&[1, 0, 3, 4, 2]) }),
("CommentNewlines", StructDetails { field_order: None }),
("ImportEntry", StructDetails { field_order: None }),
("JSXAttribute", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
("ObjectExpression", StructDetails { field_order: Some(&[1, 0, 2]) }),
("Pattern", StructDetails { field_order: None }),
("TSInstantiationExpression", StructDetails { field_order: Some(&[1, 0, 2, 3]) }),
],
};
@@ -34,6 +34,10 @@ const _: () = {
assert!(align_of::<Span>() == 8);
assert!(offset_of!(Span, start) == 0);
assert!(offset_of!(Span, end) == 4);
// Padding: 0 bytes
assert!(size_of::<I32Dummy>() == 4);
assert!(align_of::<I32Dummy>() == 4);
};
#[cfg(target_pointer_width = "32")]
@@ -63,6 +67,10 @@ const _: () = if cfg!(target_family = "wasm") || align_of::<u64>() == 8 {
assert!(align_of::<Span>() == 4);
assert!(offset_of!(Span, start) == 0);
assert!(offset_of!(Span, end) == 4);
// Padding: 0 bytes
assert!(size_of::<I32Dummy>() == 4);
assert!(align_of::<I32Dummy>() == 4);
};
#[cfg(not(any(target_pointer_width = "64", target_pointer_width = "32")))]
@@ -32,8 +32,8 @@ impl ESTree for ModuleKind {
impl ESTree for Span {
fn serialize<S: Serializer>(&self, serializer: S) {
let mut state = serializer.serialize_struct();
state.serialize_field("start", &self.start);
state.serialize_field("end", &self.end);
state.serialize_field("start", &crate::serialize::SpanStart(self));
state.serialize_field("end", &crate::serialize::SpanEnd(self));
state.end();
}
}
+6
View File
@@ -4,6 +4,8 @@
mod cmp;
mod edit_distance;
#[cfg(feature = "serialize")]
mod serialize;
mod source_type;
mod span;
@@ -20,6 +22,10 @@ pub use source_type::{
};
pub use span::{GetSpan, GetSpanMut, SPAN, Span};
// Only here to make it available in `generated/assert_layouts` module
#[cfg(debug_assertions)]
use span::I32Dummy;
mod generated {
#[cfg(debug_assertions)]
mod assert_layouts;
+34
View File
@@ -0,0 +1,34 @@
use oxc_ast_macros::ast_meta;
use oxc_estree::{ESTree, Serializer};
use crate::Span;
/// Deserialized as `i32` in raw transfer.
///
/// Source text is limited to 1 GiB in raw transfer, so `i32` can represent full range of possible values,
/// and V8 handles `i32`s better as they can be stored inline in structs as SMIs.
#[ast_meta]
#[estree(ts_type = "number", raw_deser = "DESER[i32](POS_OFFSET.start)", raw_deser_inline)]
pub struct SpanStart<'b>(pub &'b Span);
impl ESTree for SpanStart<'_> {
#[inline]
fn serialize<S: Serializer>(&self, serializer: S) {
self.0.start.serialize(serializer);
}
}
/// Deserialized as `i32` in raw transfer.
///
/// Source text is limited to 1 GiB in raw transfer, so `i32` can represent full range of possible values,
/// and V8 handles `i32`s better as they can be stored inline in structs as SMIs.
#[ast_meta]
#[estree(ts_type = "number", raw_deser = "DESER[i32](POS_OFFSET.end)", raw_deser_inline)]
pub struct SpanEnd<'b>(pub &'b Span);
impl ESTree for SpanEnd<'_> {
#[inline]
fn serialize<S: Serializer>(&self, serializer: S) {
self.0.end.serialize(serializer);
}
}
+7
View File
@@ -89,9 +89,11 @@ pub const SPAN: Span = Span::new(0, 0);
)]
pub struct Span {
/// The zero-based start offset of the span
#[estree(via = "SpanStart")]
pub start: u32,
/// The zero-based end offset of the span. This may be equal to [`start`](Span::start) if
/// the span is empty, but should not be less than it.
#[estree(via = "SpanEnd")]
pub end: u32,
/// Align `Span` on 8 on 64-bit platforms
#[estree(skip)]
@@ -678,6 +680,11 @@ impl PointerAlign {
}
}
/// Dummy struct to ensure `i32` is in AST schema, so it can be used by `raw_deser` implementations for `Span` fields.
#[cfg_attr(not(debug_assertions), expect(dead_code))]
#[ast]
pub struct I32Dummy(i32);
#[cfg(test)]
mod test {
use super::Span;
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -13783,6 +13783,10 @@ function constructOptionU64(pos, ast) {
return constructU64(pos + 8, ast);
}
function constructI32(pos, ast) {
return ast.buffer.int32[pos >> 2];
}
function constructOptionNameSpan(pos, ast) {
if (ast.buffer.uint32[(pos + 8) >> 2] === 0 && ast.buffer.uint32[(pos + 12) >> 2] === 0)
return null;
@@ -929,6 +929,7 @@ fn generate_primitive(primitive_def: &PrimitiveDef, code: &mut String, schema: &
"u8" => "return uint8[pos];",
// "u16" => "return uint16[pos >> 1];",
"u32" => "return uint32[pos >> 2];",
"i32" => "return int32[pos >> 2];",
// Will be approximate if larger than `Number.MAX_SAFE_INTEGER`
#[rustfmt::skip]
"u64" => "
@@ -905,6 +905,7 @@ fn generate_primitive(primitive_def: &PrimitiveDef, state: &mut State, schema: &
"u8" => "return ast.buffer[pos];",
// "u16" => "return uint16[pos >> 1];",
"u32" => "return ast.buffer.uint32[pos >> 2];",
"i32" => "return ast.buffer.int32[pos >> 2];",
// Will be approximate if larger than `Number.MAX_SAFE_INTEGER`
#[rustfmt::skip]
"u64" => "