JS backend: fixed an equals behavior after it became a member of jet.Any.

This commit is contained in:
Zalim Bashorov
2014-02-06 19:00:54 +04:00
committed by Alexander Udalov
parent b8ec50f38c
commit 6127d53eac
2 changed files with 9 additions and 6 deletions
@@ -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);
@@ -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;
} }