Repository: flex-falcon Updated Branches: refs/heads/develop 85d6606b4 -> fe2a00466
FLEX-34993 fix implicit super calls Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/fe2a0046 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/fe2a0046 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/fe2a0046 Branch: refs/heads/develop Commit: fe2a004660da6ef130a0aa03811155cf3c54cbd2 Parents: 85d6606 Author: Alex Harui <[email protected]> Authored: Wed Dec 23 10:21:34 2015 -0800 Committer: Alex Harui <[email protected]> Committed: Wed Dec 23 10:21:34 2015 -0800 ---------------------------------------------------------------------- .../codegen/js/flexjs/TestFlexJSClass.java | 20 ++++++++++++++++++-- .../codegen/js/jx/SuperCallEmitter.java | 7 +++++++ 2 files changed, 25 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fe2a0046/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java index db12f5b..509c491 100644 --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java @@ -49,6 +49,22 @@ public class TestFlexJSClass extends TestGoogClass assertOut("/**\n * @constructor\n * @extends {goog.events.EventTarget}\n */\norg.apache.flex.A = function() {\n org.apache.flex.A.base(this, 'constructor');\n};\ngoog.inherits(org.apache.flex.A, goog.events.EventTarget);"); } + @Test + public void testSimpleExtendsWithArgs() + { + IClassNode node = getClassNode("public class A extends EventTarget {public function A(arg:String) { super(arg);}}"); + asBlockWalker.visitClass(node); + assertOut("/**\n * @constructor\n * @extends {goog.events.EventTarget}\n * @param {string} arg\n */\norg.apache.flex.A = function(arg) {\n org.apache.flex.A.base(this, 'constructor', arg);\n};\ngoog.inherits(org.apache.flex.A, goog.events.EventTarget);"); + } + + @Test + public void testSimpleExtendsWithArgsImplicitSuper() + { + IClassNode node = getClassNode("public class A extends EventTarget {public function A(arg:String) {}}"); + asBlockWalker.visitClass(node); + assertOut("/**\n * @constructor\n * @extends {goog.events.EventTarget}\n * @param {string} arg\n */\norg.apache.flex.A = function(arg) {\n org.apache.flex.A.base(this, 'constructor');\n};\ngoog.inherits(org.apache.flex.A, goog.events.EventTarget);"); + } + @Override @Test public void testSimpleExtendsImplements() @@ -172,7 +188,7 @@ public class TestFlexJSClass extends TestGoogClass { IClassNode node = getClassNode("public class A extends goog.events.EventTarget {public function A(arg1:String, arg2:int) {}}"); asBlockWalker.visitClass(node); - assertOut("/**\n * @constructor\n * @extends {goog.events.EventTarget}\n * @param {string} arg1\n * @param {number} arg2\n */\norg.apache.flex.A = function(arg1, arg2) {\n org.apache.flex.A.base(this, 'constructor', arg1, arg2);\n};\ngoog.inherits(org.apache.flex.A, goog.events.EventTarget);"); + assertOut("/**\n * @constructor\n * @extends {goog.events.EventTarget}\n * @param {string} arg1\n * @param {number} arg2\n */\norg.apache.flex.A = function(arg1, arg2) {\n org.apache.flex.A.base(this, 'constructor');\n};\ngoog.inherits(org.apache.flex.A, goog.events.EventTarget);"); } @Override @@ -370,7 +386,7 @@ public class TestFlexJSClass extends TestGoogClass { IClassNode node = getClassNode("public class A extends EventTarget {public function A(arg1:String, arg2:int) {arg2 = arg2 + 2;} public var foo:Array = [];}"); asBlockWalker.visitClass(node); - assertOut("/**\n * @constructor\n * @extends {goog.events.EventTarget}\n * @param {string} arg1\n * @param {number} arg2\n */\norg.apache.flex.A = function(arg1, arg2) {\n org.apache.flex.A.base(this, 'constructor', arg1, arg2);\n \n this.foo = [];\n arg2 = arg2 + 2;\n};\ngoog.inherits(org.apache.flex.A, goog.events.EventTarget);\n\n\n/**\n * @export\n * @type {Array}\n */\norg.apache.flex.A.prototype.foo;"); + assertOut("/**\n * @constructor\n * @extends {goog.events.EventTarget}\n * @param {string} arg1\n * @param {number} arg2\n */\norg.apache.flex.A = function(arg1, arg2) {\n org.apache.flex.A.base(this, 'constructor');\n \n this.foo = [];\n arg2 = arg2 + 2;\n};\ngoog.inherits(org.apache.flex.A, goog.events.EventTarget);\n\n\n/**\n * @export\n * @type {Array}\n */\norg.apache.flex.A.prototype.foo;"); } protected IBackend createBackend() http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fe2a0046/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java index d1c1c62..5546ee0 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java @@ -230,9 +230,16 @@ public class SuperCallEmitter extends JSSubEmitter } else if (fnode.isConstructor()) { + // I think we only get here for implicit super calls + // (when there is no mention of super() in the constructor + // code and the compiler autogenerates the super() call) + // and implicit super calls do not have parameters passed + // to them. + /* anodes = fnode.getParameterNodes(); writeArguments = (anodes != null && anodes.length > 0); + */ } if (writeArguments)
