You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by pi...@apache.org on 2017/08/13 22:03:40 UTC
[02/13] git commit: [flex-falcon] [refs/heads/feature/amf] - fix a
call to super
fix a call to super
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/9827b9f9
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/9827b9f9
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/9827b9f9
Branch: refs/heads/feature/amf
Commit: 9827b9f9090cb533cf017bbdf3dbc4b0f2bddb66
Parents: d51eb8a
Author: Alex Harui <ah...@apache.org>
Authored: Fri Aug 4 00:03:17 2017 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Aug 4 00:03:17 2017 -0700
----------------------------------------------------------------------
.../codegen/js/jx/SuperCallEmitter.java | 9 ++++--
.../js/flexjs/TestFlexJSExpressions.java | 32 ++++++++++++++++++++
2 files changed, 39 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9827b9f9/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
index ad3c6c4..f1b8bed 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
@@ -73,8 +73,13 @@ public class SuperCallEmitter extends JSSubEmitter
IClassNode cnode = (IClassNode) node
.getAncestorOfType(IClassNode.class);
- if (fnode != null
- && (fnode.getNodeID() == ASTNodeID.GetterID || fnode
+ IExpressionNode fcNameNode = fcnode.getNameNode();
+ // assume it is memberaccess of the form super.somefunction
+ MemberAccessExpressionNode mae = null;
+ if (fcNameNode.getNodeID() == ASTNodeID.MemberAccessExpressionID)
+ mae = (MemberAccessExpressionNode)fcNameNode;
+ if (mae != null
+ && (mae.getRightOperandNode().getNodeID() == ASTNodeID.GetterID || mae.getRightOperandNode()
.getNodeID() == ASTNodeID.SetterID))
{
if (cnode == null && thisClass != null)
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9827b9f9/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 b5a7de5..dc28b6b 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
@@ -35,6 +35,7 @@ import org.apache.flex.compiler.tree.as.IClassNode;
import org.apache.flex.compiler.tree.as.IFileNode;
import org.apache.flex.compiler.tree.as.IFunctionCallNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IGetterNode;
import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
import org.junit.Ignore;
@@ -74,6 +75,37 @@ public class TestFlexJSExpressions extends TestGoogExpressions
assertOut("super.foo");
}
+ @Test
+ public void testVisitLanguageIdentifierNode_SuperGetter()
+ {
+ IClassNode node = (IClassNode)getNode("public function get defaultPrevented():Boolean " +
+ "{ return super.isDefaultPrevented(); }" +
+ "override public function isDefaultPrevented():Boolean" +
+ "{ return defaultPrevented; }", IClassNode.class);
+ // getters and setters don't get output until the class is output so you can't just visit the accessorNode
+ asBlockWalker.visitClass(node);
+ assertOut("/**\n * @constructor\n */\n" +
+ "FalconTest_A = function() {\n" +
+ "};\n\n\n" +
+ "/**\n" +
+ " * Prevent renaming of class. Needed for reflection.\n" +
+ " */\n" +
+ "goog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n" +
+ "FalconTest_A.prototype.falconTest_a = function() {\n" +
+ " var self = this;\n" +
+ " ;\n" +
+ " function isDefaultPrevented() {\n" +
+ " return defaultPrevented;\n };\n" +
+ " ;\n \n" +
+ "};\n\n\n" +
+ "FalconTest_A.prototype.get__defaultPrevented = function() {\n" +
+ " return FalconTest_A.superClass_.isDefaultPrevented.apply(this);\n" +
+ "};\n\n\n" +
+ "Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n" +
+ "/** @export */\n" +
+ "defaultPrevented: {\nget: FalconTest_A.prototype.get__defaultPrevented}}\n);");
+ }
+
@Override
@Test
public void testVisitLanguageIdentifierNode_SuperMethod_1()