diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt index eb1435045cc..e87fb045f3c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt @@ -1235,4 +1235,4 @@ fun CompileTimeConstant<*>.isStandaloneOnlyConstant(): Boolean { is TypedCompileTimeConstant -> this.constantValue.isStandaloneOnlyConstant() else -> return false } -} \ No newline at end of file +} diff --git a/compiler/testData/codegen/box/arrays/arraysOfInlineClass/accessArrayOfUnsigned.kt b/compiler/testData/codegen/box/arrays/arraysOfInlineClass/accessArrayOfUnsigned.kt index 62c26cebe79..8e770e2730c 100644 --- a/compiler/testData/codegen/box/arrays/arraysOfInlineClass/accessArrayOfUnsigned.kt +++ b/compiler/testData/codegen/box/arrays/arraysOfInlineClass/accessArrayOfUnsigned.kt @@ -1,5 +1,5 @@ // WITH_UNSIGNED -// IGNORE_BACKEND: JVM_IR, JS_IR, JS +// IGNORE_BACKEND: JVM_IR, JS_IR val xs = Array(2) { 42u } diff --git a/compiler/testData/codegen/box/arrays/arraysOfInlineClass/arrayOfInlineClassOfArrayOfInlineClass.kt b/compiler/testData/codegen/box/arrays/arraysOfInlineClass/arrayOfInlineClassOfArrayOfInlineClass.kt index 45b443f01ab..0b90481b909 100644 --- a/compiler/testData/codegen/box/arrays/arraysOfInlineClass/arrayOfInlineClassOfArrayOfInlineClass.kt +++ b/compiler/testData/codegen/box/arrays/arraysOfInlineClass/arrayOfInlineClassOfArrayOfInlineClass.kt @@ -1,6 +1,6 @@ // !LANGUAGE: +InlineClasses // WITH_UNSIGNED -// IGNORE_BACKEND: JVM_IR, JS_IR, JS +// IGNORE_BACKEND: JVM_IR, JS_IR inline class Data(val data: Array) diff --git a/compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt b/compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt index e3199f95999..3b4b33b3638 100644 --- a/compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt +++ b/compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt @@ -1,5 +1,5 @@ // !LANGUAGE: +InlineClasses -// IGNORE_BACKEND: JVM_IR, JS_IR +// IGNORE_BACKEND: JVM_IR inline class Foo(val x: Int) inline class FooRef(val y: String) diff --git a/compiler/testData/codegen/box/ranges/forInDownTo/forIntInDownTo.kt b/compiler/testData/codegen/box/ranges/forInDownTo/forIntInDownTo.kt index fd046640e37..299f8601187 100644 --- a/compiler/testData/codegen/box/ranges/forInDownTo/forIntInDownTo.kt +++ b/compiler/testData/codegen/box/ranges/forInDownTo/forIntInDownTo.kt @@ -1,3 +1,4 @@ +// IGNORE_BACKEND: JS_IR // WITH_RUNTIME import kotlin.test.assertEquals diff --git a/compiler/testData/codegen/box/unsignedTypes/unsignedTypeValuesInsideStringTemplates.kt b/compiler/testData/codegen/box/unsignedTypes/unsignedTypeValuesInsideStringTemplates.kt index b930ca88b04..954913034a2 100644 --- a/compiler/testData/codegen/box/unsignedTypes/unsignedTypeValuesInsideStringTemplates.kt +++ b/compiler/testData/codegen/box/unsignedTypes/unsignedTypeValuesInsideStringTemplates.kt @@ -6,13 +6,14 @@ const val HUNDRED: UByte = 100u const val MAX_LONG: ULong = ULong.MAX_VALUE +const val MAX_BYTE_STRING = "$MAX_BYTE" + +const val MAX_LONG_STRING = "$MAX_LONG" + fun box(): String { val maxByteStringSingle = "$MAX_BYTE" if (maxByteStringSingle != MAX_BYTE.toString() || maxByteStringSingle != "255") return "Fail 1: $maxByteStringSingle" - val maxLongStringSingle = "$MAX_LONG" - if (maxLongStringSingle != MAX_LONG.toString() || maxLongStringSingle != "18446744073709551615") return "Fail 1.5: $maxLongStringSingle" - val twoHundredUByte = "${(HUNDRED * 2u).toUByte()}" if (twoHundredUByte != "200") return "Fail 2: $twoHundredUByte" @@ -23,5 +24,12 @@ fun box(): String { val complex = "Max UByte: $MAX_BYTE, next: $nonConst" if (complex != "Max UByte: 255, next: 256") return "Fail 4: $complex" + val maxLongStringSingle = "$MAX_LONG" + if (maxLongStringSingle != MAX_LONG.toString() || maxLongStringSingle != "18446744073709551615") return "Fail 5: $maxLongStringSingle" + + if (MAX_BYTE_STRING != "255") return "Fail 6: $MAX_BYTE_STRING" + + if (MAX_LONG_STRING != "18446744073709551615") return "Fail 7: $MAX_LONG_STRING" + return "OK" } \ No newline at end of file diff --git a/compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt b/compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt index 48bb64a394d..36e31971ea0 100644 --- a/compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt +++ b/compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt @@ -27,6 +27,10 @@ fun box(): String { val complexInlinedUInts = inlinedUInt(*inlinedUInts, 3u, *inlinedUInts) if (sum(*complexInlinedUInts) != 11u) return "Fail 5" + if (nullableUInts !is UIntArray) return "Fail 6" + + if (inlinedUInts !is UIntArray) return "Fail 7" + return "OK" } 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 cae0ce89e3b..9605017cfa6 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 @@ -126,9 +126,11 @@ class ClassTranslator private constructor( addSuperclassReferences() classDeclaration.secondaryConstructors.forEach { generateSecondaryConstructor(context, it) } - if ((descriptor.isData || descriptor.isInline) && classDeclaration is KtClassOrObject) { - // TODO is `inline data class` a bug or a feature? - JsDataClassGenerator(classDeclaration, context, !descriptor.isData).generate() + if (classDeclaration is KtClassOrObject) { + when { + descriptor.isData -> JsDataClassGenerator(classDeclaration, context).generate() + descriptor.isInline -> JsInlineClassGenerator(classDeclaration, context).generate() + } } emitConstructors(nonConstructorContext, nonConstructorContext.endDeclaration()) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java index a91008e725e..f964abcf8dc 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java @@ -16,20 +16,12 @@ package org.jetbrains.kotlin.js.translate.declaration; -import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.backend.common.CodegenUtil; -import org.jetbrains.kotlin.backend.common.DataClassMethodGenerator; import org.jetbrains.kotlin.descriptors.*; -import org.jetbrains.kotlin.descriptors.annotations.Annotations; -import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl; -import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl; import org.jetbrains.kotlin.js.backend.ast.*; import org.jetbrains.kotlin.js.translate.context.Namer; import org.jetbrains.kotlin.js.translate.context.TranslationContext; import org.jetbrains.kotlin.js.translate.utils.JsAstUtils; -import org.jetbrains.kotlin.js.translate.utils.UtilsKt; -import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.KtClassOrObject; import org.jetbrains.kotlin.psi.KtParameter; import org.jetbrains.kotlin.resolve.BindingContext; @@ -40,33 +32,14 @@ import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt; import java.util.ArrayList; import java.util.List; -import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.and; -import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.or; +class JsDataClassGenerator extends JsEqualsHashcodeToStringGenerator { -class JsDataClassGenerator extends DataClassMethodGenerator { - private final TranslationContext context; - - private final boolean isInline; - - JsDataClassGenerator(KtClassOrObject klass, TranslationContext context, boolean isInline) { - super(klass, context.bindingContext()); - this.context = context; - this.isInline = isInline; - } - - @Override - public void generate() { - if (isInline) { - generateUnboxFunction(); - } - - super.generate(); + JsDataClassGenerator(KtClassOrObject klass, TranslationContext context) { + super(klass, context); } @Override public void generateComponentFunction(@NotNull FunctionDescriptor function, @NotNull ValueParameterDescriptor parameter) { - if (isInline) return; - PropertyDescriptor propertyDescriptor = context.bindingContext().get(BindingContext.VALUE_PARAMETER_AS_PROPERTY, parameter); assert propertyDescriptor != null : "Property descriptor is expected to be non-null"; @@ -79,8 +52,6 @@ class JsDataClassGenerator extends DataClassMethodGenerator { @Override public void generateCopyFunction(@NotNull FunctionDescriptor function, @NotNull List constructorParameters) { - if (isInline) return; - JsFunction functionObj = generateJsMethod(function); assert function.getValueParameters().size() == constructorParameters.size(); @@ -131,119 +102,4 @@ class JsDataClassGenerator extends DataClassMethodGenerator { returnStatement.setSource(getDeclaration()); functionObj.getBody().getStatements().add(returnStatement); } - - @Override - public void generateToStringMethod(@NotNull FunctionDescriptor function, @NotNull List classProperties) { - // TODO: relax this limitation, with the data generation logic fixed. - assert !classProperties.isEmpty(); - JsFunction functionObj = generateJsMethod(function); - - JsExpression result = null; - for (int i = 0; i < classProperties.size(); i++) { - String printName = classProperties.get(i).getName().asString(); - JsName name = context.getNameForDescriptor(classProperties.get(i)); - JsExpression literal = new JsStringLiteral((i == 0 ? (getClassDescriptor().getName() + "(") : ", ") + printName + "="); - JsExpression expr = new JsInvocation(context.namer().kotlin("toString"), new JsNameRef(name, new JsThisRef())); - PsiElement source = KotlinSourceElementKt.getPsi(classProperties.get(i).getSource()); - JsExpression component = JsAstUtils.sum(literal, expr).source(source); - if (result == null) { - result = component; - } - else { - result = JsAstUtils.sum(result, component); - } - } - assert result != null; - result = JsAstUtils.sum(result, new JsStringLiteral(")")); - - JsReturn returnStatement = new JsReturn(result); - returnStatement.setSource(getDeclaration()); - functionObj.getBody().getStatements().add(returnStatement); - } - - @Override - public void generateHashCodeMethod(@NotNull FunctionDescriptor function, @NotNull List classProperties) { - JsFunction functionObj = generateJsMethod(function); - - List statements = functionObj.getBody().getStatements(); - - JsName varName = functionObj.getScope().declareName("result"); - - JsVars resultVar = new JsVars(new JsVars.JsVar(varName, new JsIntLiteral(0))); - resultVar.setSource(getDeclaration()); - statements.add(resultVar); - - for (PropertyDescriptor prop : classProperties) { - // TODO: we should statically check that we can call hashCode method directly. - JsName name = context.getNameForDescriptor(prop); - JsExpression component = new JsInvocation(context.namer().kotlin("hashCode"), new JsNameRef(name, new JsThisRef())); - JsExpression newHashValue = JsAstUtils.sum(JsAstUtils.mul(new JsNameRef(varName), new JsIntLiteral(31)), component); - JsExpression assignment = JsAstUtils.assignment(new JsNameRef(varName), - new JsBinaryOperation(JsBinaryOperator.BIT_OR, newHashValue, - new JsIntLiteral(0))); - statements.add(assignment.source(KotlinSourceElementKt.getPsi(prop.getSource())).makeStmt()); - } - - JsReturn returnStatement = new JsReturn(new JsNameRef(varName)); - returnStatement.setSource(getDeclaration()); - statements.add(returnStatement); - } - - @Override - public void generateEqualsMethod(@NotNull FunctionDescriptor function, @NotNull List classProperties) { - assert !classProperties.isEmpty(); - JsFunction functionObj = generateJsMethod(function); - JsFunctionScope funScope = functionObj.getScope(); - - JsName paramName = funScope.declareName("other"); - functionObj.getParameters().add(new JsParameter(paramName)); - - JsExpression referenceEqual = JsAstUtils.equality(new JsThisRef(), new JsNameRef(paramName)); - JsExpression isNotNull = JsAstUtils.inequality(new JsNameRef(paramName), new JsNullLiteral()); - JsExpression otherIsObject = JsAstUtils.typeOfIs(paramName.makeRef(), new JsStringLiteral("object")); - JsExpression prototypeEqual = - JsAstUtils.equality(new JsInvocation(new JsNameRef("getPrototypeOf", new JsNameRef("Object")), new JsThisRef()), - new JsInvocation(new JsNameRef("getPrototypeOf", new JsNameRef("Object")), new JsNameRef(paramName))); - - JsExpression fieldChain = null; - for (PropertyDescriptor prop : classProperties) { - JsName name = context.getNameForDescriptor(prop); - PsiElement source = KotlinSourceElementKt.getPsi(prop.getSource()); - JsExpression next = new JsInvocation(context.namer().kotlin("equals"), - new JsNameRef(name, new JsThisRef()), - new JsNameRef(name, new JsNameRef(paramName))).source(source); - if (fieldChain == null) { - fieldChain = next; - } - else { - fieldChain = and(fieldChain, next); - } - } - assert fieldChain != null; - - JsExpression returnExpression = or(referenceEqual, and(isNotNull, and(otherIsObject, and(prototypeEqual, fieldChain)))); - JsReturn returnStatement = new JsReturn(returnExpression); - returnStatement.setSource(getDeclaration()); - functionObj.getBody().getStatements().add(returnStatement); - } - - private void generateUnboxFunction() { - PropertyDescriptor boxee = getPrimaryConstructorProperties().get(0); - - JsFunction unboxFunction = context.createRootScopedFunction("unbox"); - JsExpression prototypeRef = JsAstUtils.prototypeOf(context.getInnerReference(getClassDescriptor())); - JsExpression functionRef = new JsNameRef("unbox", prototypeRef); - - unboxFunction.getBody().getStatements().add(new JsReturn(JsAstUtils.pureFqn(context.getNameForDescriptor(boxee), new JsThisRef()))); - - context.addDeclarationStatement(JsAstUtils.assignment(functionRef, unboxFunction).makeStmt()); - } - - private JsFunction generateJsMethod(@NotNull FunctionDescriptor functionDescriptor) { - JsFunction functionObject = context.createRootScopedFunction(functionDescriptor); - functionObject.setSource(getDeclaration()); - ClassDescriptor containingClass = (ClassDescriptor) functionDescriptor.getContainingDeclaration(); - context.addDeclarationStatement(UtilsKt.addFunctionToPrototype(context, containingClass, functionDescriptor, functionObject)); - return functionObject; - } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsEqualsHashcodeToStringGenerator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsEqualsHashcodeToStringGenerator.java new file mode 100644 index 00000000000..ddbcaab2d09 --- /dev/null +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsEqualsHashcodeToStringGenerator.java @@ -0,0 +1,149 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.js.translate.declaration; + +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.backend.common.DataClassMethodGenerator; +import org.jetbrains.kotlin.descriptors.*; +import org.jetbrains.kotlin.js.backend.ast.*; +import org.jetbrains.kotlin.js.translate.context.TranslationContext; +import org.jetbrains.kotlin.js.translate.utils.JsAstUtils; +import org.jetbrains.kotlin.js.translate.utils.UtilsKt; +import org.jetbrains.kotlin.psi.KtClassOrObject; +import org.jetbrains.kotlin.psi.KtParameter; +import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt; + +import java.util.List; + +import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.and; +import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.or; + +abstract class JsEqualsHashcodeToStringGenerator extends DataClassMethodGenerator { + protected final TranslationContext context; + + protected JsEqualsHashcodeToStringGenerator(KtClassOrObject klass, TranslationContext context) { + super(klass, context.bindingContext()); + this.context = context; + } + + @Override + public void generateToStringMethod(@NotNull FunctionDescriptor function, @NotNull List classProperties) { + // TODO: relax this limitation, with the data generation logic fixed. + assert !classProperties.isEmpty(); + JsFunction functionObj = generateJsMethod(function); + + JsExpression result = null; + for (int i = 0; i < classProperties.size(); i++) { + String printName = classProperties.get(i).getName().asString(); + JsName name = context.getNameForDescriptor(classProperties.get(i)); + JsExpression literal = new JsStringLiteral((i == 0 ? (getClassDescriptor().getName() + "(") : ", ") + printName + "="); + JsExpression expr = new JsInvocation(context.namer().kotlin("toString"), new JsNameRef(name, new JsThisRef())); + PsiElement source = KotlinSourceElementKt.getPsi(classProperties.get(i).getSource()); + JsExpression component = JsAstUtils.sum(literal, expr).source(source); + if (result == null) { + result = component; + } + else { + result = JsAstUtils.sum(result, component); + } + } + assert result != null; + result = JsAstUtils.sum(result, new JsStringLiteral(")")); + + JsReturn returnStatement = new JsReturn(result); + returnStatement.setSource(getDeclaration()); + functionObj.getBody().getStatements().add(returnStatement); + } + + @Override + public void generateHashCodeMethod(@NotNull FunctionDescriptor function, @NotNull List classProperties) { + JsFunction functionObj = generateJsMethod(function); + + List statements = functionObj.getBody().getStatements(); + + JsName varName = functionObj.getScope().declareName("result"); + + JsVars resultVar = new JsVars(new JsVars.JsVar(varName, new JsIntLiteral(0))); + resultVar.setSource(getDeclaration()); + statements.add(resultVar); + + for (PropertyDescriptor prop : classProperties) { + // TODO: we should statically check that we can call hashCode method directly. + JsName name = context.getNameForDescriptor(prop); + JsExpression component = new JsInvocation(context.namer().kotlin("hashCode"), new JsNameRef(name, new JsThisRef())); + JsExpression newHashValue = JsAstUtils.sum(JsAstUtils.mul(new JsNameRef(varName), new JsIntLiteral(31)), component); + JsExpression assignment = JsAstUtils.assignment(new JsNameRef(varName), + new JsBinaryOperation(JsBinaryOperator.BIT_OR, newHashValue, + new JsIntLiteral(0))); + statements.add(assignment.source(KotlinSourceElementKt.getPsi(prop.getSource())).makeStmt()); + } + + JsReturn returnStatement = new JsReturn(new JsNameRef(varName)); + returnStatement.setSource(getDeclaration()); + statements.add(returnStatement); + } + + @Override + public void generateEqualsMethod(@NotNull FunctionDescriptor function, @NotNull List classProperties) { + assert !classProperties.isEmpty(); + JsFunction functionObj = generateJsMethod(function); + JsFunctionScope funScope = functionObj.getScope(); + + JsName paramName = funScope.declareName("other"); + functionObj.getParameters().add(new JsParameter(paramName)); + + JsExpression referenceEqual = JsAstUtils.equality(new JsThisRef(), new JsNameRef(paramName)); + JsExpression isNotNull = JsAstUtils.inequality(new JsNameRef(paramName), new JsNullLiteral()); + JsExpression otherIsObject = JsAstUtils.typeOfIs(paramName.makeRef(), new JsStringLiteral("object")); + JsExpression prototypeEqual = + JsAstUtils.equality(new JsInvocation(new JsNameRef("getPrototypeOf", new JsNameRef("Object")), new JsThisRef()), + new JsInvocation(new JsNameRef("getPrototypeOf", new JsNameRef("Object")), new JsNameRef(paramName))); + + JsExpression fieldChain = null; + for (PropertyDescriptor prop : classProperties) { + JsName name = context.getNameForDescriptor(prop); + PsiElement source = KotlinSourceElementKt.getPsi(prop.getSource()); + JsExpression next = new JsInvocation(context.namer().kotlin("equals"), + new JsNameRef(name, new JsThisRef()), + new JsNameRef(name, new JsNameRef(paramName))).source(source); + if (fieldChain == null) { + fieldChain = next; + } + else { + fieldChain = and(fieldChain, next); + } + } + assert fieldChain != null; + + JsExpression returnExpression = or(referenceEqual, and(isNotNull, and(otherIsObject, and(prototypeEqual, fieldChain)))); + JsReturn returnStatement = new JsReturn(returnExpression); + returnStatement.setSource(getDeclaration()); + functionObj.getBody().getStatements().add(returnStatement); + } + + @Override + protected void generateComponentFunction( + @NotNull FunctionDescriptor function, @NotNull ValueParameterDescriptor parameter + ) { + // Do nothing + } + + @Override + protected void generateCopyFunction( + @NotNull FunctionDescriptor function, @NotNull List constructorParameters + ) { + // Do nothing + } + + protected JsFunction generateJsMethod(@NotNull FunctionDescriptor functionDescriptor) { + JsFunction functionObject = context.createRootScopedFunction(functionDescriptor); + functionObject.setSource(getDeclaration()); + ClassDescriptor containingClass = (ClassDescriptor) functionDescriptor.getContainingDeclaration(); + context.addDeclarationStatement(UtilsKt.addFunctionToPrototype(context, containingClass, functionDescriptor, functionObject)); + return functionObject; + } +} diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsInlineClassGenerator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsInlineClassGenerator.java new file mode 100644 index 00000000000..0d6ca3f867c --- /dev/null +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsInlineClassGenerator.java @@ -0,0 +1,44 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.js.translate.declaration; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.descriptors.FunctionDescriptor; +import org.jetbrains.kotlin.descriptors.PropertyDescriptor; +import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor; +import org.jetbrains.kotlin.js.backend.ast.*; +import org.jetbrains.kotlin.js.translate.context.TranslationContext; +import org.jetbrains.kotlin.js.translate.utils.JsAstUtils; +import org.jetbrains.kotlin.psi.KtClassOrObject; +import org.jetbrains.kotlin.psi.KtParameter; + +import java.util.List; + +public class JsInlineClassGenerator extends JsEqualsHashcodeToStringGenerator { + + protected JsInlineClassGenerator(KtClassOrObject klass, TranslationContext context) { + super(klass, context); + } + + @Override + public void generate() { + generateUnboxFunction(); + + super.generate(); + } + + private void generateUnboxFunction() { + PropertyDescriptor boxee = getPrimaryConstructorProperties().get(0); + + JsFunction unboxFunction = context.createRootScopedFunction("unbox"); + JsExpression prototypeRef = JsAstUtils.prototypeOf(context.getInnerReference(getClassDescriptor())); + JsExpression functionRef = new JsNameRef("unbox", prototypeRef); + + unboxFunction.getBody().getStatements().add(new JsReturn(JsAstUtils.pureFqn(context.getNameForDescriptor(boxee), new JsThisRef()))); + + context.addDeclarationStatement(JsAstUtils.assignment(functionRef, unboxFunction).makeStmt()); + } +} diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java index 581913a57a8..435c13de6d3 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java @@ -526,10 +526,10 @@ public final class TranslationUtils { } } - if (ArrayFIF.INSTANCE.unsignedPrimitiveToSigned(to) != null) { - PrimitiveType fromPrimitive = Objects.requireNonNull(ArrayFIF.INSTANCE.unsignedPrimitiveToSigned(to)); + PrimitiveType signedPrimitiveFromUnsigned = ArrayFIF.INSTANCE.unsignedPrimitiveToSigned(to); + if (signedPrimitiveFromUnsigned != null) { if (KotlinBuiltIns.isInt(from)) { - switch (fromPrimitive) { + switch (signedPrimitiveFromUnsigned) { case BYTE: value = AstUtilsKt.toByte(context, value); break; diff --git a/js/js.translator/testData/box/callableReference/function/functionReferenceName.kt b/js/js.translator/testData/box/callableReference/function/functionReferenceName.kt index 410516b3de0..3e642a7b750 100644 --- a/js/js.translator/testData/box/callableReference/function/functionReferenceName.kt +++ b/js/js.translator/testData/box/callableReference/function/functionReferenceName.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1109 +// EXPECTED_REACHABLE_NODES: 1221 package foo import kotlin.reflect.KFunction diff --git a/js/js.translator/testData/box/callableReference/property/delegated.kt b/js/js.translator/testData/box/callableReference/property/delegated.kt index e88e2ff0463..605d86d6bf1 100644 --- a/js/js.translator/testData/box/callableReference/property/delegated.kt +++ b/js/js.translator/testData/box/callableReference/property/delegated.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1126 +// EXPECTED_REACHABLE_NODES: 1240 // This test was adapted from compiler/testData/codegen/box/callableReference/property/. package foo diff --git a/js/js.translator/testData/box/char/charEquals.kt b/js/js.translator/testData/box/char/charEquals.kt index c2365fa2803..68a58b62d64 100644 --- a/js/js.translator/testData/box/char/charEquals.kt +++ b/js/js.translator/testData/box/char/charEquals.kt @@ -20,4 +20,4 @@ fun box(): String { fun bar(x: Char) = x.equals('Q') -fun baz(x: Any) = x.equals('Q') \ No newline at end of file +fun baz(x: Any) = x.equals('Q') diff --git a/js/js.translator/testData/box/crossModuleRef/objectInInlineClosure.kt b/js/js.translator/testData/box/crossModuleRef/objectInInlineClosure.kt index 4e7ad4b26b7..b318554b3c5 100644 --- a/js/js.translator/testData/box/crossModuleRef/objectInInlineClosure.kt +++ b/js/js.translator/testData/box/crossModuleRef/objectInInlineClosure.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1121 +// EXPECTED_REACHABLE_NODES: 1234 // MODULE: lib // FILE: lib.kt package lib diff --git a/js/js.translator/testData/box/defaultArguments/inheritViaAnotherInterface.kt b/js/js.translator/testData/box/defaultArguments/inheritViaAnotherInterface.kt index 724c25b0c76..a683aedd973 100644 --- a/js/js.translator/testData/box/defaultArguments/inheritViaAnotherInterface.kt +++ b/js/js.translator/testData/box/defaultArguments/inheritViaAnotherInterface.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1147 +// EXPECTED_REACHABLE_NODES: 1270 // FILE: classes.kt class C : J diff --git a/js/js.translator/testData/box/dynamic/getByBrackets.kt b/js/js.translator/testData/box/dynamic/getByBrackets.kt index 9f7750d03bc..d33ed6549c4 100644 --- a/js/js.translator/testData/box/dynamic/getByBrackets.kt +++ b/js/js.translator/testData/box/dynamic/getByBrackets.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1119 +// EXPECTED_REACHABLE_NODES: 1237 package foo fun box(): String { diff --git a/js/js.translator/testData/box/dynamic/setByBrackets.kt b/js/js.translator/testData/box/dynamic/setByBrackets.kt index 87e36e200cd..f7ec878895f 100644 --- a/js/js.translator/testData/box/dynamic/setByBrackets.kt +++ b/js/js.translator/testData/box/dynamic/setByBrackets.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1117 +// EXPECTED_REACHABLE_NODES: 1231 package foo fun box(): String { diff --git a/js/js.translator/testData/box/expression/cast/checkThrowCCE.kt b/js/js.translator/testData/box/expression/cast/checkThrowCCE.kt index b5dd7fc5c84..02d9d4a7d5e 100644 --- a/js/js.translator/testData/box/expression/cast/checkThrowCCE.kt +++ b/js/js.translator/testData/box/expression/cast/checkThrowCCE.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1094 +// EXPECTED_REACHABLE_NODES: 1217 package foo import kotlin.reflect.* diff --git a/js/js.translator/testData/box/expression/cast/implicitCastToLong.kt b/js/js.translator/testData/box/expression/cast/implicitCastToLong.kt index 4ec89db51a1..3c42baa0123 100644 --- a/js/js.translator/testData/box/expression/cast/implicitCastToLong.kt +++ b/js/js.translator/testData/box/expression/cast/implicitCastToLong.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1113 +// EXPECTED_REACHABLE_NODES: 1226 package foo fun box(): String { diff --git a/js/js.translator/testData/box/expression/evaluationOrder/delegationCtorWithExpression.kt b/js/js.translator/testData/box/expression/evaluationOrder/delegationCtorWithExpression.kt index 16cc6575430..9a9ba1db15d 100644 --- a/js/js.translator/testData/box/expression/evaluationOrder/delegationCtorWithExpression.kt +++ b/js/js.translator/testData/box/expression/evaluationOrder/delegationCtorWithExpression.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1124 +// EXPECTED_REACHABLE_NODES: 1237 package foo var c: String = "fail3" diff --git a/js/js.translator/testData/box/expression/for/forIteratesOverArray.kt b/js/js.translator/testData/box/expression/for/forIteratesOverArray.kt index e784781a531..d365eecc1f1 100644 --- a/js/js.translator/testData/box/expression/for/forIteratesOverArray.kt +++ b/js/js.translator/testData/box/expression/for/forIteratesOverArray.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1113 +// EXPECTED_REACHABLE_NODES: 1231 package foo val a1 = arrayOfNulls(10) diff --git a/js/js.translator/testData/box/expression/for/forIteratesOverLiteralRange.kt b/js/js.translator/testData/box/expression/for/forIteratesOverLiteralRange.kt index ffbe81465fd..113e04523e4 100644 --- a/js/js.translator/testData/box/expression/for/forIteratesOverLiteralRange.kt +++ b/js/js.translator/testData/box/expression/for/forIteratesOverLiteralRange.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1115 +// EXPECTED_REACHABLE_NODES: 1230 package foo var global: String = "" diff --git a/js/js.translator/testData/box/expression/try/nestedTryCatchInCatch.kt b/js/js.translator/testData/box/expression/try/nestedTryCatchInCatch.kt index 53a8891555d..d89346bf5ae 100644 --- a/js/js.translator/testData/box/expression/try/nestedTryCatchInCatch.kt +++ b/js/js.translator/testData/box/expression/try/nestedTryCatchInCatch.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1113 +// EXPECTED_REACHABLE_NODES: 1226 package foo class Ex1(val s: String) : Exception() diff --git a/js/js.translator/testData/box/expression/typeCheck/simpleAsInterface.kt b/js/js.translator/testData/box/expression/typeCheck/simpleAsInterface.kt index 6c51cc395fa..1aa321e0286 100644 --- a/js/js.translator/testData/box/expression/typeCheck/simpleAsInterface.kt +++ b/js/js.translator/testData/box/expression/typeCheck/simpleAsInterface.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1232 +// EXPECTED_REACHABLE_NODES: 1356 package foo diff --git a/js/js.translator/testData/box/expression/when/whenWithMapRangeClause.kt b/js/js.translator/testData/box/expression/when/whenWithMapRangeClause.kt index 8c99585d1cc..4585adee2cf 100644 --- a/js/js.translator/testData/box/expression/when/whenWithMapRangeClause.kt +++ b/js/js.translator/testData/box/expression/when/whenWithMapRangeClause.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1096 +// EXPECTED_REACHABLE_NODES: 1211 package foo diff --git a/js/js.translator/testData/box/extensionFunction/extensionFunctionCalledFromFor.kt b/js/js.translator/testData/box/extensionFunction/extensionFunctionCalledFromFor.kt index 7e373845bb7..573608cedaf 100644 --- a/js/js.translator/testData/box/extensionFunction/extensionFunctionCalledFromFor.kt +++ b/js/js.translator/testData/box/extensionFunction/extensionFunctionCalledFromFor.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1106 +// EXPECTED_REACHABLE_NODES: 1219 package foo class SimpleEnumerator { diff --git a/js/js.translator/testData/box/incremental/enumUsage.kt b/js/js.translator/testData/box/incremental/enumUsage.kt index e4d8f9f9d86..c75a2d24e4e 100644 --- a/js/js.translator/testData/box/incremental/enumUsage.kt +++ b/js/js.translator/testData/box/incremental/enumUsage.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1110 +// EXPECTED_REACHABLE_NODES: 1230 // GENERATE_SOURCE_MAPS // FILE: Enum.kt diff --git a/js/js.translator/testData/box/inheritance/interfaces/withDefaultMethodFromSuperInterface.kt b/js/js.translator/testData/box/inheritance/interfaces/withDefaultMethodFromSuperInterface.kt index 66a8fdab2b8..6b457fc8e5f 100644 --- a/js/js.translator/testData/box/inheritance/interfaces/withDefaultMethodFromSuperInterface.kt +++ b/js/js.translator/testData/box/inheritance/interfaces/withDefaultMethodFromSuperInterface.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1120 +// EXPECTED_REACHABLE_NODES: 1235 interface I { fun foo() = "OK" } diff --git a/js/js.translator/testData/box/inheritance/prototypeOrder.kt b/js/js.translator/testData/box/inheritance/prototypeOrder.kt index b04ec7c2367..9a27651f52e 100644 --- a/js/js.translator/testData/box/inheritance/prototypeOrder.kt +++ b/js/js.translator/testData/box/inheritance/prototypeOrder.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1117 +// EXPECTED_REACHABLE_NODES: 1232 package foo class C: B() diff --git a/js/js.translator/testData/box/initialize/complexTopLevelPropertyInitializer.kt b/js/js.translator/testData/box/initialize/complexTopLevelPropertyInitializer.kt index dce080bf85e..fafb38d31c5 100644 --- a/js/js.translator/testData/box/initialize/complexTopLevelPropertyInitializer.kt +++ b/js/js.translator/testData/box/initialize/complexTopLevelPropertyInitializer.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1112 +// EXPECTED_REACHABLE_NODES: 1224 package foo fun f() {} diff --git a/js/js.translator/testData/box/inlineEvaluationOrder/inlineFunctionAsParameterOfQualifiedCall.kt b/js/js.translator/testData/box/inlineEvaluationOrder/inlineFunctionAsParameterOfQualifiedCall.kt index 13f744a3523..51bb2489468 100644 --- a/js/js.translator/testData/box/inlineEvaluationOrder/inlineFunctionAsParameterOfQualifiedCall.kt +++ b/js/js.translator/testData/box/inlineEvaluationOrder/inlineFunctionAsParameterOfQualifiedCall.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1634 +// EXPECTED_REACHABLE_NODES: 1806 // See KT-11711 package foo diff --git a/js/js.translator/testData/box/inlineMultiFile/builders.kt b/js/js.translator/testData/box/inlineMultiFile/builders.kt index 6381fa5974c..518249c554d 100644 --- a/js/js.translator/testData/box/inlineMultiFile/builders.kt +++ b/js/js.translator/testData/box/inlineMultiFile/builders.kt @@ -288,4 +288,4 @@ fun htmlNoInline(init: HTML.() -> Unit): HTML { val html = HTML() html.init() return html -} \ No newline at end of file +} diff --git a/js/js.translator/testData/box/inlineMultiFile/buildersAndLambdaCapturing.kt b/js/js.translator/testData/box/inlineMultiFile/buildersAndLambdaCapturing.kt index fc1d7859466..d9fc57feac6 100644 --- a/js/js.translator/testData/box/inlineMultiFile/buildersAndLambdaCapturing.kt +++ b/js/js.translator/testData/box/inlineMultiFile/buildersAndLambdaCapturing.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1520 +// EXPECTED_REACHABLE_NODES: 1681 /* * Copy of JVM-backend test * Found at: compiler/testData/codegen/boxInline/builders/buildersAndLambdaCapturing.1.kt diff --git a/js/js.translator/testData/box/inlineMultiModule/inlineMemberFunWithLambda.kt b/js/js.translator/testData/box/inlineMultiModule/inlineMemberFunWithLambda.kt index d858338a702..329ac96c623 100644 --- a/js/js.translator/testData/box/inlineMultiModule/inlineMemberFunWithLambda.kt +++ b/js/js.translator/testData/box/inlineMultiModule/inlineMemberFunWithLambda.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1132 +// EXPECTED_REACHABLE_NODES: 1249 // LANGUAGE_VERSION: 1.2 // MODULE: lib // FILE: lib.kt diff --git a/js/js.translator/testData/box/inlineStdlib/closureInObjectLiteral.kt b/js/js.translator/testData/box/inlineStdlib/closureInObjectLiteral.kt index 252a09596b5..254ab06feb7 100644 --- a/js/js.translator/testData/box/inlineStdlib/closureInObjectLiteral.kt +++ b/js/js.translator/testData/box/inlineStdlib/closureInObjectLiteral.kt @@ -14,4 +14,4 @@ fun box(): String { assertEquals(listOf(1, -2, 3, -4), test(listOf(-2, 1, -4, 3))) return "OK" -} \ No newline at end of file +} diff --git a/js/js.translator/testData/box/kotlin.test/returnTestResult.kt b/js/js.translator/testData/box/kotlin.test/returnTestResult.kt index 359474d77a3..76f02b3e427 100644 --- a/js/js.translator/testData/box/kotlin.test/returnTestResult.kt +++ b/js/js.translator/testData/box/kotlin.test/returnTestResult.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1178 +// EXPECTED_REACHABLE_NODES: 1297 import kotlin.test.Test import kotlin.test.BeforeTest import kotlin.test.AfterTest diff --git a/js/js.translator/testData/box/multiModule/privateInterfaceNameClash.kt b/js/js.translator/testData/box/multiModule/privateInterfaceNameClash.kt index 030659942a1..6a0514bc950 100644 --- a/js/js.translator/testData/box/multiModule/privateInterfaceNameClash.kt +++ b/js/js.translator/testData/box/multiModule/privateInterfaceNameClash.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1653 +// EXPECTED_REACHABLE_NODES: 1819 // MODULE: lib1 // FILE: lib1.kt package lib1 diff --git a/js/js.translator/testData/box/multiModule/privateNameClash.kt b/js/js.translator/testData/box/multiModule/privateNameClash.kt index eb2cf4f705a..5c862dfe9f5 100644 --- a/js/js.translator/testData/box/multiModule/privateNameClash.kt +++ b/js/js.translator/testData/box/multiModule/privateNameClash.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1638 +// EXPECTED_REACHABLE_NODES: 1805 // MODULE: lib // FILE: lib.kt package lib diff --git a/js/js.translator/testData/box/multideclaration/multiValForMap.kt b/js/js.translator/testData/box/multideclaration/multiValForMap.kt index 49fbbb1a5f3..2ea3a107021 100644 --- a/js/js.translator/testData/box/multideclaration/multiValForMap.kt +++ b/js/js.translator/testData/box/multideclaration/multiValForMap.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1098 +// EXPECTED_REACHABLE_NODES: 1211 package foo diff --git a/js/js.translator/testData/box/multideclaration/multiValForRange.kt b/js/js.translator/testData/box/multideclaration/multiValForRange.kt index bd2d8705f86..b9d73ddd17e 100644 --- a/js/js.translator/testData/box/multideclaration/multiValForRange.kt +++ b/js/js.translator/testData/box/multideclaration/multiValForRange.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1123 +// EXPECTED_REACHABLE_NODES: 1236 package foo class C(val i: Int) : Comparable, A() { diff --git a/js/js.translator/testData/box/number/conversionsWithTruncation.kt b/js/js.translator/testData/box/number/conversionsWithTruncation.kt index b1d807ef643..c37edea1fa0 100644 --- a/js/js.translator/testData/box/number/conversionsWithTruncation.kt +++ b/js/js.translator/testData/box/number/conversionsWithTruncation.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1114 +// EXPECTED_REACHABLE_NODES: 1227 package foo fun box(): String { diff --git a/js/js.translator/testData/box/number/longBinaryOperations.kt b/js/js.translator/testData/box/number/longBinaryOperations.kt index 023af42ac52..b8fe2c9c691 100644 --- a/js/js.translator/testData/box/number/longBinaryOperations.kt +++ b/js/js.translator/testData/box/number/longBinaryOperations.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS_IR -// EXPECTED_REACHABLE_NODES: 1114 +// EXPECTED_REACHABLE_NODES: 1230 package foo fun fact(n: Int): Long = if (n == 1) 1L else n * fact(n - 1) diff --git a/js/js.translator/testData/box/number/longBitOperations.kt b/js/js.translator/testData/box/number/longBitOperations.kt index 0644b09c46a..b32b77bbea5 100644 --- a/js/js.translator/testData/box/number/longBitOperations.kt +++ b/js/js.translator/testData/box/number/longBitOperations.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1112 +// EXPECTED_REACHABLE_NODES: 1228 package foo fun box(): String { diff --git a/js/js.translator/testData/box/number/longCompareToIntrinsic.kt b/js/js.translator/testData/box/number/longCompareToIntrinsic.kt index 351c34a30c9..3e228384021 100644 --- a/js/js.translator/testData/box/number/longCompareToIntrinsic.kt +++ b/js/js.translator/testData/box/number/longCompareToIntrinsic.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1114 +// EXPECTED_REACHABLE_NODES: 1226 package foo fun box(): String { diff --git a/js/js.translator/testData/box/number/longUnaryOperations.kt b/js/js.translator/testData/box/number/longUnaryOperations.kt index 1098dbfa07d..daaa14cbec0 100644 --- a/js/js.translator/testData/box/number/longUnaryOperations.kt +++ b/js/js.translator/testData/box/number/longUnaryOperations.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1112 +// EXPECTED_REACHABLE_NODES: 1225 package foo fun box(): String { diff --git a/js/js.translator/testData/box/reflection/external.kt b/js/js.translator/testData/box/reflection/external.kt index 07060d59df5..6035b58fb3d 100644 --- a/js/js.translator/testData/box/reflection/external.kt +++ b/js/js.translator/testData/box/reflection/external.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1099 +// EXPECTED_REACHABLE_NODES: 1221 external class A external object O diff --git a/js/js.translator/testData/box/simple/primCtorDelegation1.kt b/js/js.translator/testData/box/simple/primCtorDelegation1.kt index 34ec11623db..84c7cc1a8cf 100644 --- a/js/js.translator/testData/box/simple/primCtorDelegation1.kt +++ b/js/js.translator/testData/box/simple/primCtorDelegation1.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1114 +// EXPECTED_REACHABLE_NODES: 1228 package foo open class Base(val bb: String) { diff --git a/js/js.translator/testData/box/simple/secCtorDelegation1.kt b/js/js.translator/testData/box/simple/secCtorDelegation1.kt index 17420009a26..41893de16af 100644 --- a/js/js.translator/testData/box/simple/secCtorDelegation1.kt +++ b/js/js.translator/testData/box/simple/secCtorDelegation1.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1114 +// EXPECTED_REACHABLE_NODES: 1230 package foo open class Base { diff --git a/js/js.translator/testData/box/simple/secCtorDelegation2.kt b/js/js.translator/testData/box/simple/secCtorDelegation2.kt index a9283819445..18f39f1f508 100644 --- a/js/js.translator/testData/box/simple/secCtorDelegation2.kt +++ b/js/js.translator/testData/box/simple/secCtorDelegation2.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1114 +// EXPECTED_REACHABLE_NODES: 1230 package foo open class Base(val bs: String) { diff --git a/js/js.translator/testData/box/simple/secCtorDelegation3.kt b/js/js.translator/testData/box/simple/secCtorDelegation3.kt index a2fd366497b..b4ba0469776 100644 --- a/js/js.translator/testData/box/simple/secCtorDelegation3.kt +++ b/js/js.translator/testData/box/simple/secCtorDelegation3.kt @@ -1,4 +1,4 @@ -// EXPECTED_REACHABLE_NODES: 1114 +// EXPECTED_REACHABLE_NODES: 1231 package foo open class Base {