diff --git a/crates/oxc_ast_macros/src/generated/structs.rs b/crates/oxc_ast_macros/src/generated/structs.rs index 31e31363ed175..8b29520261ba5 100644 --- a/crates/oxc_ast_macros/src/generated/structs.rs +++ b/crates/oxc_ast_macros/src/generated/structs.rs @@ -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 }), + ("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 }), + ("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 }), ( - "PropertyDefinition", - StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13]) }, + "AccessorProperty", + StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4, 6, 7, 8, 9, 10]) }, ), - ("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 }), + ("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 }), + ("BlockStatement", 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 }), + ("TSObjectKeyword", StructDetails { field_order: None }), + ("TSTypeAssertion", 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 }), - ("TSTupleType", StructDetails { field_order: None }), - ("ConditionalExpression", StructDetails { field_order: None }), - ("Program", StructDetails { field_order: Some(&[0, 7, 1, 2, 3, 4, 5, 6]) }), + ("Comment", StructDetails { field_order: None }), + ("UnaryExpression", StructDetails { field_order: Some(&[0, 2, 1]) }), ( - "AccessorProperty", - StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4, 6, 7, 8, 9, 10]) }, + "MethodDefinition", + StructDetails { field_order: Some(&[0, 4, 1, 2, 3, 5, 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 }), + ("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 }), - ("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 }), + ("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 }), + ("BooleanLiteral", StructDetails { field_order: None }), ("StaticImport", StructDetails { field_order: None }), - ("TSRestType", StructDetails { field_order: None }), - ("Alternative", StructDetails { field_order: None }), - ("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 }), + ("ScopeId", StructDetails { field_order: None }), + ("IfStatement", StructDetails { field_order: None }), + ("IdentifierName", StructDetails { field_order: None }), ("NonMaxU32", StructDetails { field_order: None }), - ("NamedReference", StructDetails { field_order: None }), + ("StaticExport", 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]) }), - ("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 }), + ("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]) }, ), - ("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]) }), + ("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]) }), + ("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 }), - ("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 }), + ("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 }), - ("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]) }), + ("ReferenceId", StructDetails { field_order: None }), ("TSCallSignatureDeclaration", StructDetails { field_order: None }), - ("RegExpLiteral", StructDetails { field_order: None }), - ("JSXNamespacedName", StructDetails { field_order: None }), - ("CharacterClassRange", 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]) }), - ("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 }), + ("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 }), - ("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 }), + ("ObjectPattern", StructDetails { field_order: None }), + ("ThrowStatement", StructDetails { field_order: None }), + ("ExportSpecifier", StructDetails { field_order: None }), ("BoundaryAssertion", StructDetails { field_order: None }), - ("TSBigIntKeyword", StructDetails { field_order: None }), - ("JSXAttribute", 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 }), ( - "MethodDefinition", - StructDetails { field_order: Some(&[0, 4, 1, 2, 3, 5, 6, 7, 8, 9, 10]) }, + "PropertyDefinition", + StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13]) }, ), - ("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 }), + ("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 }), - ("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 }), - ("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]) }), + ("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 }), - ("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]) }), - ("WithStatement", 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 }), - ("ExportNamedDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 4]) }), + ("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]) }, + ), ], }; diff --git a/napi/parser/generated/constants.js b/napi/parser/generated/constants.js index 12e86055f6c63..a52de032e2bf3 100644 --- a/napi/parser/generated/constants.js +++ b/napi/parser/generated/constants.js @@ -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 = { diff --git a/napi/parser/generated/deserialize/js.js b/napi/parser/generated/deserialize/js.js index 3336bfa449517..3cb195138ef9b 100644 --- a/napi/parser/generated/deserialize/js.js +++ b/napi/parser/generated/deserialize/js.js @@ -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 = diff --git a/napi/parser/generated/deserialize/ts.js b/napi/parser/generated/deserialize/ts.js index e8ed3a0a0294a..96e604ffb77e1 100644 --- a/napi/parser/generated/deserialize/ts.js +++ b/napi/parser/generated/deserialize/ts.js @@ -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 = diff --git a/napi/parser/src/generated/assert_layouts.rs b/napi/parser/src/generated/assert_layouts.rs index 09ef615c73394..5a11c6433f120 100644 --- a/napi/parser/src/generated/assert_layouts.rs +++ b/napi/parser/src/generated/assert_layouts.rs @@ -17,6 +17,13 @@ const _: () = { assert!(offset_of!(RawTransferData, module) == 152); assert!(offset_of!(RawTransferData, errors) == 256); + // Padding: 3 bytes + assert!(size_of::() == 16); + assert!(align_of::() == 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::() == 80); assert!(align_of::() == 8); @@ -68,6 +75,13 @@ const _: () = { assert!(offset_of!(RawTransferData, module) == 104); assert!(offset_of!(RawTransferData, errors) == 172); + // Padding: 3 bytes + assert!(size_of::() == 16); + assert!(align_of::() == 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::() == 44); assert!(align_of::() == 4); diff --git a/napi/parser/src/raw_transfer.rs b/napi/parser/src/raw_transfer.rs index b5d40aae36a46..df4d96f513653 100644 --- a/napi/parser/src/raw_transfer.rs +++ b/napi/parser/src/raw_transfer.rs @@ -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::(); 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::() }; - // 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::().write(data_offset); - buffer_ptr.add(METADATA_OFFSET + 4).cast::().write(ast_type == AstType::TypeScript); + buffer_ptr.add(METADATA_OFFSET).cast::().write(metadata); } } diff --git a/napi/parser/src/raw_transfer_types.rs b/napi/parser/src/raw_transfer_types.rs index 0dbbee63e6c82..50a88a9b8ad72 100644 --- a/napi/parser/src/raw_transfer_types.rs +++ b/napi/parser/src/raw_transfer_types.rs @@ -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` diff --git a/tasks/ast_tools/src/generators/raw_transfer.rs b/tasks/ast_tools/src/generators/raw_transfer.rs index f7ce979ca656a..55f1d0e2f5bdf 100644 --- a/tasks/ast_tools/src/generators/raw_transfer.rs +++ b/tasks/ast_tools/src/generators/raw_transfer.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")