refactor(napi/parser): raw transfer: introduce metadata struct (#12269)

Pure refactor. Introduce a `RawTransferMetadata` struct to hold metadata that gets written to end of buffer. Codegen use knowledge of memory layout of this struct to generate constants added in #12268. This is more robust than manually calculating offsets.
This commit is contained in:
overlookmotel committed 2025-07-14 19:36:49 +00:00
1 parent 39ef911147
commit 5fba91cfb1
8 files changed
+315 -284

No files matched your search

+266 -265
View File
@@ -9,296 +9,297 @@ pub static STRUCTS: phf::Map<&'static str, StructDetails> = ::phf::Map {
key: 16287231350648472473,
disps: &[
(0, 0),
(0, 23),
(0, 9),
(3, 163),
(0, 187),
(0, 190),
(2, 141),
(0, 34),
(0, 0),
(1, 77),
(0, 132),
(0, 45),
(0, 36),
(0, 218),
(0, 81),
(0, 14),
(0, 138),
(1, 229),
(0, 0),
(0, 21),
(0, 100),
(0, 11),
(0, 3),
(0, 10),
(0, 139),
(0, 84),
(0, 196),
(0, 3),
(4, 222),
(0, 86),
(0, 163),
(1, 155),
(0, 125),
(103, 2),
(5, 195),
(0, 79),
(0, 1),
(0, 13),
(4, 152),
(0, 109),
(0, 149),
(0, 6),
(5, 45),
(0, 147),
(1, 187),
(2, 110),
(0, 169),
(76, 87),
(4, 174),
(0, 143),
(0, 6),
(0, 156),
(1, 171),
(0, 92),
(8, 220),
(0, 2),
(1, 2),
(0, 70),
(0, 17),
(0, 5),
(1, 143),
(0, 144),
(8, 133),
(0, 4),
(2, 7),
(0, 36),
(4, 53),
(0, 45),
(0, 0),
(2, 160),
(2, 38),
(7, 223),
(60, 63),
(1, 114),
(0, 23),
(4, 66),
(0, 126),
(0, 26),
(3, 70),
(26, 191),
(3, 107),
(4, 187),
(1, 108),
(0, 39),
(0, 49),
(11, 199),
(0, 14),
],
entries: &[
("TSThisParameter", StructDetails { field_order: None }),
("ChainExpression", StructDetails { field_order: None }),
("CatchParameter", StructDetails { field_order: None }),
("TSImportEqualsDeclaration", StructDetails { field_order: None }),
("Hashbang", StructDetails { field_order: None }),
("JSDocNonNullableType", StructDetails { field_order: None }),
("Quantifier", StructDetails { field_order: Some(&[0, 1, 2, 4, 3]) }),
("NewExpression", StructDetails { field_order: None }),
("LabeledStatement", StructDetails { field_order: None }),
(
"ArrowFunctionExpression",
StructDetails { field_order: Some(&[0, 6, 7, 1, 2, 3, 4, 5, 8]) },
),
("StringLiteral", StructDetails { field_order: None }),
("JSXClosingElement", StructDetails { field_order: None }),
("BindingIdentifier", StructDetails { field_order: None }),
("TSConstructorType", StructDetails { field_order: Some(&[0, 4, 1, 2, 3]) }),
("CharacterClass", StructDetails { field_order: Some(&[0, 2, 3, 4, 1]) }),
("IndexedReference", StructDetails { field_order: None }),
("ExportEntry", StructDetails { field_order: Some(&[1, 0, 2, 3, 4, 5, 6]) }),
("CommentNodeId", StructDetails { field_order: None }),
(
"PropertyDefinition",
StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13]) },
),
("IfStatement", StructDetails { field_order: None }),
("TSLiteralType", StructDetails { field_order: None }),
("TSNullKeyword", StructDetails { field_order: None }),
("TSUnionType", StructDetails { field_order: None }),
("TSTypePredicate", StructDetails { field_order: Some(&[0, 1, 3, 2]) }),
("ThrowStatement", StructDetails { field_order: None }),
("BindingProperty", StructDetails { field_order: None }),
("Error", StructDetails { field_order: Some(&[4, 0, 1, 2, 3]) }),
("FunctionBody", StructDetails { field_order: None }),
("TSTemplateLiteralType", StructDetails { field_order: None }),
("TSTypeQuery", StructDetails { field_order: None }),
("ExportSpecifier", StructDetails { field_order: None }),
("TSQualifiedName", StructDetails { field_order: None }),
("ReturnStatement", StructDetails { field_order: None }),
("ExpressionStatement", StructDetails { field_order: None }),
("JSXOpeningElement", StructDetails { field_order: None }),
("JSXSpreadAttribute", StructDetails { field_order: None }),
("CapturingGroup", StructDetails { field_order: None }),
("Pattern", StructDetails { field_order: None }),
("ForInStatement", StructDetails { field_order: None }),
("JSXEmptyExpression", StructDetails { field_order: None }),
("YieldExpression", StructDetails { field_order: Some(&[0, 2, 1]) }),
("JSDocUnknownType", StructDetails { field_order: None }),
("JSDocNullableType", StructDetails { field_order: None }),
("DebuggerStatement", StructDetails { field_order: None }),
("TSTypeLiteral", StructDetails { field_order: None }),
("ArrayAssignmentTarget", StructDetails { field_order: None }),
("TSMethodSignature", StructDetails { field_order: Some(&[0, 1, 7, 8, 9, 2, 3, 4, 5, 6]) }),
("TSSatisfiesExpression", StructDetails { field_order: None }),
("AssignmentTargetWithDefault", StructDetails { field_order: None }),
("SourceType", StructDetails { field_order: None }),
("AssignmentPattern", StructDetails { field_order: None }),
("ObjectPattern", StructDetails { field_order: None }),
("ScopeId", StructDetails { field_order: None }),
("ArrayPattern", StructDetails { field_order: None }),
("CharacterClassEscape", StructDetails { field_order: None }),
("TSTypeReference", StructDetails { field_order: None }),
("JSXNamespacedName", StructDetails { field_order: None }),
("DoWhileStatement", StructDetails { field_order: None }),
("TSStringKeyword", StructDetails { field_order: None }),
("TSTupleType", StructDetails { field_order: None }),
("ConditionalExpression", StructDetails { field_order: None }),
("Program", StructDetails { field_order: Some(&[0, 7, 1, 2, 3, 4, 5, 6]) }),
("ArrayExpression", StructDetails { field_order: None }),
("ImportDefaultSpecifier", StructDetails { field_order: None }),
("AssignmentPattern", StructDetails { field_order: None }),
("TSBooleanKeyword", StructDetails { field_order: None }),
("Span", StructDetails { field_order: None }),
("TSConstructSignatureDeclaration", StructDetails { field_order: None }),
("ForStatement", StructDetails { field_order: None }),
("TSTypeParameterDeclaration", StructDetails { field_order: None }),
("Alternative", StructDetails { field_order: None }),
("PrivateFieldExpression", StructDetails { field_order: None }),
("StringLiteral", StructDetails { field_order: None }),
(
"AccessorProperty",
StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4, 6, 7, 8, 9, 10]) },
),
("Dot", StructDetails { field_order: None }),
("TSNumberKeyword", StructDetails { field_order: None }),
("TSEnumBody", StructDetails { field_order: None }),
("CallExpression", StructDetails { field_order: None }),
("TSInterfaceDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 4, 6, 5]) }),
("UnicodePropertyEscape", StructDetails { field_order: Some(&[0, 3, 4, 1, 2]) }),
("ExportDefaultDeclaration", StructDetails { field_order: None }),
("ImportEntry", StructDetails { field_order: None }),
("ImportExpression", StructDetails { field_order: None }),
("JSXFragment", StructDetails { field_order: None }),
("V8IntrinsicExpression", StructDetails { field_order: None }),
("ThisExpression", StructDetails { field_order: None }),
("StaticBlock", StructDetails { field_order: None }),
("PrivateInExpression", StructDetails { field_order: None }),
("Modifier", StructDetails { field_order: None }),
("PrivateIdentifier", StructDetails { field_order: None }),
("DynamicImport", StructDetails { field_order: None }),
("ReferenceId", StructDetails { field_order: None }),
("TSEnumMember", StructDetails { field_order: None }),
("JSXExpressionContainer", StructDetails { field_order: None }),
("TSNamedTupleMember", StructDetails { field_order: None }),
("TSUndefinedKeyword", StructDetails { field_order: None }),
("TSTypeOperator", StructDetails { field_order: Some(&[0, 2, 1]) }),
("StaticMemberExpression", StructDetails { field_order: None }),
("StaticImport", StructDetails { field_order: None }),
("TSRestType", StructDetails { field_order: None }),
("Alternative", StructDetails { field_order: None }),
("NullLiteral", StructDetails { field_order: None }),
("ConditionalExpression", StructDetails { field_order: None }),
("ObjectProperty", StructDetails { field_order: Some(&[0, 3, 1, 2, 4, 5, 6]) }),
("TaggedTemplateExpression", StructDetails { field_order: None }),
("JSXElement", StructDetails { field_order: None }),
("TSIndexSignatureName", StructDetails { field_order: None }),
("StaticExport", StructDetails { field_order: None }),
("TSParenthesizedType", StructDetails { field_order: None }),
("ObjectAssignmentTarget", StructDetails { field_order: None }),
("RegExpPattern", StructDetails { field_order: None }),
("JSXClosingElement", StructDetails { field_order: None }),
("BooleanLiteral", StructDetails { field_order: None }),
("TSArrayType", StructDetails { field_order: None }),
("TSConstructSignatureDeclaration", StructDetails { field_order: None }),
("TSExportAssignment", StructDetails { field_order: None }),
("TSFunctionType", StructDetails { field_order: None }),
("BindingRestElement", StructDetails { field_order: None }),
("SequenceExpression", StructDetails { field_order: None }),
("Class", StructDetails { field_order: Some(&[0, 9, 1, 2, 3, 4, 5, 6, 7, 10, 11, 8]) }),
("JSXIdentifier", StructDetails { field_order: None }),
("JSXOpeningFragment", StructDetails { field_order: None }),
("LabelIdentifier", StructDetails { field_order: None }),
("CatchClause", StructDetails { field_order: None }),
("TSClassImplements", StructDetails { field_order: None }),
("ErrorLabel", StructDetails { field_order: Some(&[1, 0]) }),
("TSInferType", StructDetails { field_order: None }),
("TSIndexSignature", StructDetails { field_order: None }),
("NonMaxU32", StructDetails { field_order: None }),
("NamedReference", StructDetails { field_order: None }),
("FormalParameter", StructDetails { field_order: None }),
("IgnoreGroup", StructDetails { field_order: None }),
("TSTypeAliasDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 4]) }),
("BlockStatement", StructDetails { field_order: None }),
("BindingProperty", StructDetails { field_order: None }),
("TSObjectKeyword", StructDetails { field_order: None }),
("TSTypeAssertion", StructDetails { field_order: None }),
("TSConditionalType", StructDetails { field_order: None }),
("RegExp", StructDetails { field_order: None }),
("BreakStatement", StructDetails { field_order: None }),
("Elision", StructDetails { field_order: None }),
("ComputedMemberExpression", StructDetails { field_order: None }),
("ObjectProperty", StructDetails { field_order: Some(&[0, 3, 1, 2, 4, 5, 6]) }),
("PrivateFieldExpression", StructDetails { field_order: None }),
("BigIntLiteral", StructDetails { field_order: None }),
("SpreadElement", StructDetails { field_order: None }),
("TSImportType", StructDetails { field_order: None }),
("JSXSpreadChild", StructDetails { field_order: None }),
("ObjectExpression", StructDetails { field_order: None }),
("JSXText", StructDetails { field_order: None }),
("TSNonNullExpression", StructDetails { field_order: None }),
("WhileStatement", StructDetails { field_order: None }),
(
"Function",
StructDetails { field_order: Some(&[0, 8, 1, 9, 10, 11, 2, 3, 4, 5, 6, 7, 12]) },
),
("Modifiers", StructDetails { field_order: None }),
("TSMappedType", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 6, 4]) }),
("ClassBody", StructDetails { field_order: None }),
("TSModuleDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 5, 3]) }),
("JSXClosingFragment", StructDetails { field_order: None }),
("ForOfStatement", StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4]) }),
("TSUnknownKeyword", StructDetails { field_order: None }),
("TSExternalModuleReference", StructDetails { field_order: None }),
("NumericLiteral", StructDetails { field_order: None }),
("Directive", StructDetails { field_order: None }),
("TSIntrinsicKeyword", StructDetails { field_order: None }),
("TSAsExpression", StructDetails { field_order: None }),
("RegExpFlags", StructDetails { field_order: None }),
("ImportSpecifier", StructDetails { field_order: None }),
("TSTypeReference", StructDetails { field_order: None }),
("VariableDeclarator", StructDetails { field_order: Some(&[0, 3, 1, 2, 4]) }),
("CommentNewlines", StructDetails { field_order: None }),
("TryStatement", StructDetails { field_order: None }),
("WithClause", StructDetails { field_order: None }),
("JSXMemberExpression", StructDetails { field_order: None }),
("BindingIdentifier", StructDetails { field_order: None }),
("SymbolId", StructDetails { field_order: None }),
("ClassStringDisjunction", StructDetails { field_order: Some(&[0, 2, 1]) }),
("LookAroundAssertion", StructDetails { field_order: Some(&[0, 2, 1]) }),
("IdentifierName", StructDetails { field_order: None }),
("ForStatement", StructDetails { field_order: None }),
("TSInterfaceBody", StructDetails { field_order: None }),
("TemplateElementValue", StructDetails { field_order: None }),
("TSTypeParameterInstantiation", StructDetails { field_order: None }),
("TSQualifiedName", StructDetails { field_order: None }),
("Comment", StructDetails { field_order: None }),
("Disjunction", StructDetails { field_order: None }),
("Span", StructDetails { field_order: None }),
("TSIndexedAccessType", StructDetails { field_order: None }),
("SwitchCase", StructDetails { field_order: None }),
("EcmaScriptModule", StructDetails { field_order: Some(&[4, 0, 1, 2, 3]) }),
("BinaryExpression", StructDetails { field_order: Some(&[0, 1, 3, 2]) }),
("TSCallSignatureDeclaration", StructDetails { field_order: None }),
("RegExpLiteral", StructDetails { field_order: None }),
("JSXNamespacedName", StructDetails { field_order: None }),
("CharacterClassRange", StructDetails { field_order: None }),
("TSEnumDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 5, 3]) }),
("ExportAllDeclaration", StructDetails { field_order: None }),
("Super", StructDetails { field_order: None }),
("AssignmentTargetPropertyProperty", StructDetails { field_order: None }),
("Decorator", StructDetails { field_order: None }),
("ParenthesizedExpression", StructDetails { field_order: None }),
("AssignmentTargetPropertyIdentifier", StructDetails { field_order: None }),
("BlockStatement", StructDetails { field_order: None }),
("TSTypeParameter", StructDetails { field_order: None }),
("LogicalExpression", StructDetails { field_order: Some(&[0, 1, 3, 2]) }),
("TSNeverKeyword", StructDetails { field_order: None }),
("NameSpan", StructDetails { field_order: Some(&[1, 0]) }),
("TSThisType", StructDetails { field_order: None }),
("TSVoidKeyword", StructDetails { field_order: None }),
("TSBooleanKeyword", StructDetails { field_order: None }),
("AssignmentExpression", StructDetails { field_order: Some(&[0, 3, 1, 2]) }),
("RawTransferData", StructDetails { field_order: None }),
("ImportDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 3, 5]) }),
("Character", StructDetails { field_order: Some(&[0, 2, 1]) }),
("AssignmentTargetRest", StructDetails { field_order: None }),
("BoundaryAssertion", StructDetails { field_order: None }),
("TSBigIntKeyword", StructDetails { field_order: None }),
("JSXAttribute", StructDetails { field_order: None }),
("UnaryExpression", StructDetails { field_order: Some(&[0, 2, 1]) }),
(
"MethodDefinition",
StructDetails { field_order: Some(&[0, 4, 1, 2, 3, 5, 6, 7, 8, 9, 10]) },
),
("ClassString", StructDetails { field_order: Some(&[0, 2, 1]) }),
("TemplateLiteral", StructDetails { field_order: None }),
("IdentifierReference", StructDetails { field_order: None }),
("ImportAttribute", StructDetails { field_order: None }),
("ArrayExpression", StructDetails { field_order: None }),
("EmptyStatement", StructDetails { field_order: None }),
("TSInterfaceHeritage", StructDetails { field_order: None }),
("TSTypeAnnotation", StructDetails { field_order: None }),
("ImportNamespaceSpecifier", StructDetails { field_order: None }),
("TSIntersectionType", StructDetails { field_order: None }),
("AwaitExpression", StructDetails { field_order: None }),
("BindingPattern", StructDetails { field_order: None }),
("CommentNewlines", StructDetails { field_order: None }),
("TSArrayType", StructDetails { field_order: None }),
("Super", StructDetails { field_order: None }),
("LogicalExpression", StructDetails { field_order: Some(&[0, 1, 3, 2]) }),
("RegExpFlags", StructDetails { field_order: None }),
("AssignmentExpression", StructDetails { field_order: Some(&[0, 3, 1, 2]) }),
("TSNeverKeyword", StructDetails { field_order: None }),
("TSRestType", StructDetails { field_order: None }),
("TemplateElementValue", StructDetails { field_order: None }),
("V8IntrinsicExpression", StructDetails { field_order: None }),
("YieldExpression", StructDetails { field_order: Some(&[0, 2, 1]) }),
("JSXEmptyExpression", StructDetails { field_order: None }),
("Character", StructDetails { field_order: Some(&[0, 2, 1]) }),
("TemplateElement", StructDetails { field_order: None }),
("MetaProperty", StructDetails { field_order: None }),
("TSTypeParameterDeclaration", StructDetails { field_order: None }),
("TSConstructorType", StructDetails { field_order: Some(&[0, 4, 1, 2, 3]) }),
("TSSymbolKeyword", StructDetails { field_order: None }),
("TSNamespaceExportDeclaration", StructDetails { field_order: None }),
("TSStringKeyword", StructDetails { field_order: None }),
("NullLiteral", StructDetails { field_order: None }),
("SwitchStatement", StructDetails { field_order: None }),
("FormalParameters", StructDetails { field_order: Some(&[0, 3, 1, 2]) }),
("BooleanLiteral", StructDetails { field_order: None }),
("StaticImport", StructDetails { field_order: None }),
("ObjectAssignmentTarget", StructDetails { field_order: None }),
("ScopeId", StructDetails { field_order: None }),
("IfStatement", StructDetails { field_order: None }),
("IdentifierName", StructDetails { field_order: None }),
("NonMaxU32", StructDetails { field_order: None }),
("StaticExport", StructDetails { field_order: None }),
("FormalParameter", StructDetails { field_order: None }),
("TSTypeOperator", StructDetails { field_order: Some(&[0, 2, 1]) }),
("Directive", StructDetails { field_order: None }),
("NewExpression", StructDetails { field_order: None }),
("JSXMemberExpression", StructDetails { field_order: None }),
("JSXExpressionContainer", StructDetails { field_order: None }),
("CallExpression", StructDetails { field_order: None }),
("NumericLiteral", StructDetails { field_order: None }),
("ArrayPattern", StructDetails { field_order: None }),
("PrivateInExpression", StructDetails { field_order: None }),
("LabeledStatement", StructDetails { field_order: None }),
("SourceType", StructDetails { field_order: None }),
("TSInterfaceDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 4, 6, 5]) }),
("ImportExpression", StructDetails { field_order: None }),
("TSModuleDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 5, 3]) }),
("VariableDeclarator", StructDetails { field_order: Some(&[0, 3, 1, 2, 4]) }),
("TSIndexedAccessType", StructDetails { field_order: None }),
(
"Function",
StructDetails { field_order: Some(&[0, 8, 1, 9, 10, 11, 2, 3, 4, 5, 6, 7, 12]) },
),
("Error", StructDetails { field_order: Some(&[4, 0, 1, 2, 3]) }),
("JSXFragment", StructDetails { field_order: None }),
("RegExpPattern", StructDetails { field_order: None }),
("JSXClosingFragment", StructDetails { field_order: None }),
("ExportEntry", StructDetails { field_order: Some(&[1, 0, 2, 3, 4, 5, 6]) }),
("WithClause", StructDetails { field_order: None }),
("WithStatement", StructDetails { field_order: None }),
("TSInterfaceHeritage", StructDetails { field_order: None }),
("DynamicImport", StructDetails { field_order: None }),
("UpdateExpression", StructDetails { field_order: Some(&[0, 2, 3, 1]) }),
("VariableDeclaration", StructDetails { field_order: Some(&[0, 2, 1, 3]) }),
("TSAnyKeyword", StructDetails { field_order: None }),
("UnaryExpression", StructDetails { field_order: Some(&[0, 2, 1]) }),
("TSInstantiationExpression", StructDetails { field_order: None }),
("TSModuleBlock", StructDetails { field_order: None }),
("DoWhileStatement", StructDetails { field_order: None }),
("TSOptionalType", StructDetails { field_order: None }),
("ImportDefaultSpecifier", StructDetails { field_order: None }),
("IndexedReference", StructDetails { field_order: None }),
("JSXIdentifier", StructDetails { field_order: None }),
("TSParenthesizedType", StructDetails { field_order: None }),
("TSIntrinsicKeyword", StructDetails { field_order: None }),
("TSUnionType", StructDetails { field_order: None }),
("ExportNamedDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 4]) }),
("DebuggerStatement", StructDetails { field_order: None }),
("TSInferType", StructDetails { field_order: None }),
("SwitchCase", StructDetails { field_order: None }),
("LookAroundAssertion", StructDetails { field_order: Some(&[0, 2, 1]) }),
("Decorator", StructDetails { field_order: None }),
("ClassString", StructDetails { field_order: Some(&[0, 2, 1]) }),
("LabelIdentifier", StructDetails { field_order: None }),
("TSIntersectionType", StructDetails { field_order: None }),
("AssignmentTargetRest", StructDetails { field_order: None }),
("JSXText", StructDetails { field_order: None }),
("RawTransferData", StructDetails { field_order: None }),
("TSNonNullExpression", StructDetails { field_order: None }),
("TSAsExpression", StructDetails { field_order: None }),
("BinaryExpression", StructDetails { field_order: Some(&[0, 1, 3, 2]) }),
("ForOfStatement", StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4]) }),
("TSUnknownKeyword", StructDetails { field_order: None }),
("TSNullKeyword", StructDetails { field_order: None }),
("Pattern", StructDetails { field_order: None }),
("ImportAttribute", StructDetails { field_order: None }),
("ParenthesizedExpression", StructDetails { field_order: None }),
("SequenceExpression", StructDetails { field_order: None }),
("AssignmentTargetPropertyProperty", StructDetails { field_order: None }),
("ArrayAssignmentTarget", StructDetails { field_order: None }),
("FormalParameters", StructDetails { field_order: Some(&[0, 3, 1, 2]) }),
("CharacterClassEscape", StructDetails { field_order: None }),
("TSSatisfiesExpression", StructDetails { field_order: None }),
("JSDocNonNullableType", StructDetails { field_order: None }),
("NameSpan", StructDetails { field_order: Some(&[1, 0]) }),
("TSExportAssignment", StructDetails { field_order: None }),
("TSExternalModuleReference", StructDetails { field_order: None }),
("TSTypeLiteral", StructDetails { field_order: None }),
("JSDocUnknownType", StructDetails { field_order: None }),
("TSThisType", StructDetails { field_order: None }),
("TSThisParameter", StructDetails { field_order: None }),
("TSTypeParameterInstantiation", StructDetails { field_order: None }),
("Disjunction", StructDetails { field_order: None }),
("ReferenceId", StructDetails { field_order: None }),
("TSCallSignatureDeclaration", StructDetails { field_order: None }),
("Quantifier", StructDetails { field_order: Some(&[0, 1, 2, 4, 3]) }),
("TSAnyKeyword", StructDetails { field_order: None }),
("TSOptionalType", StructDetails { field_order: None }),
("TSIndexSignatureName", StructDetails { field_order: None }),
("TSEnumDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 5, 3]) }),
("MetaProperty", StructDetails { field_order: None }),
("TSNumberKeyword", StructDetails { field_order: None }),
("TSIndexSignature", StructDetails { field_order: None }),
("CatchParameter", StructDetails { field_order: None }),
("CatchClause", StructDetails { field_order: None }),
("ReturnStatement", StructDetails { field_order: None }),
("ImportEntry", StructDetails { field_order: None }),
("SwitchStatement", StructDetails { field_order: None }),
("FunctionBody", StructDetails { field_order: None }),
("TSTypeParameter", StructDetails { field_order: None }),
("ObjectPattern", StructDetails { field_order: None }),
("ThrowStatement", StructDetails { field_order: None }),
("ExportSpecifier", StructDetails { field_order: None }),
("BoundaryAssertion", StructDetails { field_order: None }),
("TSTypeAliasDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 4]) }),
("BindingPattern", StructDetails { field_order: None }),
("ThisExpression", StructDetails { field_order: None }),
("RegExpLiteral", StructDetails { field_order: None }),
("JSDocNullableType", StructDetails { field_order: None }),
("SymbolId", StructDetails { field_order: None }),
("AssignmentTargetPropertyIdentifier", StructDetails { field_order: None }),
("ObjectExpression", StructDetails { field_order: None }),
("NamedReference", StructDetails { field_order: None }),
("ImportDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 3, 5]) }),
("ChainExpression", StructDetails { field_order: None }),
("JSXSpreadChild", StructDetails { field_order: None }),
("TSTypeQuery", StructDetails { field_order: None }),
("WhileStatement", StructDetails { field_order: None }),
("TemplateLiteral", StructDetails { field_order: None }),
("TSFunctionType", StructDetails { field_order: None }),
(
"PropertyDefinition",
StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13]) },
),
("RegExp", StructDetails { field_order: None }),
("JSXSpreadAttribute", StructDetails { field_order: None }),
("TSClassImplements", StructDetails { field_order: None }),
("StaticMemberExpression", StructDetails { field_order: None }),
("Class", StructDetails { field_order: Some(&[0, 9, 1, 2, 3, 4, 5, 6, 7, 10, 11, 8]) }),
("ClassStringDisjunction", StructDetails { field_order: Some(&[0, 2, 1]) }),
("PrivateIdentifier", StructDetails { field_order: None }),
("EmptyStatement", StructDetails { field_order: None }),
("AssignmentTargetWithDefault", StructDetails { field_order: None }),
("TSModuleBlock", StructDetails { field_order: None }),
("ForInStatement", StructDetails { field_order: None }),
("TSNamedTupleMember", StructDetails { field_order: None }),
("BindingRestElement", StructDetails { field_order: None }),
("Hashbang", StructDetails { field_order: None }),
("TSLiteralType", StructDetails { field_order: None }),
("TSBigIntKeyword", StructDetails { field_order: None }),
("TSConditionalType", StructDetails { field_order: None }),
("CapturingGroup", StructDetails { field_order: None }),
("ExportDefaultDeclaration", StructDetails { field_order: None }),
("Modifier", StructDetails { field_order: None }),
("UnicodePropertyEscape", StructDetails { field_order: Some(&[0, 3, 4, 1, 2]) }),
("TSMappedType", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 6, 4]) }),
("TSSymbolKeyword", StructDetails { field_order: None }),
("VariableDeclaration", StructDetails { field_order: Some(&[0, 2, 1, 3]) }),
("Program", StructDetails { field_order: Some(&[0, 7, 1, 2, 3, 4, 5, 6]) }),
("TSInterfaceBody", StructDetails { field_order: None }),
("TryStatement", StructDetails { field_order: None }),
("AwaitExpression", StructDetails { field_order: None }),
("TSPropertySignature", StructDetails { field_order: Some(&[0, 3, 4, 5, 1, 2]) }),
("TSImportEqualsDeclaration", StructDetails { field_order: None }),
("ImportNamespaceSpecifier", StructDetails { field_order: None }),
("TSEnumMember", StructDetails { field_order: None }),
("IdentifierReference", StructDetails { field_order: None }),
("TSUndefinedKeyword", StructDetails { field_order: None }),
("TSMethodSignature", StructDetails { field_order: Some(&[0, 1, 7, 8, 9, 2, 3, 4, 5, 6]) }),
("ExpressionStatement", StructDetails { field_order: None }),
("SpreadElement", StructDetails { field_order: None }),
("TSVoidKeyword", StructDetails { field_order: None }),
("TSTemplateLiteralType", StructDetails { field_order: None }),
("Modifiers", StructDetails { field_order: None }),
("BreakStatement", StructDetails { field_order: None }),
("JSXOpeningFragment", StructDetails { field_order: None }),
("ClassBody", StructDetails { field_order: None }),
("ContinueStatement", StructDetails { field_order: None }),
("JSXOpeningElement", StructDetails { field_order: None }),
("TSEnumBody", StructDetails { field_order: None }),
("Dot", StructDetails { field_order: None }),
("ImportSpecifier", StructDetails { field_order: None }),
("BigIntLiteral", StructDetails { field_order: None }),
("ExportAllDeclaration", StructDetails { field_order: None }),
("EcmaScriptModule", StructDetails { field_order: Some(&[4, 0, 1, 2, 3]) }),
("TSInstantiationExpression", StructDetails { field_order: None }),
("JSXAttribute", StructDetails { field_order: None }),
("TSTypePredicate", StructDetails { field_order: Some(&[0, 1, 3, 2]) }),
("ErrorLabel", StructDetails { field_order: Some(&[1, 0]) }),
("TSNamespaceExportDeclaration", StructDetails { field_order: None }),
("TSImportType", StructDetails { field_order: None }),
("JSXElement", StructDetails { field_order: None }),
("IgnoreGroup", StructDetails { field_order: None }),
("Elision", StructDetails { field_order: None }),
("ComputedMemberExpression", StructDetails { field_order: None }),
("TSTypeAnnotation", StructDetails { field_order: None }),
("CharacterClassRange", StructDetails { field_order: None }),
("RawTransferMetadata", StructDetails { field_order: Some(&[1, 2, 0]) }),
("CommentNodeId", StructDetails { field_order: None }),
("StaticBlock", StructDetails { field_order: None }),
(
"ArrowFunctionExpression",
StructDetails { field_order: Some(&[0, 6, 7, 1, 2, 3, 4, 5, 8]) },
),
],
};
+2 -2
View File
@@ -3,8 +3,8 @@
const BUFFER_SIZE = 2147483648,
BUFFER_ALIGN = 4294967296,
DATA_POINTER_POS_32 = 536870908,
IS_TS_FLAG_POS = 2147483636,
DATA_POINTER_POS_32 = 536870910,
IS_TS_FLAG_POS = 2147483644,
PROGRAM_OFFSET = 0;
module.exports = {
+1 -1
View File
@@ -20,7 +20,7 @@ function deserialize(buffer, sourceTextInput, sourceLenInput) {
sourceLen = sourceLenInput;
sourceIsAscii = sourceText.length === sourceLen;
const data = deserializeRawTransferData(uint32[536870908]);
const data = deserializeRawTransferData(uint32[536870910]);
uint8 =
uint32 =
+1 -1
View File
@@ -20,7 +20,7 @@ function deserialize(buffer, sourceTextInput, sourceLenInput) {
sourceLen = sourceLenInput;
sourceIsAscii = sourceText.length === sourceLen;
const data = deserializeRawTransferData(uint32[536870908]);
const data = deserializeRawTransferData(uint32[536870910]);
uint8 =
uint32 =
@@ -17,6 +17,13 @@ const _: () = {
assert!(offset_of!(RawTransferData, module) == 152);
assert!(offset_of!(RawTransferData, errors) == 256);
// Padding: 3 bytes
assert!(size_of::<RawTransferMetadata>() == 16);
assert!(align_of::<RawTransferMetadata>() == 8);
assert!(offset_of!(RawTransferMetadata, data_offset) == 8);
assert!(offset_of!(RawTransferMetadata, is_ts) == 12);
assert!(offset_of!(RawTransferMetadata, _padding) == 0);
// Padding: 7 bytes
assert!(size_of::<Error>() == 80);
assert!(align_of::<Error>() == 8);
@@ -68,6 +75,13 @@ const _: () = {
assert!(offset_of!(RawTransferData, module) == 104);
assert!(offset_of!(RawTransferData, errors) == 172);
// Padding: 3 bytes
assert!(size_of::<RawTransferMetadata>() == 16);
assert!(align_of::<RawTransferMetadata>() == 8);
assert!(offset_of!(RawTransferMetadata, data_offset) == 8);
assert!(offset_of!(RawTransferMetadata, is_ts) == 12);
assert!(offset_of!(RawTransferMetadata, _padding) == 0);
// Padding: 3 bytes
assert!(size_of::<Error>() == 44);
assert!(align_of::<Error>() == 4);
+9 -8
View File
@@ -20,7 +20,7 @@ use oxc_napi::get_source_type;
use crate::{
AstType, ParserOptions, get_ast_type, parse,
raw_transfer_constants::{BUFFER_ALIGN, BUFFER_SIZE},
raw_transfer_types::{EcmaScriptModule, Error, RawTransferData},
raw_transfer_types::{EcmaScriptModule, Error, RawTransferData, RawTransferMetadata},
};
// For raw transfer, use a buffer 2 GiB in size, with 4 GiB alignment.
@@ -179,10 +179,10 @@ unsafe fn parse_raw_impl(
assert!(is_multiple_of(buffer_ptr as usize, BUFFER_ALIGN));
// Get offsets and size of data region to be managed by arena allocator.
// Leave space for source before it, and 16 bytes for metadata after it.
// Leave space for source before it, and space for metadata after it.
// Metadata actually only takes 5 bytes, but round everything up to multiple of 16,
// as `bumpalo` requires that alignment.
const METADATA_SIZE: usize = 16;
const METADATA_SIZE: usize = size_of::<RawTransferMetadata>();
const {
assert!(METADATA_SIZE >= BUMP_ALIGN);
assert!(is_multiple_of(METADATA_SIZE, BUMP_ALIGN));
@@ -271,15 +271,16 @@ unsafe fn parse_raw_impl(
ptr::from_ref(data).cast::<u8>()
};
// Write offset of `RawTransferData` and `bool` representing AST type into end of buffer
// Write metadata into end of buffer
#[allow(clippy::cast_possible_truncation)]
let data_offset = data_ptr as u32;
let metadata = RawTransferMetadata::new(data_ptr as u32, ast_type == AstType::TypeScript);
const METADATA_OFFSET: usize = BUFFER_SIZE - METADATA_SIZE;
// SAFETY: `METADATA_OFFSET` is less than length of `buffer`
const _: () = assert!(is_multiple_of(METADATA_OFFSET, BUMP_ALIGN));
// SAFETY: `METADATA_OFFSET` is less than length of `buffer`.
// `METADATA_OFFSET` is aligned on 16.
#[expect(clippy::cast_ptr_alignment)]
unsafe {
buffer_ptr.add(METADATA_OFFSET).cast::<u32>().write(data_offset);
buffer_ptr.add(METADATA_OFFSET + 4).cast::<bool>().write(ast_type == AstType::TypeScript);
buffer_ptr.add(METADATA_OFFSET).cast::<RawTransferMetadata>().write(metadata);
}
}
+17
View File
@@ -25,6 +25,23 @@ pub struct RawTransferData<'a> {
pub errors: Vec<'a, Error<'a>>,
}
/// Metadata written to end of buffer.
#[ast]
pub struct RawTransferMetadata {
/// Offset of `RawTransferData` within buffer.
pub data_offset: u32,
/// `true` if AST is TypeScript.
pub is_ts: bool,
/// Padding to pad struct to size 16.
pub(crate) _padding: u64,
}
impl RawTransferMetadata {
pub fn new(data_offset: u32, is_ts: bool) -> Self {
Self { data_offset, is_ts, _padding: 0 }
}
}
// Errors.
//
// These types and the `From` / `FromIn` impls mirror the implementation in `types.rs`
@@ -32,10 +32,6 @@ const BUFFER_SIZE: u32 = 1 << 31; // 2 GiB
const _: () = assert!(BUFFER_SIZE % 16 == 0);
/// Alignment of raw transfer buffer.
const BUFFER_ALIGN: u64 = 1 << 32; // 4 GiB
/// Size of metadata written to end of buffer.
const METADATA_SIZE: u32 = 16;
/// Offset of flag for whether AST is TypeScript or not, relative to start of metadata.
const IS_TS_FLAG_OFFSET: u32 = 4;
// Offsets of `Vec`'s fields.
// `Vec` is `#[repr(transparent)]` and `RawVec` is `#[repr(C)]`, so these offsets are fixed.
@@ -1020,9 +1016,11 @@ fn generate_constants(consts: Constants) -> (String, TokenStream) {
/// Calculate constants.
fn get_constants(schema: &Schema) -> Constants {
let metadata_pos = BUFFER_SIZE - METADATA_SIZE;
let data_pointer_pos_32 = metadata_pos / 4;
let is_ts_pos = metadata_pos + IS_TS_FLAG_OFFSET;
let metadata_struct = schema.type_by_name("RawTransferMetadata").as_struct().unwrap();
let metadata_pos = BUFFER_SIZE - metadata_struct.layout_64().size;
let data_pointer_pos = metadata_pos + metadata_struct.field_by_name("data_offset").offset_64();
let data_pointer_pos_32 = data_pointer_pos / 4;
let is_ts_pos = metadata_pos + metadata_struct.field_by_name("is_ts").offset_64();
let program_offset = schema
.type_by_name("RawTransferData")