KT-3978: Kotlin: [Internal Error] org.jetbrains.jet.codegen.CompilationException: Back-end (JVM) Internal error: null
#KT-3978 Fixed
This commit is contained in:
@@ -132,6 +132,10 @@ public class ClosureCodegen extends GenerationStateAware {
|
||||
|
||||
genClosureFields(closure, cv, typeMapper);
|
||||
|
||||
FunctionCodegen.generateDefaultIfNeeded(context.intoFunction(funDescriptor), state, cv,
|
||||
typeMapper.mapSignature(Name.identifier("invoke"), funDescriptor), funDescriptor,
|
||||
context.getContextKind(), DefaultParameterValueLoader.DEFAULT);
|
||||
|
||||
cv.done();
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ import java.util.*;
|
||||
import static org.jetbrains.asm4.Opcodes.*;
|
||||
import static org.jetbrains.jet.codegen.AsmUtil.*;
|
||||
import static org.jetbrains.jet.codegen.CodegenUtil.*;
|
||||
import static org.jetbrains.jet.codegen.binding.CodegenBinding.classNameForAnonymousClass;
|
||||
import static org.jetbrains.jet.codegen.binding.CodegenBinding.isLocalNamedFun;
|
||||
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.callableDescriptorToDeclaration;
|
||||
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.descriptorToDeclaration;
|
||||
@@ -533,11 +534,17 @@ public class FunctionCodegen extends GenerationStateAware {
|
||||
if (contextClass instanceof NamespaceDescriptor) {
|
||||
ownerInternalName = state.getTypeMapper().getOwner(functionDescriptor, kind, true);
|
||||
}
|
||||
else {
|
||||
else if (contextClass instanceof ClassDescriptor) {
|
||||
ownerInternalName = JvmClassName.byType(state.getTypeMapper()
|
||||
.mapType(((ClassDescriptor) contextClass).getDefaultType(),
|
||||
JetTypeMapperMode.IMPL));
|
||||
}
|
||||
else if (isLocalNamedFun(functionDescriptor)) {
|
||||
ownerInternalName = classNameForAnonymousClass(state.getBindingContext(), functionDescriptor);
|
||||
}
|
||||
else {
|
||||
throw new IllegalStateException("Couldn't obtain owner name for " + functionDescriptor);
|
||||
}
|
||||
|
||||
String descriptor = jvmSignature.getDescriptor().replace(")", "I)");
|
||||
boolean isConstructor = "<init>".equals(jvmSignature.getName());
|
||||
@@ -552,7 +559,7 @@ public class FunctionCodegen extends GenerationStateAware {
|
||||
genStubCode(mv);
|
||||
}
|
||||
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||
generateDefaultImpl(owner, state, signature, functionDescriptor, kind, isStatic, mv, loadStrategy);
|
||||
generateDefaultImpl(owner, state, signature, functionDescriptor, isStatic, mv, loadStrategy);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -561,7 +568,6 @@ public class FunctionCodegen extends GenerationStateAware {
|
||||
@NotNull GenerationState state,
|
||||
@NotNull JvmMethodSignature signature,
|
||||
@NotNull FunctionDescriptor functionDescriptor,
|
||||
@NotNull OwnerKind kind,
|
||||
boolean aStatic,
|
||||
@NotNull MethodVisitor mv,
|
||||
@NotNull DefaultParameterValueLoader loadStrategy
|
||||
@@ -637,7 +643,6 @@ public class FunctionCodegen extends GenerationStateAware {
|
||||
iv.areturn(jvmSignature.getReturnType());
|
||||
|
||||
endVisit(mv, "default method", callableDescriptorToDeclaration(state.getBindingContext(), functionDescriptor));
|
||||
mv.visitEnd();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user