This is an automated email from the ASF dual-hosted git repository.

joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git


The following commit(s) were added to refs/heads/develop by this push:
     new f3117a286 JSRoyaleEmitter: fix intermittent duplicate hoisted 
variables in JS
f3117a286 is described below

commit f3117a286738e88e50d631014ba8e365cb5ea765
Author: Josh Tynjala <[email protected]>
AuthorDate: Mon Apr 17 10:41:41 2023 -0700

    JSRoyaleEmitter: fix intermittent duplicate hoisted variables in JS
---
 .../compiler/internal/codegen/js/royale/JSRoyaleEmitter.java   | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
index ae930927a..f9962a7cf 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
@@ -503,6 +503,7 @@ public class JSRoyaleEmitter extends JSGoogEmitter 
implements IJSRoyaleEmitter
                 defaultInitializers = 
fjsProject.config.getJsDefaultInitializers();
             }
         }
+        Set<String> varNames = new HashSet<String>();
         Collection<IDefinition> localDefs = 
node.getScopedNode().getScope().getAllLocalDefinitions();
         for (IDefinition localDef : localDefs)
         {
@@ -521,6 +522,15 @@ public class JSRoyaleEmitter extends JSGoogEmitter 
implements IJSRoyaleEmitter
                     //these will be handled from the first variable in the 
chain
                     continue;
                 }
+                String varDefName = varDef.getQualifiedName();
+                if (varNames.contains(varDefName))
+                {
+                    // due to multi-threading, it's possible that the scope
+                    // sometimes has duplicates. that's probably a bug, but
+                    // this will help until it can be fixed.
+                    continue;
+                }
+                varNames.add(varDefName);
                 if (EmitterUtils.needsDefaultValue(varNode, 
defaultInitializers, getWalker().getProject()))
                 {
                     emitVarDeclaration(varNode);

Reply via email to