From c8c3d60ae82b2042be60ffd33b25e9185a1bdbcc Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Wed, 11 Sep 2024 10:01:59 +0200 Subject: [PATCH 1/6] [NODERAWFS] Move filesystem wrapping to `__postset` Resolves: #22553. --- src/library_noderawfs.js | 39 ++++++++++++++++----------------------- test/test_other.py | 10 ++++++++++ 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/library_noderawfs.js b/src/library_noderawfs.js index a1df4d1246c5a..b356d4eaf181c 100644 --- a/src/library_noderawfs.js +++ b/src/library_noderawfs.js @@ -12,33 +12,26 @@ addToLibrary({ } // Use this to reference our in-memory filesystem var VFS = Object.assign({}, FS); - // Override the init function with our own - FS.init = NODERAWFS.init;`, - $NODERAWFS: { - init() { - var _wrapNodeError = function(func) { - return function(...args) { - try { - return func(...args) - } catch (e) { - if (e.code) { - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - throw e; + var _wrapNodeError = function(func) { + return function(...args) { + try { + return func(...args) + } catch (e) { + if (e.code) { + throw new FS.ErrnoError(ERRNO_CODES[e.code]); } + throw e; } - }; - - // Wrap the whole in-memory filesystem API with - // our Node.js based functions - for (var _key in NODERAWFS) { - /** @suppress {partialAlias} */ - FS[_key] = _wrapNodeError(NODERAWFS[_key]); } + }; - // Setup the stdin, stdout and stderr devices - FS.createStandardStreams(); - }, + // Wrap the whole in-memory filesystem API with + // our Node.js based functions + for (var _key in NODERAWFS) { + /** @suppress {partialAlias} */ + FS[_key] = _wrapNodeError(NODERAWFS[_key]); + }`, + $NODERAWFS: { lookup(parent, name) { #if ASSERTIONS assert(parent) diff --git a/test/test_other.py b/test/test_other.py index 3214b22455fe0..922bf91db48bc 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -9730,6 +9730,16 @@ def test_noderawfs_access_abspath(self): self.run_process([EMCC, 'access.c', '-sNODERAWFS']) self.run_js('a.out.js', args=[os.path.abspath('foo')]) + def test_noderawfs_readfile_prerun(self): + create_file('foo', 'bar') + create_file('main.c', r''' + int main() { return 0; } + ''') + create_file('pre.js', f''' + Module.preRun = () => console.log(FS.readFile('{os.path.abspath('foo')}', {{ encoding: 'utf8' }})); + ''') + self.do_runf('main.c', 'bar\n', emcc_args=['--pre-js', 'pre.js', '-sNODERAWFS', '-sFORCE_FILESYSTEM']) + @disabled('https://github.com/nodejs/node/issues/18265') def test_node_code_caching(self): self.run_process([EMCC, test_file('hello_world.c'), From a1ae790cc2d15926154a810d52516f8cd286c6de Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Wed, 11 Sep 2024 10:30:57 +0200 Subject: [PATCH 2/6] Reorder --- src/library_noderawfs.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/library_noderawfs.js b/src/library_noderawfs.js index b356d4eaf181c..639e009dfd7ff 100644 --- a/src/library_noderawfs.js +++ b/src/library_noderawfs.js @@ -10,8 +10,6 @@ addToLibrary({ if (!ENVIRONMENT_IS_NODE) { throw new Error("NODERAWFS is currently only supported on Node.js environment.") } - // Use this to reference our in-memory filesystem - var VFS = Object.assign({}, FS); var _wrapNodeError = function(func) { return function(...args) { try { @@ -24,11 +22,12 @@ addToLibrary({ } } }; - + // Use this to reference our in-memory filesystem + /** @suppress {partialAlias} */ + var VFS = Object.assign({}, FS); // Wrap the whole in-memory filesystem API with // our Node.js based functions for (var _key in NODERAWFS) { - /** @suppress {partialAlias} */ FS[_key] = _wrapNodeError(NODERAWFS[_key]); }`, $NODERAWFS: { From b5801e362949a5c5f5e16c7506942819c435d92e Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Wed, 11 Sep 2024 19:28:44 +0200 Subject: [PATCH 3/6] Incorporate feedback --- test/test_other.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/test_other.py b/test/test_other.py index 922bf91db48bc..c27927ac17293 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -9732,13 +9732,10 @@ def test_noderawfs_access_abspath(self): def test_noderawfs_readfile_prerun(self): create_file('foo', 'bar') - create_file('main.c', r''' - int main() { return 0; } - ''') create_file('pre.js', f''' Module.preRun = () => console.log(FS.readFile('{os.path.abspath('foo')}', {{ encoding: 'utf8' }})); ''') - self.do_runf('main.c', 'bar\n', emcc_args=['--pre-js', 'pre.js', '-sNODERAWFS', '-sFORCE_FILESYSTEM']) + self.do_runf(test_file('hello_world.c'), 'bar\n', emcc_args=['--pre-js', 'pre.js', '-sNODERAWFS', '-sFORCE_FILESYSTEM']) @disabled('https://github.com/nodejs/node/issues/18265') def test_node_code_caching(self): From 57b3cc096e0a13f0edd779a7fcf12c8a8629d1c4 Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Wed, 11 Sep 2024 20:56:34 +0200 Subject: [PATCH 4/6] Prefer relative path --- test/test_other.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_other.py b/test/test_other.py index c27927ac17293..b7eb687170a76 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -9733,7 +9733,7 @@ def test_noderawfs_access_abspath(self): def test_noderawfs_readfile_prerun(self): create_file('foo', 'bar') create_file('pre.js', f''' - Module.preRun = () => console.log(FS.readFile('{os.path.abspath('foo')}', {{ encoding: 'utf8' }})); + Module.preRun = () => console.log(FS.readFile('foo', {{ encoding: 'utf8' }})); ''') self.do_runf(test_file('hello_world.c'), 'bar\n', emcc_args=['--pre-js', 'pre.js', '-sNODERAWFS', '-sFORCE_FILESYSTEM']) From a1916bdd53c7f244ef1410cd2749dd7b1031b222 Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Wed, 11 Sep 2024 21:00:52 +0200 Subject: [PATCH 5/6] Avoid unnecessary f-string --- test/test_other.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_other.py b/test/test_other.py index b7eb687170a76..806bbc7890174 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -9732,8 +9732,8 @@ def test_noderawfs_access_abspath(self): def test_noderawfs_readfile_prerun(self): create_file('foo', 'bar') - create_file('pre.js', f''' - Module.preRun = () => console.log(FS.readFile('foo', {{ encoding: 'utf8' }})); + create_file('pre.js', r''' + Module.preRun = () => console.log(FS.readFile('foo', { encoding: 'utf8' })); ''') self.do_runf(test_file('hello_world.c'), 'bar\n', emcc_args=['--pre-js', 'pre.js', '-sNODERAWFS', '-sFORCE_FILESYSTEM']) From 5d6c65b5b44caaf0436bc1a161e0c9e5a7bea6c4 Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Thu, 12 Sep 2024 10:36:34 +0200 Subject: [PATCH 6/6] Prefer `self.add_pre_run` utility --- test/test_other.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/test_other.py b/test/test_other.py index 806bbc7890174..01552b79789f0 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -9732,10 +9732,8 @@ def test_noderawfs_access_abspath(self): def test_noderawfs_readfile_prerun(self): create_file('foo', 'bar') - create_file('pre.js', r''' - Module.preRun = () => console.log(FS.readFile('foo', { encoding: 'utf8' })); - ''') - self.do_runf(test_file('hello_world.c'), 'bar\n', emcc_args=['--pre-js', 'pre.js', '-sNODERAWFS', '-sFORCE_FILESYSTEM']) + self.add_pre_run("console.log(FS.readFile('foo', { encoding: 'utf8' }));") + self.do_runf('hello_world.c', 'bar', emcc_args=['-sNODERAWFS', '-sFORCE_FILESYSTEM']) @disabled('https://github.com/nodejs/node/issues/18265') def test_node_code_caching(self):