JS backend: fixed an equals behavior after it became a member of jet.Any.
This commit is contained in:
committed by
Alexander Udalov
parent
b8ec50f38c
commit
6127d53eac
+7
-4
@@ -34,6 +34,7 @@ import org.jetbrains.k2js.translate.callTranslator.CallInfo;
|
|||||||
import org.jetbrains.k2js.translate.context.Namer;
|
import org.jetbrains.k2js.translate.context.Namer;
|
||||||
import org.jetbrains.k2js.translate.context.TranslationContext;
|
import org.jetbrains.k2js.translate.context.TranslationContext;
|
||||||
import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic;
|
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.intrinsic.functions.patterns.NamePredicate;
|
||||||
import org.jetbrains.k2js.translate.utils.AnnotationsUtils;
|
import org.jetbrains.k2js.translate.utils.AnnotationsUtils;
|
||||||
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
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;
|
import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternBuilder.pattern;
|
||||||
|
|
||||||
public final class TopLevelFIF extends CompositeFIF {
|
public final class TopLevelFIF extends CompositeFIF {
|
||||||
|
public static final DescriptorPredicate EQUALS_IN_ANY = pattern("jet", "Any", "equals");
|
||||||
@NotNull
|
@NotNull
|
||||||
public static final KotlinFunctionIntrinsic EQUALS = new KotlinFunctionIntrinsic("equals");
|
public static final KotlinFunctionIntrinsic KOTLIN_EQUALS = new KotlinFunctionIntrinsic("equals");
|
||||||
@NotNull
|
@NotNull
|
||||||
public static final FunctionIntrinsic IDENTITY_EQUALS = new FunctionIntrinsic() {
|
public static final FunctionIntrinsic IDENTITY_EQUALS = new FunctionIntrinsic() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -138,11 +140,12 @@ public final class TopLevelFIF extends CompositeFIF {
|
|||||||
public static final FunctionIntrinsicFactory INSTANCE = new TopLevelFIF();
|
public static final FunctionIntrinsicFactory INSTANCE = new TopLevelFIF();
|
||||||
|
|
||||||
private TopLevelFIF() {
|
private TopLevelFIF() {
|
||||||
|
add(EQUALS_IN_ANY, KOTLIN_EQUALS);
|
||||||
add(pattern("jet", "toString").receiverExists(), TO_STRING);
|
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("jet", "identityEquals").receiverExists(), IDENTITY_EQUALS);
|
||||||
add(pattern(NamePredicate.PRIMITIVE_NUMBERS, "equals"), EQUALS);
|
add(pattern(NamePredicate.PRIMITIVE_NUMBERS, "equals"), KOTLIN_EQUALS);
|
||||||
add(pattern("String|Boolean|Char|Number.equals"), EQUALS);
|
add(pattern("String|Boolean|Char|Number.equals"), KOTLIN_EQUALS);
|
||||||
add(pattern("jet", "arrayOfNulls"), new KotlinFunctionIntrinsic("nullArray"));
|
add(pattern("jet", "arrayOfNulls"), new KotlinFunctionIntrinsic("nullArray"));
|
||||||
add(pattern("jet", "PropertyMetadataImpl", "<init>"), PROPERTY_METADATA_IMPL);
|
add(pattern("jet", "PropertyMetadataImpl", "<init>"), PROPERTY_METADATA_IMPL);
|
||||||
add(pattern("jet", "iterator").receiverExists(), RETURN_RECEIVER_INTRINSIC);
|
add(pattern("jet", "iterator").receiverExists(), RETURN_RECEIVER_INTRINSIC);
|
||||||
|
|||||||
+2
-2
@@ -48,7 +48,7 @@ public final class EqualsIntrinsic implements BinaryOperationIntrinsic {
|
|||||||
}
|
}
|
||||||
FunctionDescriptor functionDescriptor = getFunctionDescriptorForOperationExpression(context.bindingContext(), expression);
|
FunctionDescriptor functionDescriptor = getFunctionDescriptorForOperationExpression(context.bindingContext(), expression);
|
||||||
assert functionDescriptor != null;
|
assert functionDescriptor != null;
|
||||||
return JsDescriptorUtils.isBuiltin(functionDescriptor);
|
return JsDescriptorUtils.isBuiltin(functionDescriptor) || TopLevelFIF.EQUALS_IN_ANY.apply(functionDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -65,7 +65,7 @@ public final class EqualsIntrinsic implements BinaryOperationIntrinsic {
|
|||||||
return new JsBinaryOperation(isNegated ? JsBinaryOperator.REF_NEQ : JsBinaryOperator.REF_EQ, left, right);
|
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;
|
return isNegated ? JsAstUtils.negated(result) : result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user