Move util backend function isNamedFun && isNamedFunOrLambda to frontend
This commit is contained in:
@@ -336,7 +336,7 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
|
||||
: typeMapper.mapType((VariableDescriptor) descriptor);
|
||||
args.add(FieldInfo.createForHiddenField(ownerType, type, "$" + descriptor.getName().asString()));
|
||||
}
|
||||
else if (isLocalNamedFun(descriptor)) {
|
||||
else if (DescriptorUtils.isLocalFunction(descriptor)) {
|
||||
Type classType = asmTypeForAnonymousClass(bindingContext, (FunctionDescriptor) descriptor);
|
||||
args.add(FieldInfo.createForHiddenField(ownerType, classType, "$" + descriptor.getName().asString()));
|
||||
}
|
||||
|
||||
@@ -1820,7 +1820,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
@Nullable
|
||||
private NonLocalReturnInfo getNonLocalReturnInfo(@NotNull CallableMemberDescriptor descriptor, @NotNull JetReturnExpression expression) {
|
||||
//call inside lambda
|
||||
if (isLambda(descriptor)) {
|
||||
if (DescriptorUtils.isFunctionLiteral(descriptor)) {
|
||||
if (expression.getLabelName() == null) {
|
||||
//non labeled return couldn't be local in lambda
|
||||
FunctionDescriptor containingFunction =
|
||||
|
||||
@@ -72,16 +72,12 @@ import java.util.*;
|
||||
|
||||
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
|
||||
import static org.jetbrains.kotlin.codegen.JvmSerializationBindings.*;
|
||||
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.isLocalNamedFun;
|
||||
import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION;
|
||||
import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.OLD_JET_VALUE_PARAMETER_ANNOTATION;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.getSourceFromDescriptor;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isFunctionLiteral;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isTrait;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.Delegation;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.OtherOrigin;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.Synthetic;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.*;
|
||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||
|
||||
public class FunctionCodegen {
|
||||
@@ -305,7 +301,10 @@ public class FunctionCodegen {
|
||||
else if (dispatchReceiver != null) {
|
||||
return typeMapper.mapType(dispatchReceiver.getType());
|
||||
}
|
||||
else if (isFunctionLiteral(functionDescriptor) || isLocalNamedFun(functionDescriptor)) {
|
||||
else if (isFunctionLiteral(functionDescriptor) ||
|
||||
isLocalFunction(functionDescriptor) ||
|
||||
isFunctionExpression(functionDescriptor)
|
||||
) {
|
||||
return typeMapper.mapType(context.getThisDescriptor());
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -74,7 +74,6 @@ import static kotlin.KotlinPackage.firstOrNull;
|
||||
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
|
||||
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.*;
|
||||
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.enumEntryNeedSubclass;
|
||||
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.isLocalNamedFun;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.descriptorToDeclaration;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
|
||||
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
|
||||
@@ -1322,7 +1321,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
DeclarationDescriptor descriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, expr);
|
||||
|
||||
DeclarationDescriptor toLookup;
|
||||
if (isLocalNamedFun(descriptor)) {
|
||||
if (isLocalFunction(descriptor)) {
|
||||
toLookup = descriptor;
|
||||
}
|
||||
else if (descriptor instanceof CallableMemberDescriptor) {
|
||||
|
||||
@@ -252,23 +252,6 @@ public class CodegenBinding {
|
||||
return sortedAnswer;
|
||||
}
|
||||
|
||||
public static boolean isLocalNamedFun(@Nullable DeclarationDescriptor fd) {
|
||||
return isLocalFunOrLambda(fd) && !fd.getName().isSpecial();
|
||||
}
|
||||
|
||||
/*named or not*/
|
||||
public static boolean isLocalFunOrLambda(@Nullable DeclarationDescriptor fd) {
|
||||
if (fd instanceof FunctionDescriptor) {
|
||||
FunctionDescriptor descriptor = (FunctionDescriptor) fd;
|
||||
return descriptor.getVisibility() == Visibilities.LOCAL;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isLambda(@Nullable DeclarationDescriptor fd) {
|
||||
return fd instanceof AnonymousFunctionDescriptor;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Type getAsmType(@NotNull BindingContext bindingContext, @NotNull ClassDescriptor klass) {
|
||||
Type type = bindingContext.get(ASM_TYPE, klass);
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.jetbrains.org.objectweb.asm.Type;
|
||||
|
||||
import static org.jetbrains.kotlin.codegen.AsmUtil.CAPTURED_RECEIVER_FIELD;
|
||||
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.*;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isLocalFunction;
|
||||
|
||||
public interface LocalLookup {
|
||||
boolean lookupLocal(DeclarationDescriptor descriptor);
|
||||
@@ -74,7 +75,7 @@ public interface LocalLookup {
|
||||
LOCAL_NAMED_FUNCTION {
|
||||
@Override
|
||||
public boolean isCase(DeclarationDescriptor d) {
|
||||
return isLocalNamedFun(d);
|
||||
return isLocalFunction(d);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.builtins.InlineStrategy;
|
||||
import org.jetbrains.kotlin.builtins.InlineUtil;
|
||||
import org.jetbrains.kotlin.codegen.*;
|
||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding;
|
||||
import org.jetbrains.kotlin.codegen.context.CodegenContext;
|
||||
import org.jetbrains.kotlin.codegen.context.MethodContext;
|
||||
import org.jetbrains.kotlin.codegen.context.PackageContext;
|
||||
@@ -59,6 +58,8 @@ import java.util.Map;
|
||||
import static org.jetbrains.kotlin.codegen.AsmUtil.getMethodAsmFlags;
|
||||
import static org.jetbrains.kotlin.codegen.AsmUtil.isPrimitive;
|
||||
import static org.jetbrains.kotlin.codegen.inline.InlineCodegenUtil.addInlineMarker;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isFunctionExpression;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isFunctionLiteral;
|
||||
|
||||
public class InlineCodegen extends CallGenerator {
|
||||
private final GenerationState state;
|
||||
@@ -234,7 +235,7 @@ public class InlineCodegen extends CallGenerator {
|
||||
|
||||
final CallableMemberDescriptor descriptor = codegen.getContext().getContextDescriptor();
|
||||
|
||||
final boolean isLambda = CodegenBinding.isLocalFunOrLambda(descriptor) && descriptor.getName().isSpecial();
|
||||
final boolean isLambda = isFunctionExpression(descriptor) || isFunctionLiteral(descriptor);
|
||||
|
||||
@Override
|
||||
public boolean isMyLabel(@NotNull String name) {
|
||||
|
||||
@@ -20,18 +20,17 @@ import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicObjects;
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||
import org.jetbrains.kotlin.codegen.*;
|
||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding;
|
||||
import org.jetbrains.kotlin.codegen.binding.MutableClosure;
|
||||
import org.jetbrains.kotlin.codegen.binding.PsiCodegenPredictor;
|
||||
import org.jetbrains.kotlin.codegen.context.CodegenContext;
|
||||
import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicObjects;
|
||||
import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated;
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor;
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils;
|
||||
@@ -113,7 +112,7 @@ public class JetTypeMapper {
|
||||
|
||||
@NotNull
|
||||
public Type mapOwner(@NotNull DeclarationDescriptor descriptor, boolean isInsideModule) {
|
||||
if (isLocalNamedFun(descriptor)) {
|
||||
if (isLocalFunction(descriptor)) {
|
||||
return asmTypeForAnonymousClass(bindingContext, (FunctionDescriptor) descriptor);
|
||||
}
|
||||
|
||||
@@ -561,7 +560,7 @@ public class JetTypeMapper {
|
||||
}
|
||||
}
|
||||
|
||||
Type calleeType = isLocalNamedFun(functionDescriptor) ? owner : null;
|
||||
Type calleeType = isLocalFunction(functionDescriptor) ? owner : null;
|
||||
|
||||
Type receiverParameterType;
|
||||
ReceiverParameterDescriptor receiverParameter = functionDescriptor.getOriginal().getExtensionReceiverParameter();
|
||||
@@ -621,7 +620,7 @@ public class JetTypeMapper {
|
||||
|
||||
return isAccessor ? "access$" + accessorName : accessorName;
|
||||
}
|
||||
else if (descriptor instanceof AnonymousFunctionDescriptor) {
|
||||
else if (isFunctionLiteral(descriptor)) {
|
||||
PsiElement element = DescriptorToSourceUtils.getSourceFromDescriptor(descriptor);
|
||||
if (element instanceof JetFunctionLiteral) {
|
||||
PsiElement expression = element.getParent();
|
||||
@@ -635,7 +634,7 @@ public class JetTypeMapper {
|
||||
|
||||
return "invoke";
|
||||
}
|
||||
else if (isLocalFunOrLambda(descriptor)) {
|
||||
else if (isLocalFunction(descriptor) || isFunctionExpression(descriptor)) {
|
||||
return "invoke";
|
||||
}
|
||||
else {
|
||||
@@ -896,7 +895,7 @@ public class JetTypeMapper {
|
||||
}
|
||||
type = sharedVarType;
|
||||
}
|
||||
else if (isLocalNamedFun(variableDescriptor)) {
|
||||
else if (isLocalFunction(variableDescriptor)) {
|
||||
//noinspection CastConflictsWithInstanceof
|
||||
type = asmTypeForAnonymousClass(bindingContext, (FunctionDescriptor) variableDescriptor);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user