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