JS: fix unsigned literal inlining

This commit is contained in:
Anton Bannykh
2018-09-18 20:55:19 +03:00
parent 7ff72e9d90
commit 6736987239
4 changed files with 34 additions and 2 deletions
@@ -3820,6 +3820,11 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
runTest("js/js.translator/testData/box/inline/continueInLoopWithInlinableCondition.kt");
}
@TestMetadata("crossModuleUnsignedLiterals.kt")
public void testCrossModuleUnsignedLiterals() throws Exception {
runTest("js/js.translator/testData/box/inline/crossModuleUnsignedLiterals.kt");
}
@TestMetadata("dontInlineFunctionCall.kt")
public void testDontInlineFunctionCall() throws Exception {
runTest("js/js.translator/testData/box/inline/dontInlineFunctionCall.kt");
@@ -3820,6 +3820,11 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/inline/continueInLoopWithInlinableCondition.kt");
}
@TestMetadata("crossModuleUnsignedLiterals.kt")
public void testCrossModuleUnsignedLiterals() throws Exception {
runTest("js/js.translator/testData/box/inline/crossModuleUnsignedLiterals.kt");
}
@TestMetadata("dontInlineFunctionCall.kt")
public void testDontInlineFunctionCall() throws Exception {
runTest("js/js.translator/testData/box/inline/dontInlineFunctionCall.kt");
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.js.backend.ast.metadata.MetadataProperties;
import org.jetbrains.kotlin.js.backend.ast.metadata.SideEffectKind;
import org.jetbrains.kotlin.js.translate.context.Namer;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.reference.ReferenceTranslator;
import org.jetbrains.kotlin.name.ClassId;
import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt;
import org.jetbrains.kotlin.util.OperatorNameConventions;
@@ -255,8 +256,7 @@ public final class JsAstUtils {
ClassDescriptor classDescriptor = findClassAcrossModuleDependencies(context.getCurrentModule(), unsignedClassId);
assert classDescriptor != null : "Class descriptor is null for " + unsignedClassId;
JsName descName = context.getInnerNameForDescriptor(classDescriptor);
return new JsNew(descName.makeRef(), Collections.singletonList(expression));
return new JsNew(ReferenceTranslator.translateAsTypeReference(classDescriptor, context), Collections.singletonList(expression));
}
@NotNull
@@ -0,0 +1,22 @@
// IGNORE_BACKEND: JS_IR
// EXPECTED_REACHABLE_NODES: 1625
// MODULE: lib
// FILE: lib.kt
inline fun tenUInt() = 10U
inline fun tenULong() = 10UL
// MODULE: main(lib)
// FILE: main.kt
fun box(): String {
if (tenUInt() != 10U) return "fail 1"
if (tenULong() != 10UL) return "fail 2"
return "OK"
}