JS/RTTI: removed Kotlin.orNull(Kotlin.isAny) optimization

This commit is contained in:
Alexey Tsvetkov
2015-06-24 17:59:19 +03:00
committed by Alexey Andreev
parent f7af868d4f
commit fcd941ad49
3 changed files with 3 additions and 16 deletions
@@ -36,8 +36,6 @@ var JsFunction.isLocal: Boolean by MetadataProperty(default = false)
var JsParameter.hasDefaultValue: Boolean by MetadataProperty(default = false)
var JsConditional.isCastExpression: Boolean by MetadataProperty(default = false)
var JsInvocation.typeCheck: TypeCheck? by MetadataProperty(default = null)
/**
@@ -87,9 +87,7 @@ public final class PatternTranslator extends AbstractTranslator {
onFail = new JsInvocation(throwCCEFunRef);
}
JsConditional conditional = new JsConditional(isCheck, temporary.reference(), onFail);
MetadataProperties.setCastExpression(conditional, true);
return conditional;
return new JsConditional(isCheck, temporary.reference(), onFail);
}
@NotNull
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.js.translate.utils
import com.google.dart.compiler.backend.js.ast.*
import com.google.dart.compiler.backend.js.ast.metadata.TypeCheck
import com.google.dart.compiler.backend.js.ast.metadata.isCastExpression
import com.google.dart.compiler.backend.js.ast.metadata.typeCheck
import org.jetbrains.kotlin.js.inline.util.IdentitySet
import org.jetbrains.kotlin.js.translate.context.TranslationContext
@@ -54,12 +53,6 @@ private class TypeCheckRewritingVisitor(private val context: TranslationContext)
override fun endVisit(x: JsConditional, ctx: JsContext<JsNode>) {
val test = x.testExpression
if (x.isCastExpression &&
test is JsBinaryOperation &&
test.operator == JsBinaryOperator.ASG
) {
ctx.replaceMe(test.arg2)
}
}
override fun visit(x: JsInvocation, ctx: JsContext<JsNode>): Boolean {
@@ -102,10 +95,8 @@ private class TypeCheckRewritingVisitor(private val context: TranslationContext)
// `Kotlin.orNull(calleeArgument)(argument)` -> `(tmp = argument) == null || calleeArgument(tmp)`
if (callee.typeCheck == TypeCheck.OR_NULL) {
if (calleeArgument is JsInvocation) {
if (calleeArgument.typeCheck == TypeCheck.OR_NULL) return JsInvocation(calleeArgument, argument)
if (calleeArgument.typeCheck == TypeCheck.IS_ANY) return argument
if (calleeArgument is JsInvocation && calleeArgument.typeCheck == TypeCheck.OR_NULL) {
return JsInvocation(calleeArgument, argument)
}
var nullCheckTarget = argument