Drop ID property which would be unsupported

This commit is contained in:
Pavel V. Talanov
2015-10-13 14:19:43 +03:00
parent 2e75f7f103
commit 3468e83671
5 changed files with 29 additions and 33 deletions
@@ -51,9 +51,8 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils.*
import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.JetType
import org.jetbrains.kotlin.types.TypeConstructor import org.jetbrains.kotlin.types.TypeConstructor
import org.jetbrains.kotlin.types.TypeUtils.topologicallySortSuperclassesAndRecordAllInstances import org.jetbrains.kotlin.types.TypeUtils.topologicallySortSuperclassesAndRecordAllInstances
import java.util.ArrayList import org.jetbrains.kotlin.utils.identity
import java.util.HashMap import java.util.*
import java.util.HashSet
/** /**
* Generates a definition of a single class. * Generates a definition of a single class.
@@ -243,7 +242,7 @@ public class ClassTranslator private constructor(
private fun generateOtherBridges(properties: MutableList<JsPropertyInitializer>) { private fun generateOtherBridges(properties: MutableList<JsPropertyInitializer>) {
for (memberDescriptor in descriptor.getDefaultType().getMemberScope().getAllDescriptors()) { for (memberDescriptor in descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
if (memberDescriptor is FunctionDescriptor) { if (memberDescriptor is FunctionDescriptor) {
val bridgesToGenerate = generateBridgesForFunctionDescriptor<FunctionDescriptor>(memberDescriptor, ID) val bridgesToGenerate = generateBridgesForFunctionDescriptor(memberDescriptor, identity())
for (bridge in bridgesToGenerate) { for (bridge in bridgesToGenerate) {
generateBridge(bridge, properties) generateBridge(bridge, properties)
@@ -16,14 +16,14 @@
package org.jetbrains.kotlin.js.translate.intrinsic.functions.factories package org.jetbrains.kotlin.js.translate.intrinsic.functions.factories
import com.google.dart.compiler.backend.js.ast.* import com.google.dart.compiler.backend.js.ast.JsExpression
import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.context.Namer import org.jetbrains.kotlin.js.translate.context.Namer
import org.jetbrains.kotlin.js.translate.context.TranslationContext import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic
import org.jetbrains.kotlin.js.translate.utils.ID
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.* import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.*
import org.jetbrains.kotlin.utils.identity as ID
// TODO Move to FunctionCallCases // TODO Move to FunctionCallCases
public object LongOperationFIF : FunctionIntrinsicFactory { public object LongOperationFIF : FunctionIntrinsicFactory {
@@ -88,17 +88,17 @@ public object LongOperationFIF : FunctionIntrinsicFactory {
LONG_EQUALS_ANY.apply(descriptor) || LONG_BINARY_OPERATION_LONG.apply(descriptor) || LONG_BIT_SHIFTS.apply(descriptor) -> LONG_EQUALS_ANY.apply(descriptor) || LONG_BINARY_OPERATION_LONG.apply(descriptor) || LONG_BIT_SHIFTS.apply(descriptor) ->
longBinaryIntrinsics[operationName] longBinaryIntrinsics[operationName]
INTEGER_BINARY_OPERATION_LONG.apply(descriptor) -> INTEGER_BINARY_OPERATION_LONG.apply(descriptor) ->
wrapIntrinsicIfPresent(longBinaryIntrinsics[operationName], { longFromInt(it) }, ID) wrapIntrinsicIfPresent(longBinaryIntrinsics[operationName], { longFromInt(it) }, ID())
LONG_BINARY_OPERATION_INTEGER.apply(descriptor) -> LONG_BINARY_OPERATION_INTEGER.apply(descriptor) ->
wrapIntrinsicIfPresent(longBinaryIntrinsics[operationName], ID, { longFromInt(it) }) wrapIntrinsicIfPresent(longBinaryIntrinsics[operationName], ID(), { longFromInt(it) })
CHAR_BINARY_OPERATION_LONG.apply(descriptor) -> CHAR_BINARY_OPERATION_LONG.apply(descriptor) ->
wrapIntrinsicIfPresent(longBinaryIntrinsics[operationName], { longFromInt(charToInt(it)) }, ID) wrapIntrinsicIfPresent(longBinaryIntrinsics[operationName], { longFromInt(charToInt(it)) }, ID())
LONG_BINARY_OPERATION_CHAR.apply(descriptor) -> LONG_BINARY_OPERATION_CHAR.apply(descriptor) ->
wrapIntrinsicIfPresent(longBinaryIntrinsics[operationName], ID, { longFromInt(charToInt(it)) }) wrapIntrinsicIfPresent(longBinaryIntrinsics[operationName], ID(), { longFromInt(charToInt(it)) })
FLOATING_POINT_BINARY_OPERATION_LONG.apply(descriptor) -> FLOATING_POINT_BINARY_OPERATION_LONG.apply(descriptor) ->
wrapIntrinsicIfPresent(floatBinaryIntrinsics[operationName], ID, { invokeMethod(it, Namer.LONG_TO_NUMBER) }) wrapIntrinsicIfPresent(floatBinaryIntrinsics[operationName], ID(), { invokeMethod(it, Namer.LONG_TO_NUMBER) })
LONG_BINARY_OPERATION_FLOATING_POINT.apply(descriptor) -> LONG_BINARY_OPERATION_FLOATING_POINT.apply(descriptor) ->
wrapIntrinsicIfPresent(floatBinaryIntrinsics[operationName], { invokeMethod(it, Namer.LONG_TO_NUMBER) }, ID) wrapIntrinsicIfPresent(floatBinaryIntrinsics[operationName], { invokeMethod(it, Namer.LONG_TO_NUMBER) }, ID())
else -> else ->
null null
} }
@@ -21,8 +21,8 @@ import com.google.dart.compiler.backend.js.ast.JsExpression
import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.context.TranslationContext import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic
import org.jetbrains.kotlin.js.translate.utils.ID
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.* import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.*
import org.jetbrains.kotlin.utils.identity
public object NumberAndCharConversionFIF : CompositeFIF() { public object NumberAndCharConversionFIF : CompositeFIF() {
val USE_AS_IS = Predicates.or( val USE_AS_IS = Predicates.or(
@@ -71,7 +71,7 @@ public object NumberAndCharConversionFIF : CompositeFIF() {
} }
init { init {
add(USE_AS_IS!!, ConversionUnaryIntrinsic(ID)) add(USE_AS_IS!!, ConversionUnaryIntrinsic(identity()))
for((stringPattern, intrinsic) in convertOperations) { for((stringPattern, intrinsic) in convertOperations) {
add(pattern(stringPattern), intrinsic) add(pattern(stringPattern), intrinsic)
} }
@@ -16,20 +16,23 @@
package org.jetbrains.kotlin.js.translate.intrinsic.operation package org.jetbrains.kotlin.js.translate.intrinsic.operation
import com.google.common.collect.ImmutableSet import com.google.dart.compiler.backend.js.ast.JsBinaryOperation
import com.google.dart.compiler.backend.js.ast.* import com.google.dart.compiler.backend.js.ast.JsExpression
import com.google.dart.compiler.backend.js.ast.JsNumberLiteral
import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.psi.JetBinaryExpression
import org.jetbrains.kotlin.types.expressions.OperatorConventions
import org.jetbrains.kotlin.lexer.JetToken
import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.context.Namer import org.jetbrains.kotlin.js.translate.context.Namer
import org.jetbrains.kotlin.js.translate.context.TranslationContext import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.operation.OperatorTable import org.jetbrains.kotlin.js.translate.operation.OperatorTable
import org.jetbrains.kotlin.js.translate.utils.ID import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.charToInt
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.* import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.compareForObject
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.invokeMethod
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.longFromInt
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils
import org.jetbrains.kotlin.js.translate.utils.PsiUtils.getOperationToken import org.jetbrains.kotlin.js.translate.utils.PsiUtils.getOperationToken
import org.jetbrains.kotlin.psi.JetBinaryExpression
import org.jetbrains.kotlin.types.expressions.OperatorConventions
import org.jetbrains.kotlin.utils.identity as ID
public object LongCompareToBOIF : BinaryOperationIntrinsicFactory { public object LongCompareToBOIF : BinaryOperationIntrinsicFactory {
@@ -63,11 +66,11 @@ public object LongCompareToBOIF : BinaryOperationIntrinsicFactory {
} }
} }
private val INTEGER_COMPARE_TO_LONG = CompareToBinaryIntrinsic( { longFromInt(it) }, ID) private val INTEGER_COMPARE_TO_LONG = CompareToBinaryIntrinsic( { longFromInt(it) }, ID())
private val CHAR_COMPARE_TO_LONG = CompareToBinaryIntrinsic( { longFromInt(charToInt(it)) }, ID) private val CHAR_COMPARE_TO_LONG = CompareToBinaryIntrinsic( { longFromInt(charToInt(it)) }, ID())
private val LONG_COMPARE_TO_INTEGER = CompareToBinaryIntrinsic( ID, { longFromInt(it) }) private val LONG_COMPARE_TO_INTEGER = CompareToBinaryIntrinsic( ID(), { longFromInt(it) })
private val LONG_COMPARE_TO_CHAR = CompareToBinaryIntrinsic( ID, { longFromInt(charToInt(it)) }) private val LONG_COMPARE_TO_CHAR = CompareToBinaryIntrinsic( ID(), { longFromInt(charToInt(it)) })
private val LONG_COMPARE_TO_LONG = CompareToBinaryIntrinsic( ID, ID ) private val LONG_COMPARE_TO_LONG = CompareToBinaryIntrinsic( ID(), ID() )
override public fun getSupportTokens() = OperatorConventions.COMPARISON_OPERATIONS override public fun getSupportTokens() = OperatorConventions.COMPARISON_OPERATIONS
@@ -16,11 +16,7 @@
package org.jetbrains.kotlin.js.translate.utils package org.jetbrains.kotlin.js.translate.utils
import com.google.dart.compiler.backend.js.ast.JsExpression import com.google.dart.compiler.backend.js.ast.*
import com.google.dart.compiler.backend.js.ast.JsInvocation
import com.google.dart.compiler.backend.js.ast.JsNameRef
import com.google.dart.compiler.backend.js.ast.JsParameter
import com.google.dart.compiler.backend.js.ast.JsPropertyInitializer
import com.intellij.util.SmartList import com.intellij.util.SmartList
import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.js.translate.context.Namer import org.jetbrains.kotlin.js.translate.context.Namer
@@ -28,8 +24,6 @@ import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils.simpleReturnFunction import org.jetbrains.kotlin.js.translate.utils.TranslationUtils.simpleReturnFunction
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
public val <T> ID: (T) -> T = { it }
public fun generateDelegateCall( public fun generateDelegateCall(
fromDescriptor: FunctionDescriptor, fromDescriptor: FunctionDescriptor,
toDescriptor: FunctionDescriptor, toDescriptor: FunctionDescriptor,