JS: support signed constant expressions as unsigned primitive arguments
This commit is contained in:
committed by
Ilya Gorbunov
parent
934e11aa60
commit
6103df0b31
+1
-1
@@ -1,5 +1,5 @@
|
||||
// WITH_UNSIGNED
|
||||
// IGNORE_BACKEND: JS_IR, JVM_IR, JS
|
||||
// IGNORE_BACKEND: JS_IR, JVM_IR
|
||||
|
||||
fun takeUByte(u: UByte) = u.toByte()
|
||||
fun takeUShort(u: UShort) = u.toShort()
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.builtins.FunctionTypesKt;
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||
import org.jetbrains.kotlin.builtins.PrimitiveType;
|
||||
import org.jetbrains.kotlin.config.CoroutineLanguageVersionSettingsUtilKt;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor;
|
||||
@@ -26,7 +27,9 @@ import org.jetbrains.kotlin.js.translate.context.TemporaryConstVariable;
|
||||
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
|
||||
import org.jetbrains.kotlin.js.translate.expression.InlineMetadata;
|
||||
import org.jetbrains.kotlin.js.translate.general.Translation;
|
||||
import org.jetbrains.kotlin.js.translate.intrinsic.functions.factories.ArrayFIF;
|
||||
import org.jetbrains.kotlin.js.translate.reference.ReferenceTranslator;
|
||||
import org.jetbrains.kotlin.js.translate.utils.jsAstUtils.AstUtilsKt;
|
||||
import org.jetbrains.kotlin.name.ClassId;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe;
|
||||
@@ -523,6 +526,25 @@ public final class TranslationUtils {
|
||||
}
|
||||
}
|
||||
|
||||
if (ArrayFIF.INSTANCE.unsignedPrimitiveToSigned(to) != null) {
|
||||
PrimitiveType fromPrimitive = Objects.requireNonNull(ArrayFIF.INSTANCE.unsignedPrimitiveToSigned(to));
|
||||
if (KotlinBuiltIns.isInt(from)) {
|
||||
switch (fromPrimitive) {
|
||||
case BYTE:
|
||||
value = AstUtilsKt.toByte(context, value);
|
||||
break;
|
||||
case SHORT:
|
||||
value = AstUtilsKt.toShort(context, value);
|
||||
break;
|
||||
}
|
||||
DeclarationDescriptor d = to.getConstructor().getDeclarationDescriptor();
|
||||
if (d instanceof ClassDescriptor) {
|
||||
value = new JsNew(ReferenceTranslator.translateAsTypeReference((ClassDescriptor) d, context),
|
||||
Collections.singletonList(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MetadataProperties.setType(value, to);
|
||||
return value;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user