You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/11/18 22:56:03 UTC
git commit: [flex-falcon] [refs/heads/develop] - FLEX-35060 fix use
of 'self'
Repository: flex-falcon
Updated Branches:
refs/heads/develop 2b6e4d690 -> b41d40959
FLEX-35060 fix use of 'self'
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/b41d4095
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/b41d4095
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/b41d4095
Branch: refs/heads/develop
Commit: b41d4095987fc823421909e12b2964f3967f5e59
Parents: 2b6e4d6
Author: Alex Harui <ah...@apache.org>
Authored: Fri Nov 18 14:55:55 2016 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Nov 18 14:55:55 2016 -0800
----------------------------------------------------------------------
.../internal/codegen/js/jx/IdentifierEmitter.java | 11 +++++++++++
.../internal/codegen/js/flexjs/TestFlexJSClass.java | 2 +-
.../codegen/js/flexjs/TestFlexJSExpressions.java | 14 ++++++++++++++
.../resources/flexjs/files/LocalFunction_result.js | 2 +-
4 files changed, 27 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/b41d4095/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
index 7573db4..5a464ad 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
@@ -36,9 +36,11 @@ import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
import org.apache.flex.compiler.internal.definitions.TypeDefinitionBase;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
import org.apache.flex.compiler.internal.tree.as.NonResolvingIdentifierNode;
import org.apache.flex.compiler.tree.ASTNodeID;
import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
import org.apache.flex.compiler.tree.as.IIdentifierNode;
import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
@@ -211,9 +213,18 @@ public class IdentifierEmitter extends JSSubEmitter implements
.getParent().getAncestorOfType(
IFunctionObjectNode.class);
+ IFunctionNode functionNode = (IFunctionNode) node
+ .getParent().getAncestorOfType(
+ IFunctionNode.class);
+ IFunctionDefinition functionDef = null;
+ if (functionNode != null)
+ functionDef = functionNode.getDefinition();
+
startMapping(node);
if (functionObjectNode != null)
write(JSGoogEmitterTokens.SELF);
+ else if (functionNode != null && functionDef.getFunctionClassification() == FunctionClassification.LOCAL)
+ write(JSGoogEmitterTokens.SELF);
else
write(ASEmitterTokens.THIS);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/b41d4095/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
index da74f36..fcb93e7 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
@@ -322,7 +322,7 @@ public class TestFlexJSClass extends TestGoogClass
+ "public function foo2():String{function bar2(param1:String):String {return param1 + baz1;}; return bar2('foo');}"
+ "}");
asBlockWalker.visitClass(node);
- assertOut("/**\n * @constructor\n */\norg.apache.flex.B = function() {\n};\n\n\n/**\n * @export\n * @type {string}\n */\norg.apache.flex.B.prototype.baz1;\n\n\n/**\n * @export\n * @return {string}\n */\norg.apache.flex.B.prototype.foo1 = function() {\n var self = this;\n function bar1() {\n return this.baz1;\n };\n return bar1();\n};\n\n\n/**\n * @export\n * @return {string}\n */\norg.apache.flex.B.prototype.foo2 = function() {\n var self = this;\n function bar2(param1) {\n return param1 + this.baz1;\n };\n return bar2('foo');\n};");
+ assertOut("/**\n * @constructor\n */\norg.apache.flex.B = function() {\n};\n\n\n/**\n * @export\n * @type {string}\n */\norg.apache.flex.B.prototype.baz1;\n\n\n/**\n * @export\n * @return {string}\n */\norg.apache.flex.B.prototype.foo1 = function() {\n var self = this;\n function bar1() {\n return self.baz1;\n };\n return bar1();\n};\n\n\n/**\n * @export\n * @return {string}\n */\norg.apache.flex.B.prototype.foo2 = function() {\n var self = this;\n function bar2(param1) {\n return param1 + self.baz1;\n };\n return bar2('foo');\n};");
}
@Test
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/b41d4095/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
index 8873627..273780f 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
@@ -1039,6 +1039,20 @@ public class TestFlexJSExpressions extends TestGoogExpressions
" var /** @type {Object} */ c = b(a);\n}");
}
+ @Test
+ public void testParametersInInnerFunctions()
+ {
+ IFunctionNode node = (IFunctionNode) getNode(
+ "public var bar:String = baz; public function foo():void { function localFunction():void { trace(bar); } localFunction() }",
+ IFunctionNode.class, WRAP_LEVEL_CLASS);
+ asBlockWalker.visitFunction(node);
+ assertOut("/**\n * @export\n */\n" +
+ "FalconTest_A.prototype.foo = function() {\n" +
+ " var self = this;\n" +
+ " function localFunction() {\n org.apache.flex.utils.Language.trace(self.bar);\n };\n" +
+ " localFunction();\n}");
+ }
+
@Override
@Test
public void testVisitAs()
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/b41d4095/compiler-jx/src/test/resources/flexjs/files/LocalFunction_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/files/LocalFunction_result.js b/compiler-jx/src/test/resources/flexjs/files/LocalFunction_result.js
index db02d56..957a84a 100644
--- a/compiler-jx/src/test/resources/flexjs/files/LocalFunction_result.js
+++ b/compiler-jx/src/test/resources/flexjs/files/LocalFunction_result.js
@@ -44,7 +44,7 @@ LocalFunction.prototype.myMemberProperty = "got it: ";
LocalFunction.prototype.myMemberMethod = function(value) {
var self = this;
function myLocalFunction(value) {
- return this.myMemberProperty + value;
+ return self.myMemberProperty + value;
};
org.apache.flex.utils.Language.trace("WOW! :: " + myLocalFunction(value + 42));
};