From aa4de7f1582db8136c177a8bbc72ee8d1905938e Mon Sep 17 00:00:00 2001 From: Nikita Korol Date: Mon, 7 Jul 2025 21:31:21 +0300 Subject: [PATCH 1/3] Wrap source string in brackets --- src/webgl/ShaderGenerator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/webgl/ShaderGenerator.js b/src/webgl/ShaderGenerator.js index d029ed44ef..86c6997104 100644 --- a/src/webgl/ShaderGenerator.js +++ b/src/webgl/ShaderGenerator.js @@ -19,7 +19,7 @@ function shadergenerator(p5, fn) { if (shaderModifier instanceof Function) { let generatorFunction; if (options.parser) { - const sourceString = shaderModifier.toString() + const sourceString = `(${shaderModifier.toString()})`; const ast = parse(sourceString, { ecmaVersion: 2021, locations: options.srcLocations From 547bc8bd2aa5003f0a8f6b3fbddd35577b53b13b Mon Sep 17 00:00:00 2001 From: Nikita Korol Date: Mon, 7 Jul 2025 22:03:29 +0300 Subject: [PATCH 2/3] Add unit test for anonymous function modify hook --- test/unit/webgl/p5.Shader.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/unit/webgl/p5.Shader.js b/test/unit/webgl/p5.Shader.js index 00d4d00847..8567280e38 100644 --- a/test/unit/webgl/p5.Shader.js +++ b/test/unit/webgl/p5.Shader.js @@ -324,6 +324,11 @@ suite('p5.Shader', function() { expect(modified.fragSrc()).not.to.match(/#define AUGMENTED_HOOK_getVertexColor/); }); + test('anonymous function shaderModifier does not throw when parsed', function() { + const callModify = () => myShader.modify(function() {}); + expect(callModify).not.toThrowError(); + }); + test('filled hooks do have an AUGMENTED_HOOK define', function() { const modified = myShader.modify({ 'vec4 getVertexColor': `(vec4 c) { From dcc31b798f798fec7717da57a6cf228bc0f43a54 Mon Sep 17 00:00:00 2001 From: Nikita Korol Date: Wed, 9 Jul 2025 18:44:01 +0300 Subject: [PATCH 3/3] Add comment with an explanation --- src/webgl/ShaderGenerator.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/webgl/ShaderGenerator.js b/src/webgl/ShaderGenerator.js index 86c6997104..a4ecb7c9ae 100644 --- a/src/webgl/ShaderGenerator.js +++ b/src/webgl/ShaderGenerator.js @@ -19,6 +19,8 @@ function shadergenerator(p5, fn) { if (shaderModifier instanceof Function) { let generatorFunction; if (options.parser) { + // #7955 Wrap function declaration code in brackets so anonymous functions are not top level statements, which causes an error in acorn when parsing + // https://github.com/acornjs/acorn/issues/1385 const sourceString = `(${shaderModifier.toString()})`; const ast = parse(sourceString, { ecmaVersion: 2021,