diff options
author | davidot <davidot@serenityos.org> | 2022-09-01 22:55:02 +0200 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-09-02 02:07:37 +0100 |
commit | 462c6df24b8b86867ccd9297f83fc4cf9662b71f (patch) | |
tree | 9b781f4c17a814e6a47baa7a904b384307b8691f /Userland/Libraries | |
parent | 3b56043612b1b161612b7ecc9448b45ae0949522 (diff) | |
download | serenity-462c6df24b8b86867ccd9297f83fc4cf9662b71f.zip |
LibJS: Only check for duplicate exports if they have a name
Together with removing an incorrect VERIFY this allows multiple star
imports in a single module.
Diffstat (limited to 'Userland/Libraries')
4 files changed, 9 insertions, 3 deletions
diff --git a/Userland/Libraries/LibJS/AST.cpp b/Userland/Libraries/LibJS/AST.cpp index 461281f1b1..183fd8d2a7 100644 --- a/Userland/Libraries/LibJS/AST.cpp +++ b/Userland/Libraries/LibJS/AST.cpp @@ -4498,7 +4498,7 @@ bool ExportStatement::has_export(FlyString const& export_name) const { return any_of(m_entries.begin(), m_entries.end(), [&](auto& entry) { // Make sure that empty exported names does not overlap with anything - if (entry.kind == ExportEntry::Kind::EmptyNamedExport) + if (entry.kind != ExportEntry::Kind::NamedExport) return false; return entry.export_name == export_name; }); diff --git a/Userland/Libraries/LibJS/SourceTextModule.cpp b/Userland/Libraries/LibJS/SourceTextModule.cpp index b86340312a..bac774498c 100644 --- a/Userland/Libraries/LibJS/SourceTextModule.cpp +++ b/Userland/Libraries/LibJS/SourceTextModule.cpp @@ -202,8 +202,6 @@ Result<NonnullRefPtr<SourceTextModule>, Vector<Parser::Error>> SourceTextModule: // 2. If ie.[[ImportName]] is namespace-object, then if (import_entry.is_namespace) { // a. NOTE: This is a re-export of an imported module namespace object. - VERIFY(export_entry.is_module_request() && export_entry.kind != ExportStatement::ExportEntry::Kind::NamedExport); - // b. Append ee to localExportEntries. local_export_entries.empend(export_entry); } diff --git a/Userland/Libraries/LibJS/Tests/modules/basic-modules.js b/Userland/Libraries/LibJS/Tests/modules/basic-modules.js index a9bd153b2c..2dad8a834b 100644 --- a/Userland/Libraries/LibJS/Tests/modules/basic-modules.js +++ b/Userland/Libraries/LibJS/Tests/modules/basic-modules.js @@ -186,6 +186,10 @@ describe("in- and exports", () => { test("namespace has expected ordering", () => { expectModulePassed("./namespace-order.mjs"); }); + + test("can have multiple star imports even from the same file", () => { + expectModulePassed("./multiple-star-imports.mjs"); + }); }); describe("loops", () => { diff --git a/Userland/Libraries/LibJS/Tests/modules/multiple-star-imports.mjs b/Userland/Libraries/LibJS/Tests/modules/multiple-star-imports.mjs new file mode 100644 index 0000000000..3c04eeb88f --- /dev/null +++ b/Userland/Libraries/LibJS/Tests/modules/multiple-star-imports.mjs @@ -0,0 +1,4 @@ +import * as ns1 from "./default-and-star-export.mjs"; +import * as ns2 from "./default-and-star-export.mjs"; + +export const passed = ns1 === ns2; |