From 71cfa86f19431bc40546e3a64461bb808f2f3795 Mon Sep 17 00:00:00 2001 From: Erokhin Stanislav Date: Fri, 4 Oct 2013 20:30:20 +0400 Subject: [PATCH] JS backend: fix order call super constructor --- .../test/semantics/ClassInheritanceTest.java | 4 ++++ .../ClassInitializerTranslator.java | 2 +- .../inheritance/cases/baseCallOrder.kt | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 js/js.translator/testFiles/inheritance/cases/baseCallOrder.kt diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/ClassInheritanceTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/ClassInheritanceTest.java index f76feaa0b1a..dca0fb3f4ae 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/ClassInheritanceTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/ClassInheritanceTest.java @@ -36,6 +36,10 @@ public final class ClassInheritanceTest extends SingleFileTranslationTest { checkFooBoxIsOk(); } + public void testBaseCallOrder() throws Exception { + checkFooBoxIsOk(); + } + public void testCrazyInheritance() throws Exception { checkFooBoxIsOk(); } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java index 752533f94d4..b45cf636097 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java @@ -117,7 +117,7 @@ public final class ClassInitializerTranslator extends AbstractTranslator { JsInvocation call = new JsInvocation(Namer.getFunctionCallRef(Namer.superMethodNameRef(ref))); call.getArguments().add(JsLiteral.THIS); call.getArguments().addAll(arguments); - initializerStatements.add(call.makeStmt()); + initializerStatements.add(0, call.makeStmt()); } @NotNull diff --git a/js/js.translator/testFiles/inheritance/cases/baseCallOrder.kt b/js/js.translator/testFiles/inheritance/cases/baseCallOrder.kt new file mode 100644 index 00000000000..0db11a6dca6 --- /dev/null +++ b/js/js.translator/testFiles/inheritance/cases/baseCallOrder.kt @@ -0,0 +1,19 @@ +package foo + +var x = false + +open class A { + { + x = (this as B).a != 3 + } +} + +class B(val a: Int = 3) : A() { + +} + +fun box(): String { + B() + if (!x) return "fail" + return "OK" +} \ No newline at end of file