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);