mirror of
https://github.com/oxc-project/oxc.git
synced 2026-11-04 10:29:58 +00:00
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:
1 parent
39ef911147
commit
5fba91cfb1
8 files changed
+315
-284
No files matched your search
@@ -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]) },
|
||||
),
|
||||
],
|
||||
};
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in new issue
Block a user