diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java index 00f63a17a50..e78eb9e0f26 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java @@ -34,6 +34,7 @@ import org.jetbrains.k2js.translate.callTranslator.CallInfo; import org.jetbrains.k2js.translate.context.Namer; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; +import org.jetbrains.k2js.translate.intrinsic.functions.patterns.DescriptorPredicate; import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate; import org.jetbrains.k2js.translate.utils.AnnotationsUtils; import org.jetbrains.k2js.translate.utils.BindingUtils; @@ -45,8 +46,9 @@ import static org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionInt import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternBuilder.pattern; public final class TopLevelFIF extends CompositeFIF { + public static final DescriptorPredicate EQUALS_IN_ANY = pattern("jet", "Any", "equals"); @NotNull - public static final KotlinFunctionIntrinsic EQUALS = new KotlinFunctionIntrinsic("equals"); + public static final KotlinFunctionIntrinsic KOTLIN_EQUALS = new KotlinFunctionIntrinsic("equals"); @NotNull public static final FunctionIntrinsic IDENTITY_EQUALS = new FunctionIntrinsic() { @NotNull @@ -138,11 +140,12 @@ public final class TopLevelFIF extends CompositeFIF { public static final FunctionIntrinsicFactory INSTANCE = new TopLevelFIF(); private TopLevelFIF() { + add(EQUALS_IN_ANY, KOTLIN_EQUALS); add(pattern("jet", "toString").receiverExists(), TO_STRING); - add(pattern("jet", "equals").receiverExists(), EQUALS); + add(pattern("jet", "equals").receiverExists(), KOTLIN_EQUALS); add(pattern("jet", "identityEquals").receiverExists(), IDENTITY_EQUALS); - add(pattern(NamePredicate.PRIMITIVE_NUMBERS, "equals"), EQUALS); - add(pattern("String|Boolean|Char|Number.equals"), EQUALS); + add(pattern(NamePredicate.PRIMITIVE_NUMBERS, "equals"), KOTLIN_EQUALS); + add(pattern("String|Boolean|Char|Number.equals"), KOTLIN_EQUALS); add(pattern("jet", "arrayOfNulls"), new KotlinFunctionIntrinsic("nullArray")); add(pattern("jet", "PropertyMetadataImpl", ""), PROPERTY_METADATA_IMPL); add(pattern("jet", "iterator").receiverExists(), RETURN_RECEIVER_INTRINSIC); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/operation/EqualsIntrinsic.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/operation/EqualsIntrinsic.java index bc881b55e96..6860181155f 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/operation/EqualsIntrinsic.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/operation/EqualsIntrinsic.java @@ -48,7 +48,7 @@ public final class EqualsIntrinsic implements BinaryOperationIntrinsic { } FunctionDescriptor functionDescriptor = getFunctionDescriptorForOperationExpression(context.bindingContext(), expression); assert functionDescriptor != null; - return JsDescriptorUtils.isBuiltin(functionDescriptor); + return JsDescriptorUtils.isBuiltin(functionDescriptor) || TopLevelFIF.EQUALS_IN_ANY.apply(functionDescriptor); } @Override @@ -65,7 +65,7 @@ public final class EqualsIntrinsic implements BinaryOperationIntrinsic { return new JsBinaryOperation(isNegated ? JsBinaryOperator.REF_NEQ : JsBinaryOperator.REF_EQ, left, right); } - JsExpression result = TopLevelFIF.EQUALS.apply(left, Arrays.asList(right), context); + JsExpression result = TopLevelFIF.KOTLIN_EQUALS.apply(left, Arrays.asList(right), context); return isNegated ? JsAstUtils.negated(result) : result; }