JS: refactor FunctionIntrinsic
This commit is contained in:
-47
@@ -1,47 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.js.translate.intrinsic.functions.basic;
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.js.backend.ast.JsExpression;
|
|
||||||
import org.jetbrains.kotlin.js.backend.ast.JsInvocation;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
|
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public final class BuiltInFunctionIntrinsic extends FunctionIntrinsic {
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private final String functionName;
|
|
||||||
|
|
||||||
public BuiltInFunctionIntrinsic(@NotNull String functionName) {
|
|
||||||
this.functionName = functionName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public JsExpression apply(
|
|
||||||
@Nullable JsExpression receiver,
|
|
||||||
@NotNull List<JsExpression> arguments,
|
|
||||||
@NotNull TranslationContext context
|
|
||||||
) {
|
|
||||||
assert receiver != null;
|
|
||||||
return new JsInvocation(JsAstUtils.pureFqn(functionName, receiver), arguments);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+2
-2
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
//TODO: find should be usages
|
//TODO: find should be usages
|
||||||
public final class BuiltInPropertyIntrinsic extends FunctionIntrinsic {
|
public final class BuiltInPropertyIntrinsic extends FunctionIntrinsicWithReceiverComputed {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final String propertyName;
|
private final String propertyName;
|
||||||
@@ -36,7 +36,7 @@ public final class BuiltInPropertyIntrinsic extends FunctionIntrinsic {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(@Nullable JsExpression receiver, @NotNull List<JsExpression> arguments,
|
public JsExpression apply(@Nullable JsExpression receiver, @NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
assert arguments.isEmpty() : "Properties can't have arguments.";
|
assert arguments.isEmpty() : "Properties can't have arguments.";
|
||||||
|
|||||||
-84
@@ -1,84 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.js.translate.intrinsic.functions.basic;
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.js.backend.ast.JsExpression;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.kotlin.js.translate.callTranslator.CallInfo;
|
|
||||||
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base for intrinsics that substitute standard function calls like Int#plus, Float#minus ... etc
|
|
||||||
*/
|
|
||||||
public abstract class FunctionIntrinsic {
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static final FunctionIntrinsic NO_INTRINSIC = new FunctionIntrinsic() {
|
|
||||||
@Override
|
|
||||||
public boolean exists() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public JsExpression apply(@Nullable JsExpression receiver,
|
|
||||||
@NotNull List<JsExpression> arguments,
|
|
||||||
@NotNull TranslationContext context) {
|
|
||||||
throw new UnsupportedOperationException("FunctionIntrinsic#NO_INTRINSIC_#apply");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
protected static JsExpression getThisOrReceiverOrNull(@NotNull CallInfo callInfo) {
|
|
||||||
if (callInfo.getDispatchReceiver() != null) {
|
|
||||||
return callInfo.getDispatchReceiver();
|
|
||||||
} else {
|
|
||||||
return callInfo.getExtensionReceiver();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public JsExpression apply(@NotNull CallInfo callInfo,
|
|
||||||
@NotNull List<JsExpression> arguments,
|
|
||||||
@NotNull TranslationContext context) {
|
|
||||||
return apply(getThisOrReceiverOrNull(callInfo), arguments, context);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public abstract JsExpression apply(@Nullable JsExpression receiver,
|
|
||||||
@NotNull List<JsExpression> arguments,
|
|
||||||
@NotNull TranslationContext context
|
|
||||||
);
|
|
||||||
|
|
||||||
public boolean exists() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract static class CallParametersAwareFunctionIntrinsic extends FunctionIntrinsic {
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public JsExpression apply(@Nullable JsExpression receiver,
|
|
||||||
@NotNull List<JsExpression> arguments,
|
|
||||||
@NotNull TranslationContext context
|
|
||||||
) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2015 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.js.translate.intrinsic.functions.basic
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.js.backend.ast.JsExpression
|
||||||
|
import org.jetbrains.kotlin.js.translate.callTranslator.CallInfo
|
||||||
|
import org.jetbrains.kotlin.js.translate.context.TranslationContext
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base for intrinsics that substitute standard function calls like Int#plus, Float#minus ... etc
|
||||||
|
*/
|
||||||
|
abstract class FunctionIntrinsic {
|
||||||
|
abstract fun apply(callInfo: CallInfo, arguments: List<JsExpression>, context: TranslationContext): JsExpression
|
||||||
|
|
||||||
|
open fun exists(): Boolean = true
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@JvmField
|
||||||
|
val NO_INTRINSIC: FunctionIntrinsic = object : FunctionIntrinsic() {
|
||||||
|
override fun exists() = false
|
||||||
|
|
||||||
|
override fun apply(callInfo: CallInfo, arguments: List<JsExpression>, context: TranslationContext) =
|
||||||
|
throw UnsupportedOperationException("FunctionIntrinsic#NO_INTRINSIC_#apply")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
protected fun getThisOrReceiverOrNull(callInfo: CallInfo): JsExpression? =
|
||||||
|
callInfo.dispatchReceiver ?: callInfo.extensionReceiver
|
||||||
|
}
|
||||||
|
}
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2016 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.js.translate.intrinsic.functions.basic
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.js.backend.ast.JsExpression
|
||||||
|
import org.jetbrains.kotlin.js.translate.callTranslator.CallInfo
|
||||||
|
import org.jetbrains.kotlin.js.translate.context.TranslationContext
|
||||||
|
|
||||||
|
abstract class FunctionIntrinsicWithReceiverComputed : FunctionIntrinsic() {
|
||||||
|
override fun apply(callInfo: CallInfo, arguments: List<JsExpression>, context: TranslationContext): JsExpression {
|
||||||
|
return apply(getThisOrReceiverOrNull(callInfo), arguments, context)
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract fun apply(receiver: JsExpression?, arguments: List<JsExpression>, context: TranslationContext): JsExpression
|
||||||
|
}
|
||||||
+2
-2
@@ -26,10 +26,10 @@ import org.jetbrains.kotlin.js.translate.reference.ReferenceTranslator
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
||||||
|
|
||||||
class RangeToIntrinsic(function: FunctionDescriptor) : FunctionIntrinsic() {
|
class RangeToIntrinsic(function: FunctionDescriptor) : FunctionIntrinsicWithReceiverComputed() {
|
||||||
val rangeTypeDescriptor = function.returnType!!.constructor.declarationDescriptor as ClassDescriptor
|
val rangeTypeDescriptor = function.returnType!!.constructor.declarationDescriptor as ClassDescriptor
|
||||||
|
|
||||||
override fun apply(receiver: JsExpression?, arguments: MutableList<JsExpression>, context: TranslationContext): JsExpression {
|
override fun apply(receiver: JsExpression?, arguments: List<JsExpression>, context: TranslationContext): JsExpression {
|
||||||
val packageName = (rangeTypeDescriptor.containingDeclaration as PackageFragmentDescriptor).fqName
|
val packageName = (rangeTypeDescriptor.containingDeclaration as PackageFragmentDescriptor).fqName
|
||||||
val packageDescriptor = context.currentModule.getPackage(packageName)
|
val packageDescriptor = context.currentModule.getPackage(packageName)
|
||||||
val existingClasses = packageDescriptor.memberScope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS) {
|
val existingClasses = packageDescriptor.memberScope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS) {
|
||||||
|
|||||||
+7
-6
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.js.patterns.NamePredicate;
|
|||||||
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.intrinsic.functions.basic.FunctionIntrinsicWithReceiverComputed;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -72,12 +73,12 @@ public final class ArrayFIF extends CompositeFIF {
|
|||||||
ARRAY_FACTORY_METHODS = pattern(Namer.KOTLIN_LOWER_NAME, new NamePredicate(arrayFactoryMethodNames));
|
ARRAY_FACTORY_METHODS = pattern(Namer.KOTLIN_LOWER_NAME, new NamePredicate(arrayFactoryMethodNames));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final FunctionIntrinsic ARRAY_INTRINSIC = new FunctionIntrinsic() {
|
private static final FunctionIntrinsic ARRAY_INTRINSIC = new FunctionIntrinsicWithReceiverComputed() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@Nullable JsExpression receiver,
|
@Nullable JsExpression receiver,
|
||||||
@NotNull List<JsExpression> arguments,
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
assert arguments.size() == 1;
|
assert arguments.size() == 1;
|
||||||
@@ -86,11 +87,11 @@ public final class ArrayFIF extends CompositeFIF {
|
|||||||
};
|
};
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static final FunctionIntrinsic GET_INTRINSIC = new FunctionIntrinsic() {
|
public static final FunctionIntrinsic GET_INTRINSIC = new FunctionIntrinsicWithReceiverComputed() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(@Nullable JsExpression receiver,
|
public JsExpression apply(@Nullable JsExpression receiver,
|
||||||
@NotNull List<JsExpression> arguments,
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
assert arguments.size() == 1 : "Array get expression must have one argument.";
|
assert arguments.size() == 1 : "Array get expression must have one argument.";
|
||||||
@@ -100,11 +101,11 @@ public final class ArrayFIF extends CompositeFIF {
|
|||||||
};
|
};
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static final FunctionIntrinsic SET_INTRINSIC = new FunctionIntrinsic() {
|
public static final FunctionIntrinsic SET_INTRINSIC = new FunctionIntrinsicWithReceiverComputed() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(@Nullable JsExpression receiver,
|
public JsExpression apply(@Nullable JsExpression receiver,
|
||||||
@NotNull List<JsExpression> arguments,
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
assert arguments.size() == 2 : "Array set expression must have two arguments.";
|
assert arguments.size() == 2 : "Array set expression must have two arguments.";
|
||||||
|
|||||||
+1
-2
@@ -29,8 +29,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public abstract class CompositeFIF implements FunctionIntrinsicFactory {
|
public abstract class CompositeFIF implements FunctionIntrinsicFactory {
|
||||||
@NotNull
|
@NotNull
|
||||||
public static final FunctionIntrinsic LENGTH_PROPERTY_INTRINSIC = new BuiltInPropertyIntrinsic("length");
|
public static final BuiltInPropertyIntrinsic LENGTH_PROPERTY_INTRINSIC = new BuiltInPropertyIntrinsic("length");
|
||||||
public static final FunctionIntrinsic MESSAGE_PROPERTY_INTRINSIC = new BuiltInPropertyIntrinsic("message");
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final List<Pair<Predicate<FunctionDescriptor>, FunctionIntrinsic>> patternsAndIntrinsics = Lists.newArrayList();
|
private final List<Pair<Predicate<FunctionDescriptor>, FunctionIntrinsic>> patternsAndIntrinsics = Lists.newArrayList();
|
||||||
|
|||||||
+3
-3
@@ -22,14 +22,14 @@ import org.jetbrains.kotlin.js.backend.ast.JsExpression;
|
|||||||
import org.jetbrains.kotlin.js.backend.ast.JsInvocation;
|
import org.jetbrains.kotlin.js.backend.ast.JsInvocation;
|
||||||
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.FunctionIntrinsicWithReceiverComputed;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils;
|
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class KotlinFunctionIntrinsic extends FunctionIntrinsic {
|
public class KotlinFunctionIntrinsic extends FunctionIntrinsicWithReceiverComputed {
|
||||||
@NotNull
|
@NotNull
|
||||||
private final String functionName;
|
private final String functionName;
|
||||||
private final JsExpression[] additionalArguments;
|
private final JsExpression[] additionalArguments;
|
||||||
@@ -43,7 +43,7 @@ public class KotlinFunctionIntrinsic extends FunctionIntrinsic {
|
|||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@Nullable JsExpression receiver,
|
@Nullable JsExpression receiver,
|
||||||
@NotNull List<JsExpression> arguments,
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
JsExpression function = JsAstUtils.pureFqn(functionName, Namer.kotlinObject());
|
JsExpression function = JsAstUtils.pureFqn(functionName, Namer.kotlinObject());
|
||||||
|
|||||||
+3
-1
@@ -22,6 +22,7 @@ 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.intrinsic.functions.basic.FunctionIntrinsicWithReceiverComputed
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.*
|
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.*
|
||||||
import org.jetbrains.kotlin.utils.identity as ID
|
import org.jetbrains.kotlin.utils.identity as ID
|
||||||
|
|
||||||
@@ -67,7 +68,8 @@ object LongOperationFIF : FunctionIntrinsicFactory {
|
|||||||
"rem" to BaseBinaryIntrinsic(::mod)
|
"rem" to BaseBinaryIntrinsic(::mod)
|
||||||
)
|
)
|
||||||
|
|
||||||
class BaseBinaryIntrinsic(val applyFun: (left: JsExpression, right: JsExpression) -> JsExpression) : FunctionIntrinsic() {
|
class BaseBinaryIntrinsic(val applyFun: (left: JsExpression, right: JsExpression) -> JsExpression) :
|
||||||
|
FunctionIntrinsicWithReceiverComputed() {
|
||||||
override fun apply(receiver: JsExpression?, arguments: List<JsExpression>, context: TranslationContext): JsExpression {
|
override fun apply(receiver: JsExpression?, arguments: List<JsExpression>, context: TranslationContext): JsExpression {
|
||||||
assert(receiver != null)
|
assert(receiver != null)
|
||||||
assert(arguments.size == 1)
|
assert(arguments.size == 1)
|
||||||
|
|||||||
+3
-3
@@ -20,7 +20,7 @@ import com.google.common.base.Predicates
|
|||||||
import org.jetbrains.kotlin.js.backend.ast.JsExpression
|
import org.jetbrains.kotlin.js.backend.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.FunctionIntrinsicWithReceiverComputed
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.*
|
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.*
|
||||||
import org.jetbrains.kotlin.utils.identity
|
import org.jetbrains.kotlin.utils.identity
|
||||||
|
|
||||||
@@ -62,10 +62,10 @@ object NumberAndCharConversionFIF : CompositeFIF() {
|
|||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
class ConversionUnaryIntrinsic(val applyFun: (receiver: JsExpression) -> JsExpression) : FunctionIntrinsic() {
|
class ConversionUnaryIntrinsic(val applyFun: (receiver: JsExpression) -> JsExpression) : FunctionIntrinsicWithReceiverComputed() {
|
||||||
override fun apply(receiver: JsExpression?, arguments: List<JsExpression>, context: TranslationContext): JsExpression {
|
override fun apply(receiver: JsExpression?, arguments: List<JsExpression>, context: TranslationContext): JsExpression {
|
||||||
assert(receiver != null)
|
assert(receiver != null)
|
||||||
assert(arguments.size == 0)
|
assert(arguments.isEmpty())
|
||||||
return applyFun(receiver!!)
|
return applyFun(receiver!!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.js.patterns.NamePredicate;
|
|||||||
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.intrinsic.functions.basic.FunctionIntrinsicWithReceiverComputed;
|
||||||
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.RangeToIntrinsic;
|
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.RangeToIntrinsic;
|
||||||
import org.jetbrains.kotlin.js.translate.operation.OperatorTable;
|
import org.jetbrains.kotlin.js.translate.operation.OperatorTable;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
||||||
@@ -44,7 +45,7 @@ import static org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern;
|
|||||||
public enum PrimitiveBinaryOperationFIF implements FunctionIntrinsicFactory {
|
public enum PrimitiveBinaryOperationFIF implements FunctionIntrinsicFactory {
|
||||||
INSTANCE;
|
INSTANCE;
|
||||||
|
|
||||||
private static abstract class BinaryOperationIntrinsicBase extends FunctionIntrinsic {
|
private static abstract class BinaryOperationIntrinsicBase extends FunctionIntrinsicWithReceiverComputed {
|
||||||
@NotNull
|
@NotNull
|
||||||
public abstract JsExpression doApply(@NotNull JsExpression left, @NotNull JsExpression right, @NotNull TranslationContext context);
|
public abstract JsExpression doApply(@NotNull JsExpression left, @NotNull JsExpression right, @NotNull TranslationContext context);
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ public enum PrimitiveBinaryOperationFIF implements FunctionIntrinsicFactory {
|
|||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@Nullable JsExpression receiver,
|
@Nullable JsExpression receiver,
|
||||||
@NotNull List<JsExpression> arguments,
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
assert arguments.size() == 1;
|
assert arguments.size() == 1;
|
||||||
|
|||||||
+27
-20
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.js.patterns.DescriptorPredicate;
|
|||||||
import org.jetbrains.kotlin.js.patterns.NamePredicate;
|
import org.jetbrains.kotlin.js.patterns.NamePredicate;
|
||||||
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.intrinsic.functions.basic.FunctionIntrinsicWithReceiverComputed;
|
||||||
import org.jetbrains.kotlin.js.translate.operation.OperatorTable;
|
import org.jetbrains.kotlin.js.translate.operation.OperatorTable;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils;
|
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils;
|
||||||
@@ -73,61 +74,67 @@ public enum PrimitiveUnaryOperationFIF implements FunctionIntrinsicFactory {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private static final DescriptorPredicate DEC_OPERATION_FOR_PRIMITIVE_NUMBER = pattern("Float|Double.dec()");
|
private static final DescriptorPredicate DEC_OPERATION_FOR_PRIMITIVE_NUMBER = pattern("Float|Double.dec()");
|
||||||
|
|
||||||
private static class IntOverflowIntrinsic extends FunctionIntrinsic {
|
private static class IntOverflowIntrinsic extends FunctionIntrinsicWithReceiverComputed {
|
||||||
private final FunctionIntrinsic underlyingIntrinsic;
|
private final FunctionIntrinsicWithReceiverComputed underlyingIntrinsic;
|
||||||
|
|
||||||
public IntOverflowIntrinsic(FunctionIntrinsic underlyingIntrinsic) {
|
public IntOverflowIntrinsic(FunctionIntrinsicWithReceiverComputed underlyingIntrinsic) {
|
||||||
this.underlyingIntrinsic = underlyingIntrinsic;
|
this.underlyingIntrinsic = underlyingIntrinsic;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@Nullable JsExpression receiver, @NotNull List<JsExpression> arguments, @NotNull TranslationContext context
|
@Nullable JsExpression receiver,
|
||||||
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
return JsAstUtils.toInt32(underlyingIntrinsic.apply(receiver, arguments, context));
|
return JsAstUtils.toInt32(underlyingIntrinsic.apply(receiver, arguments, context));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ShortOverflowIntrinsic extends FunctionIntrinsic {
|
private static class ShortOverflowIntrinsic extends FunctionIntrinsicWithReceiverComputed {
|
||||||
private final FunctionIntrinsic underlyingIntrinsic;
|
private final FunctionIntrinsicWithReceiverComputed underlyingIntrinsic;
|
||||||
|
|
||||||
public ShortOverflowIntrinsic(FunctionIntrinsic underlyingIntrinsic) {
|
public ShortOverflowIntrinsic(FunctionIntrinsicWithReceiverComputed underlyingIntrinsic) {
|
||||||
this.underlyingIntrinsic = underlyingIntrinsic;
|
this.underlyingIntrinsic = underlyingIntrinsic;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@Nullable JsExpression receiver, @NotNull List<JsExpression> arguments, @NotNull TranslationContext context
|
@Nullable JsExpression receiver,
|
||||||
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
return JsAstUtils.toShort(underlyingIntrinsic.apply(receiver, arguments, context));
|
return JsAstUtils.toShort(underlyingIntrinsic.apply(receiver, arguments, context));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ByteOverflowIntrinsic extends FunctionIntrinsic {
|
private static class ByteOverflowIntrinsic extends FunctionIntrinsicWithReceiverComputed {
|
||||||
private final FunctionIntrinsic underlyingIntrinsic;
|
private final FunctionIntrinsicWithReceiverComputed underlyingIntrinsic;
|
||||||
|
|
||||||
public ByteOverflowIntrinsic(FunctionIntrinsic underlyingIntrinsic) {
|
public ByteOverflowIntrinsic(FunctionIntrinsicWithReceiverComputed underlyingIntrinsic) {
|
||||||
this.underlyingIntrinsic = underlyingIntrinsic;
|
this.underlyingIntrinsic = underlyingIntrinsic;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@Nullable JsExpression receiver, @NotNull List<JsExpression> arguments, @NotNull TranslationContext context
|
@Nullable JsExpression receiver,
|
||||||
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
return JsAstUtils.toByte(underlyingIntrinsic.apply(receiver, arguments, context));
|
return JsAstUtils.toByte(underlyingIntrinsic.apply(receiver, arguments, context));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static final FunctionIntrinsic NUMBER_INC_INTRINSIC = new FunctionIntrinsic() {
|
private static final FunctionIntrinsicWithReceiverComputed NUMBER_INC_INTRINSIC = new FunctionIntrinsicWithReceiverComputed() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@Nullable JsExpression receiver,
|
@Nullable JsExpression receiver,
|
||||||
@NotNull List<JsExpression> arguments,
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
@@ -137,12 +144,12 @@ public enum PrimitiveUnaryOperationFIF implements FunctionIntrinsicFactory {
|
|||||||
};
|
};
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static final FunctionIntrinsic NUMBER_DEC_INTRINSIC = new FunctionIntrinsic() {
|
private static final FunctionIntrinsicWithReceiverComputed NUMBER_DEC_INTRINSIC = new FunctionIntrinsicWithReceiverComputed() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@Nullable JsExpression receiver,
|
@Nullable JsExpression receiver,
|
||||||
@NotNull List<JsExpression> arguments,
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
@@ -151,7 +158,7 @@ public enum PrimitiveUnaryOperationFIF implements FunctionIntrinsicFactory {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private static abstract class UnaryOperationInstrinsicBase extends FunctionIntrinsic {
|
private static abstract class UnaryOperationInstrinsicBase extends FunctionIntrinsicWithReceiverComputed {
|
||||||
@NotNull
|
@NotNull
|
||||||
public abstract JsExpression doApply(@NotNull JsExpression receiver, @NotNull TranslationContext context);
|
public abstract JsExpression doApply(@NotNull JsExpression receiver, @NotNull TranslationContext context);
|
||||||
|
|
||||||
@@ -159,7 +166,7 @@ public enum PrimitiveUnaryOperationFIF implements FunctionIntrinsicFactory {
|
|||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@Nullable JsExpression receiver,
|
@Nullable JsExpression receiver,
|
||||||
@NotNull List<JsExpression> arguments,
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
@@ -277,11 +284,11 @@ public enum PrimitiveUnaryOperationFIF implements FunctionIntrinsicFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final JsUnaryOperator finalJsOperator = jsOperator;
|
final JsUnaryOperator finalJsOperator = jsOperator;
|
||||||
return new FunctionIntrinsic() {
|
return new FunctionIntrinsicWithReceiverComputed() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(@Nullable JsExpression receiver,
|
public JsExpression apply(@Nullable JsExpression receiver,
|
||||||
@NotNull List<JsExpression> arguments,
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
assert arguments.size() == 0 : "Unary operator should not have arguments.";
|
assert arguments.size() == 0 : "Unary operator should not have arguments.";
|
||||||
|
|||||||
+17
-18
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.js.translate.callTranslator.CallInfo;
|
|||||||
import org.jetbrains.kotlin.js.translate.callTranslator.CallInfoExtensionsKt;
|
import org.jetbrains.kotlin.js.translate.callTranslator.CallInfoExtensionsKt;
|
||||||
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.intrinsic.functions.basic.FunctionIntrinsicWithReceiverComputed;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.UtilsKt;
|
import org.jetbrains.kotlin.js.translate.utils.UtilsKt;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorFactory;
|
import org.jetbrains.kotlin.resolve.DescriptorFactory;
|
||||||
@@ -39,7 +40,6 @@ import java.util.Map;
|
|||||||
|
|
||||||
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.FQ_NAMES;
|
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.FQ_NAMES;
|
||||||
import static org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern;
|
import static org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern;
|
||||||
import static org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic.CallParametersAwareFunctionIntrinsic;
|
|
||||||
|
|
||||||
public final class TopLevelFIF extends CompositeFIF {
|
public final class TopLevelFIF extends CompositeFIF {
|
||||||
public static final DescriptorPredicate EQUALS_IN_ANY = pattern("kotlin", "Any", "equals");
|
public static final DescriptorPredicate EQUALS_IN_ANY = pattern("kotlin", "Any", "equals");
|
||||||
@@ -48,7 +48,8 @@ public final class TopLevelFIF extends CompositeFIF {
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@NotNull CallInfo callInfo, @NotNull List<JsExpression> arguments, @NotNull TranslationContext context
|
@NotNull CallInfo callInfo,
|
||||||
|
@NotNull List<? extends JsExpression> arguments, @NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
if (CallInfoExtensionsKt.isSuperInvocation(callInfo)) {
|
if (CallInfoExtensionsKt.isSuperInvocation(callInfo)) {
|
||||||
JsExpression dispatchReceiver = callInfo.getDispatchReceiver();
|
JsExpression dispatchReceiver = callInfo.getDispatchReceiver();
|
||||||
@@ -72,12 +73,12 @@ public final class TopLevelFIF extends CompositeFIF {
|
|||||||
private static final KotlinFunctionIntrinsic KOTLIN_HASH_CODE = new KotlinFunctionIntrinsic("hashCode");
|
private static final KotlinFunctionIntrinsic KOTLIN_HASH_CODE = new KotlinFunctionIntrinsic("hashCode");
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static final FunctionIntrinsic RETURN_RECEIVER_INTRINSIC = new FunctionIntrinsic() {
|
private static final FunctionIntrinsic RETURN_RECEIVER_INTRINSIC = new FunctionIntrinsicWithReceiverComputed() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@Nullable JsExpression receiver,
|
@Nullable JsExpression receiver,
|
||||||
@NotNull List<JsExpression> arguments,
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
@NotNull TranslationContext context
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
@@ -86,7 +87,7 @@ public final class TopLevelFIF extends CompositeFIF {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
private static final JsExpression getReferenceToOnlyTypeParameter(
|
private static JsExpression getReferenceToOnlyTypeParameter(
|
||||||
@NotNull CallInfo callInfo, @NotNull TranslationContext context
|
@NotNull CallInfo callInfo, @NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
ResolvedCall<? extends CallableDescriptor> resolvedCall = callInfo.getResolvedCall();
|
ResolvedCall<? extends CallableDescriptor> resolvedCall = callInfo.getResolvedCall();
|
||||||
@@ -102,26 +103,22 @@ public final class TopLevelFIF extends CompositeFIF {
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@NotNull CallInfo callInfo, @NotNull List<JsExpression> arguments, @NotNull TranslationContext context
|
@NotNull CallInfo callInfo,
|
||||||
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
return getReferenceToOnlyTypeParameter(callInfo, context);
|
return getReferenceToOnlyTypeParameter(callInfo, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public JsExpression apply(
|
|
||||||
@Nullable JsExpression receiver, @NotNull List<JsExpression> arguments, @NotNull TranslationContext context
|
|
||||||
) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
private static final FunctionIntrinsic ENUM_VALUES_INTRINSIC = new CallParametersAwareFunctionIntrinsic() {
|
private static final FunctionIntrinsic ENUM_VALUES_INTRINSIC = new FunctionIntrinsic() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@NotNull CallInfo callInfo, @NotNull List<JsExpression> arguments, @NotNull TranslationContext context
|
@NotNull CallInfo callInfo,
|
||||||
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
JsExpression enumClassRef = getReferenceToOnlyTypeParameter(callInfo, context);
|
JsExpression enumClassRef = getReferenceToOnlyTypeParameter(callInfo, context);
|
||||||
|
|
||||||
@@ -132,11 +129,13 @@ public final class TopLevelFIF extends CompositeFIF {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
private static final FunctionIntrinsic ENUM_VALUE_OF_INTRINSIC = new CallParametersAwareFunctionIntrinsic() {
|
private static final FunctionIntrinsic ENUM_VALUE_OF_INTRINSIC = new FunctionIntrinsic() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JsExpression apply(
|
public JsExpression apply(
|
||||||
@NotNull CallInfo callInfo, @NotNull List<JsExpression> arguments, @NotNull TranslationContext context
|
@NotNull CallInfo callInfo,
|
||||||
|
@NotNull List<? extends JsExpression> arguments,
|
||||||
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
JsExpression arg = arguments.get(2); // The first two are reified parameters
|
JsExpression arg = arguments.get(2); // The first two are reified parameters
|
||||||
|
|
||||||
|
|||||||
+5
-3
@@ -19,6 +19,8 @@ package org.jetbrains.kotlin.js.translate.operation;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
|
||||||
import org.jetbrains.kotlin.js.backend.ast.JsExpression;
|
import org.jetbrains.kotlin.js.backend.ast.JsExpression;
|
||||||
|
import org.jetbrains.kotlin.js.translate.callTranslator.CallInfo;
|
||||||
|
import org.jetbrains.kotlin.js.translate.callTranslator.CallInfoKt;
|
||||||
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.psi.KtUnaryExpression;
|
import org.jetbrains.kotlin.psi.KtUnaryExpression;
|
||||||
@@ -32,8 +34,7 @@ public final class IntrinsicIncrementTranslator extends IncrementTranslator {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private final ResolvedCall<? extends FunctionDescriptor> resolvedCall;
|
private final ResolvedCall<? extends FunctionDescriptor> resolvedCall;
|
||||||
|
|
||||||
public IntrinsicIncrementTranslator(@NotNull KtUnaryExpression expression,
|
public IntrinsicIncrementTranslator(@NotNull KtUnaryExpression expression, @NotNull TranslationContext context) {
|
||||||
@NotNull TranslationContext context) {
|
|
||||||
super(expression, context);
|
super(expression, context);
|
||||||
this.resolvedCall = CallUtilKt.getFunctionResolvedCallWithAssert(expression, context.bindingContext());
|
this.resolvedCall = CallUtilKt.getFunctionResolvedCallWithAssert(expression, context.bindingContext());
|
||||||
}
|
}
|
||||||
@@ -42,6 +43,7 @@ public final class IntrinsicIncrementTranslator extends IncrementTranslator {
|
|||||||
@NotNull
|
@NotNull
|
||||||
protected JsExpression operationExpression(@NotNull JsExpression receiver) {
|
protected JsExpression operationExpression(@NotNull JsExpression receiver) {
|
||||||
FunctionIntrinsic intrinsic = context().intrinsics().getFunctionIntrinsic(resolvedCall.getResultingDescriptor());
|
FunctionIntrinsic intrinsic = context().intrinsics().getFunctionIntrinsic(resolvedCall.getResultingDescriptor());
|
||||||
return intrinsic.apply(receiver, Collections.<JsExpression>emptyList(), context());
|
CallInfo callInfo = CallInfoKt.getCallInfo(context(), resolvedCall, receiver);
|
||||||
|
return intrinsic.apply(callInfo, Collections.<JsExpression>emptyList(), context());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -251,7 +251,10 @@ public final class TranslationUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static List<JsExpression> generateInvocationArguments(@NotNull JsExpression receiver, @NotNull List<JsExpression> arguments) {
|
public static List<JsExpression> generateInvocationArguments(
|
||||||
|
@NotNull JsExpression receiver,
|
||||||
|
@NotNull List<? extends JsExpression> arguments
|
||||||
|
) {
|
||||||
List<JsExpression> argumentList = new ArrayList<JsExpression>(1 + arguments.size());
|
List<JsExpression> argumentList = new ArrayList<JsExpression>(1 + arguments.size());
|
||||||
argumentList.add(receiver);
|
argumentList.add(receiver);
|
||||||
argumentList.addAll(arguments);
|
argumentList.addAll(arguments);
|
||||||
|
|||||||
Reference in New Issue
Block a user