Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/actions/clone-submodules/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,4 @@ runs:
show-progress: false
repository: oxc-project/acorn-test262
path: tasks/coverage/acorn-test262
ref: ed8b455fd9775089444d53c09ea18fedf220da8b # Latest main at 21/2/24
ref: 96faefa7644f16bb163484ee50fa13d6ecff7e72 # Latest main at 4/3/25
1 change: 0 additions & 1 deletion crates/oxc_ast/src/ast/js.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2467,7 +2467,6 @@ pub enum ImportAttributeKey<'a> {
#[ast(visit)]
#[derive(Debug)]
#[generate_derive(CloneIn, GetSpan, GetSpanMut, ContentEq, ESTree)]
#[estree(via = ExportNamedDeclarationConverter)]
pub struct ExportNamedDeclaration<'a> {
pub span: Span,
pub declaration: Option<Declaration<'a>>,
Expand Down
14 changes: 13 additions & 1 deletion crates/oxc_ast/src/generated/derive_estree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1726,7 +1726,19 @@ impl ESTree for ImportAttributeKey<'_> {

impl ESTree for ExportNamedDeclaration<'_> {
fn serialize<S: Serializer>(&self, serializer: S) {
crate::serialize::ExportNamedDeclarationConverter(self).serialize(serializer)
let mut state = serializer.serialize_struct();
state.serialize_field("type", &JsonSafeString("ExportNamedDeclaration"));
state.serialize_field("start", &self.span.start);
state.serialize_field("end", &self.span.end);
state.serialize_field("declaration", &self.declaration);
state.serialize_field("specifiers", &self.specifiers);
state.serialize_field("source", &self.source);
state.serialize_ts_field("exportKind", &self.export_kind);
state.serialize_field(
"attributes",
&crate::serialize::ExportNamedDeclarationWithClause(self),
);
state.end();
}
}

Expand Down
48 changes: 0 additions & 48 deletions crates/oxc_ast/src/serialize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -548,54 +548,6 @@ impl ESTree for ImportExpressionArguments<'_> {
}
}

/// Serialize `ExportNamedDeclaration`.
///
/// Omit `with_clause` field (which is renamed to `attributes` in ESTree)
/// unless `source` field is `Some`.
#[ast_meta]
#[estree(raw_deser = "
const start = DESER[u32](POS_OFFSET.span.start),
end = DESER[u32](POS_OFFSET.span.end),
declaration = DESER[Option<Declaration>](POS_OFFSET.declaration),
specifiers = DESER[Vec<ExportSpecifier>](POS_OFFSET.specifiers),
source = DESER[Option<StringLiteral>](POS_OFFSET.source)/* IF_TS */,
exportKind = DESER[ImportOrExportKind](POS_OFFSET.export_kind) /* END_IF_TS */;

if (source !== null) {
const withClause = deserializeOptionBoxWithClause(POS_OFFSET.with_clause);
return {
type: 'ExportNamedDeclaration',
start, end, declaration, specifiers, source,
/* IF_TS */ exportKind, /* END_IF_TS */
attributes: withClause === null ? [] : withClause.withEntries
};
}

{type: 'ExportNamedDeclaration', start, end, declaration, specifiers, source /* IF_TS */ , exportKind /* END_IF_TS */ }
")]
pub struct ExportNamedDeclarationConverter<'a, 'b>(pub &'b ExportNamedDeclaration<'a>);

impl ESTree for ExportNamedDeclarationConverter<'_, '_> {
fn serialize<S: Serializer>(&self, serializer: S) {
let decl = self.0;
let mut state = serializer.serialize_struct();
state.serialize_field("type", &JsonSafeString("ExportNamedDeclaration"));
state.serialize_field("start", &decl.span.start);
state.serialize_field("end", &decl.span.end);
state.serialize_field("declaration", &decl.declaration);
state.serialize_field("specifiers", &decl.specifiers);
state.serialize_field("source", &decl.source);
state.serialize_ts_field("exportKind", &decl.export_kind);
if decl.source.is_some() {
state.serialize_field(
"attributes",
&crate::serialize::ExportNamedDeclarationWithClause(decl),
);
}
state.end();
}
}

// Serializers for `with_clause` field of `ImportDeclaration`, `ExportNamedDeclaration`,
// and `ExportAllDeclaration` (which are renamed to `attributes` in ESTree AST).
//
Expand Down
2 changes: 1 addition & 1 deletion justfile
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ submodules:
just clone-submodule tasks/coverage/babel https://github.com/babel/babel.git 578ac4df1c8a05f01350553950dbfbbeaac013c2
just clone-submodule tasks/coverage/typescript https://github.com/microsoft/TypeScript.git 15392346d05045742e653eab5c87538ff2a3c863
just clone-submodule tasks/prettier_conformance/prettier https://github.com/prettier/prettier.git 7584432401a47a26943dd7a9ca9a8e032ead7285
just clone-submodule tasks/coverage/acorn-test262 https://github.com/oxc-project/acorn-test262 ed8b455fd9775089444d53c09ea18fedf220da8b
just clone-submodule tasks/coverage/acorn-test262 https://github.com/oxc-project/acorn-test262 96faefa7644f16bb163484ee50fa13d6ecff7e72
just update-transformer-fixtures

# Install git pre-commit to format files
Expand Down
30 changes: 10 additions & 20 deletions napi/parser/deserialize-js.js
Original file line number Diff line number Diff line change
Expand Up @@ -967,26 +967,16 @@ function deserializeImportAttribute(pos) {
}

function deserializeExportNamedDeclaration(pos) {
const start = deserializeU32(pos),
end = deserializeU32(pos + 4),
declaration = deserializeOptionDeclaration(pos + 8),
specifiers = deserializeVecExportSpecifier(pos + 24),
source = deserializeOptionStringLiteral(pos + 56);

if (source !== null) {
const withClause = deserializeOptionBoxWithClause(pos + 104);
return {
type: 'ExportNamedDeclaration',
start,
end,
declaration,
specifiers,
source,
attributes: withClause === null ? [] : withClause.withEntries,
};
}

return { type: 'ExportNamedDeclaration', start, end, declaration, specifiers, source };
const withClause = deserializeOptionBoxWithClause(pos + 104);
return {
type: 'ExportNamedDeclaration',
start: deserializeU32(pos),
end: deserializeU32(pos + 4),
declaration: deserializeOptionDeclaration(pos + 8),
specifiers: deserializeVecExportSpecifier(pos + 24),
source: deserializeOptionStringLiteral(pos + 56),
attributes: withClause === null ? [] : withClause.withEntries,
};
}

function deserializeExportDefaultDeclaration(pos) {
Expand Down
33 changes: 11 additions & 22 deletions napi/parser/deserialize-ts.js
Original file line number Diff line number Diff line change
Expand Up @@ -1016,28 +1016,17 @@ function deserializeImportAttribute(pos) {
}

function deserializeExportNamedDeclaration(pos) {
const start = deserializeU32(pos),
end = deserializeU32(pos + 4),
declaration = deserializeOptionDeclaration(pos + 8),
specifiers = deserializeVecExportSpecifier(pos + 24),
source = deserializeOptionStringLiteral(pos + 56),
exportKind = deserializeImportOrExportKind(pos + 96);

if (source !== null) {
const withClause = deserializeOptionBoxWithClause(pos + 104);
return {
type: 'ExportNamedDeclaration',
start,
end,
declaration,
specifiers,
source,
exportKind,
attributes: withClause === null ? [] : withClause.withEntries,
};
}

return { type: 'ExportNamedDeclaration', start, end, declaration, specifiers, source, exportKind };
const withClause = deserializeOptionBoxWithClause(pos + 104);
return {
type: 'ExportNamedDeclaration',
start: deserializeU32(pos),
end: deserializeU32(pos + 4),
declaration: deserializeOptionDeclaration(pos + 8),
specifiers: deserializeVecExportSpecifier(pos + 24),
source: deserializeOptionStringLiteral(pos + 56),
exportKind: deserializeImportOrExportKind(pos + 96),
attributes: withClause === null ? [] : withClause.withEntries,
};
}

function deserializeExportDefaultDeclaration(pos) {
Expand Down
Loading