You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2019/03/19 23:38:28 UTC
[royale-compiler] branch develop updated: compiler-jx: fixed
hoisting issue caused by last commit when default initializers is disabled
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 3bdad2d compiler-jx: fixed hoisting issue caused by last commit when default initializers is disabled
3bdad2d is described below
commit 3bdad2d77594580b70b49f371fd2ed7158ed213d
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Tue Mar 19 16:37:41 2019 -0700
compiler-jx: fixed hoisting issue caused by last commit when default initializers is disabled
---
.../codegen/js/royale/JSRoyaleEmitter.java | 33 ++++++++++++++--------
.../internal/codegen/js/utils/EmitterUtils.java | 17 +++++++++--
.../codegen/js/royale/TestDefaultInitializers.java | 16 +++++------
.../js/sourcemaps/TestSourceMapStatements.java | 4 +--
4 files changed, 46 insertions(+), 24 deletions(-)
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 8f9cc44..e3adc32 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
@@ -485,6 +485,16 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
protected void emitHoistedVariablesCodeBlock(IFunctionNode node)
{
+ boolean defaultInitializers = false;
+ ICompilerProject project = getWalker().getProject();
+ if(project instanceof RoyaleJSProject)
+ {
+ RoyaleJSProject fjsProject = (RoyaleJSProject) project;
+ if(fjsProject.config != null)
+ {
+ defaultInitializers = fjsProject.config.getJsDefaultInitializers();
+ }
+ }
Collection<IDefinition> localDefs = node.getScopedNode().getScope().getAllLocalDefinitions();
for (IDefinition localDef : localDefs)
{
@@ -492,7 +502,7 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
{
IVariableDefinition varDef = (IVariableDefinition) localDef;
IVariableNode varNode = varDef.getVariableNode();
- if (!EmitterUtils.needsDefaultValue(varNode, getWalker().getProject()))
+ if (!EmitterUtils.needsDefaultValue(varNode, defaultInitializers, getWalker().getProject()))
{
//already has a default value. no need to hoist.
continue;
@@ -800,21 +810,20 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
@Override
public void emitVarDeclaration(IVariableNode node)
{
- if (EmitterUtils.needsDefaultValue(node, getWalker().getProject()))
+ boolean defaultInitializers = false;
+ ICompilerProject project = getWalker().getProject();
+ if(project instanceof RoyaleJSProject)
{
- boolean defaultInitializers = false;
- ICompilerProject project = getWalker().getProject();
- if(project instanceof RoyaleJSProject)
+ RoyaleJSProject fjsProject = (RoyaleJSProject) project;
+ if(fjsProject.config != null)
{
- RoyaleJSProject fjsProject = (RoyaleJSProject) project;
- if(fjsProject.config != null)
- {
- defaultInitializers = fjsProject.config.getJsDefaultInitializers();
- }
+ defaultInitializers = fjsProject.config.getJsDefaultInitializers();
}
-
+ }
+ if (EmitterUtils.needsDefaultValue(node, defaultInitializers, project))
+ {
IExpressionNode avnode = node.getAssignedValueNode();
- if (avnode == null && defaultInitializers)
+ if (avnode == null)
{
IFunctionNode parentFunction = (IFunctionNode) node.getAncestorOfType(IFunctionNode.class);
if (!isEmittingHoistedNodes(parentFunction))
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
index 079ea94..250a67b 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -26,6 +26,7 @@ import java.util.List;
import java.util.Map;
import org.apache.royale.compiler.constants.IASLanguageConstants;
+import org.apache.royale.compiler.constants.IASLanguageConstants.BuiltinType;
import org.apache.royale.compiler.definitions.IClassDefinition;
import org.apache.royale.compiler.definitions.IDefinition;
import org.apache.royale.compiler.definitions.IFunctionDefinition;
@@ -597,7 +598,7 @@ public class EmitterUtils
|| node.getContainerType() == IContainerNode.ContainerType.SYNTHESIZED;
}
- public static boolean needsDefaultValue(IVariableNode node, ICompilerProject project)
+ public static boolean needsDefaultValue(IVariableNode node, boolean defaultInitializers, ICompilerProject project)
{
if (node == null)
{
@@ -638,7 +639,19 @@ public class EmitterUtils
{
return false;
}
- return true;
+ if (project.getBuiltinType(BuiltinType.ANY_TYPE).equals(varTypeDef)
+ || project.getBuiltinType(BuiltinType.ANY_TYPE).equals(varTypeDef)
+ || project.getBuiltinType(BuiltinType.ANY_TYPE).equals(varTypeDef))
+ {
+ return false;
+ }
+ if (project.getBuiltinType(BuiltinType.INT).equals(varTypeDef)
+ || project.getBuiltinType(BuiltinType.UINT).equals(varTypeDef))
+ {
+ //always true, regardless of -js-default-initializers
+ return true;
+ }
+ return defaultInitializers;
}
}
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestDefaultInitializers.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestDefaultInitializers.java
index d51246d..6e17484 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestDefaultInitializers.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestDefaultInitializers.java
@@ -110,11 +110,11 @@ public class TestDefaultInitializers extends ASTestBase
public void testVarDeclaration_noDefaultInitializers_withIntType()
{
createConfig(false);
- IVariableNode node = (IVariableNode) getNode("var a:int;",
- IVariableNode.class);
- asBlockWalker.visitVariable(node);
+ IFunctionNode node = (IFunctionNode) getNode("var a:int;",
+ IFunctionNode.class);
+ asBlockWalker.visitFunction(node);
//an exception that always has an initializer
- assertOut("var /** @type {number} */ a = 0");
+ assertOut("RoyaleTest_A.prototype.royaleTest_a = function() {\n var /** @type {number} */ a = 0;\n //var a;\n}");
}
@Test
@@ -131,11 +131,11 @@ public class TestDefaultInitializers extends ASTestBase
public void testVarDeclaration_noDefaultInitializers_withUintType()
{
createConfig(false);
- IVariableNode node = (IVariableNode) getNode("var a:uint;",
- IVariableNode.class);
- asBlockWalker.visitVariable(node);
+ IFunctionNode node = (IFunctionNode) getNode("var a:uint;",
+ IFunctionNode.class);
+ asBlockWalker.visitFunction(node);
//an exception that always has an initializer
- assertOut("var /** @type {number} */ a = 0");
+ assertOut("RoyaleTest_A.prototype.royaleTest_a = function() {\n var /** @type {number} */ a = 0;\n //var a;\n}");
}
@Test
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java
index cca0683..d13a577 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java
@@ -65,13 +65,13 @@ public class TestSourceMapStatements extends SourceMapTestBase
@Test
public void testVarDeclaration_withType()
{
- IVariableNode node = (IVariableNode) getNode("var a:int;",
+ IVariableNode node = (IVariableNode) getNode("var a:Number;",
IVariableNode.class);
asBlockWalker.visitVariable(node);
//var /** @type {number} */ a
assertMapping(node, 0, 0, 0, 0, 0, 4); // var
assertMapping(node, 0, 4, 0, 26, 0, 27); // a
- assertMapping(node, 0, 5, 0, 4, 0, 26); // :int
+ assertMapping(node, 0, 5, 0, 4, 0, 26); // :Number
}
@Test