diff --git a/src/Fetch.js b/src/Fetch.js index 52619b454e936..40897bd7b996d 100644 --- a/src/Fetch.js +++ b/src/Fetch.js @@ -10,8 +10,7 @@ * This implementation is specifically tailored to only handle 'arraybuffer' * responses. */ -// TODO Use a regular class name when #5840 is fixed. -var FetchXHR = class { +class FetchXHR { // --- Public XHR Properties --- // Event Handlers diff --git a/src/jsifier.mjs b/src/jsifier.mjs index 0d9f9aeddffa6..c28d81aae16f2 100644 --- a/src/jsifier.mjs +++ b/src/jsifier.mjs @@ -717,7 +717,7 @@ function(${args}) { contentText = `var ${mangled} = ` + contentText + ';'; } else if (contentText.startsWith('class ')) { // Handle class declarations (which also have typeof == 'function'.) - contentText = contentText.replace(/^class /, `class ${mangled} `); + contentText = contentText.replace(/^class(?:\s+(?!extends\b)[^{\s]+)?/, `class ${mangled}`); } else { // Handle regular (non-arrow) functions contentText = contentText.replace(/function(?:\s+([^(]+))?\s*\(/, `function ${mangled}(`); diff --git a/test/test_jslib.py b/test/test_jslib.py index a2d8b063c9bb8..266408a824eb3 100644 --- a/test/test_jslib.py +++ b/test/test_jslib.py @@ -719,3 +719,32 @@ def test_jslib_version_check(self): #endif ''') self.assert_fail([EMCC, '--js-library=libfoo.js'], 'error: libfoo.js:3: #error "library does not support emscripten > 3.0.0"') + + def test_jslib_named_class(self): + create_file('lib.js', r''' + class ParentClass {} + addToLibrary({ + $ParentClass: ParentClass, + $MyClass__deps: ['$ParentClass'], + $MyClass: class extends ParentClass { + constructor() { super(); this.x = 42; } + }, + log_class__deps: ['$MyClass'], + log_class: () => { + var i = new MyClass(); + out('MyClass: ' + i.x); + } + }); + ''') + create_file('src.c', r''' + #include + #include + + extern void log_class(); + + int main() { + log_class(); + return 0; + } + ''') + self.do_runf('src.c', 'MyClass: 42', cflags=['--js-library', 'lib.js'])