JS: equals, hashCode, toString support in inline classes
This commit is contained in:
committed by
Ilya Gorbunov
parent
a8596a9cd6
commit
a11c4871ea
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR, JS_IR, JS
|
||||
// IGNORE_BACKEND: JVM_IR, JS_IR
|
||||
|
||||
inline class InlineFloat(val data: Float)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR, JS
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class Z(val value: Int)
|
||||
|
||||
|
||||
+3
-2
@@ -126,8 +126,9 @@ class ClassTranslator private constructor(
|
||||
addSuperclassReferences()
|
||||
classDeclaration.secondaryConstructors.forEach { generateSecondaryConstructor(context, it) }
|
||||
|
||||
if (descriptor.isData && classDeclaration is KtClassOrObject) {
|
||||
JsDataClassGenerator(classDeclaration, context).generate()
|
||||
if ((descriptor.isData || descriptor.isInline) && classDeclaration is KtClassOrObject) {
|
||||
// TODO is `inline data class` a bug or a feature?
|
||||
JsDataClassGenerator(classDeclaration, context, !descriptor.isData).generate()
|
||||
}
|
||||
|
||||
emitConstructors(nonConstructorContext, nonConstructorContext.endDeclaration())
|
||||
|
||||
+8
-1
@@ -41,13 +41,18 @@ import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.or;
|
||||
class JsDataClassGenerator extends DataClassMethodGenerator {
|
||||
private final TranslationContext context;
|
||||
|
||||
JsDataClassGenerator(KtClassOrObject klass, 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 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";
|
||||
|
||||
@@ -60,6 +65,8 @@ class JsDataClassGenerator extends DataClassMethodGenerator {
|
||||
|
||||
@Override
|
||||
public void generateCopyFunction(@NotNull FunctionDescriptor function, @NotNull List<? extends KtParameter> constructorParameters) {
|
||||
if (isInline) return;
|
||||
|
||||
JsFunction functionObj = generateJsMethod(function);
|
||||
|
||||
assert function.getValueParameters().size() == constructorParameters.size();
|
||||
|
||||
Reference in New Issue
Block a user