diff --git a/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt b/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt index bc2bff3f245..f0d21f100e9 100644 --- a/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt +++ b/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt @@ -38,7 +38,7 @@ public object KotlinJavascriptMetadataUtils { * Matches string like .kotlin_module_metadata(, , ) */ private val METADATA_PATTERN = "(?m)\\w+\\.$KOTLIN_JAVASCRIPT_METHOD_NAME\\((\\d+),\\s*(['\"])([^'\"]*)\\2,\\s*(['\"])([^'\"]*)\\4\\)".toRegex() - private val ABI_VERSION = 2 + private val ABI_VERSION = 3 public fun replaceSuffix(filePath: String): String = filePath.substringBeforeLast(JS_EXT) + META_JS_SUFFIX diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt index 130df76297a..63efd4a7e9a 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt @@ -215,7 +215,7 @@ object ConstructorCallCase : FunctionCallCase { return JsNew(functionRef, argumentsInfo.translateArguments) } else { - return JsInvocation(functionRef, listOf(JsLiteral.UNDEFINED) + argumentsInfo.translateArguments) + return JsInvocation(functionRef, argumentsInfo.translateArguments) } } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt index bd95457ece9..da897eda15e 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt @@ -311,7 +311,7 @@ public class ClassTranslator private constructor( val constructorInitializer = FunctionTranslator.newInstance(constructor, translationContext).translateAsMethod() val constructorFunction = constructorInitializer.getValueExpr() as JsFunction - constructorFunction.getParameters().add(0, JsParameter(thisName)) + constructorFunction.getParameters().add(JsParameter(thisName)) val referenceToClass = context.getQualifiedReference(classDescriptor) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/astUtils.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/astUtils.kt index c4cdd53e577..05f6a5650fe 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/astUtils.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/astUtils.kt @@ -64,15 +64,17 @@ fun JsExpression.toInvocationWith(thisExpr: JsExpression): JsExpression { is JsNew -> { qualifier = Namer.getFunctionCallRef(getConstructorExpression()) arguments = getArguments() + // `new A(a, b, c)` -> `A.call($this, a, b, c)` + return JsInvocation(qualifier, listOf(thisExpr) + arguments) } is JsInvocation -> { qualifier = getQualifier() - arguments = with(getArguments()) { subList(1, size()) } + arguments = getArguments() + // `A(a, b, c)` -> `A(a, b, c, $this)` + return JsInvocation(qualifier, arguments + thisExpr) } else -> throw IllegalStateException("Unexpected node type: " + javaClass) } - - return JsInvocation(qualifier, listOf(thisExpr) + arguments) } public var JsNameRef.qualifier: JsExpression?