Minor corrections in JVM codegen

- use mapSignature instead of mapToCallableMethod where possible
- use resolvedCall where possible
- fix some warnings and style issues
This commit is contained in:
Alexander Udalov
2014-06-27 20:39:32 +04:00
parent 2947963e67
commit fc89424295
4 changed files with 13 additions and 21 deletions
@@ -1325,7 +1325,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
ConstructorDescriptor constructorDescriptor = bindingContext.get(CONSTRUCTOR, expression.getObjectDeclaration());
assert constructorDescriptor != null;
CallableMethod constructor = typeMapper.mapToCallableMethod(constructorDescriptor);
Method constructor = typeMapper.mapSignature(constructorDescriptor).getAsmMethod();
Type type = bindingContext.get(ASM_TYPE, constructorDescriptor.getContainingDeclaration());
assert type != null;
@@ -1337,16 +1337,13 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
JetDelegatorToSuperCall superCall = closure.getSuperCall();
if (superCall != null) {
ConstructorDescriptor superConstructor = (ConstructorDescriptor) bindingContext
.get(REFERENCE_TARGET, superCall.getCalleeExpression().getConstructorReferenceExpression());
assert superConstructor != null;
CallableMethod superCallable = typeMapper.mapToCallableMethod(superConstructor);
Type[] argumentTypes = superCallable.getAsmMethod().getArgumentTypes();
ResolvedCall<?> resolvedCall = getResolvedCallWithAssert(superCall, bindingContext);
ConstructorDescriptor superConstructor = (ConstructorDescriptor) resolvedCall.getResultingDescriptor();
Type[] argumentTypes = typeMapper.mapSignature(superConstructor).getAsmMethod().getArgumentTypes();
pushMethodArgumentsWithoutCallReceiver(resolvedCall, Arrays.asList(argumentTypes), false, defaultCallGenerator);
}
v.invokespecial(type.getInternalName(), "<init>", constructor.getAsmMethod().getDescriptor());
v.invokespecial(type.getInternalName(), "<init>", constructor.getDescriptor());
return StackValue.onStack(type);
}
@@ -496,7 +496,7 @@ public class FunctionCodegen extends ParentCodegenAware {
}
}
);
return strings.toArray(new String[strings.size()]);
return ArrayUtil.toStringArray(strings);
}
static void generateConstructorWithoutParametersIfNeeded(
@@ -661,7 +661,8 @@ public class FunctionCodegen extends ParentCodegenAware {
CallableMethod method;
if (functionDescriptor instanceof ConstructorDescriptor) {
method = state.getTypeMapper().mapToCallableMethod((ConstructorDescriptor) functionDescriptor);
} else {
}
else {
method = state.getTypeMapper().mapToCallableMethod(functionDescriptor, false, methodContext);
}
@@ -869,8 +869,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
parameterIndex += type.getSize();
}
String constructorJvmDescriptor = typeMapper.mapToCallableMethod(constructor).getAsmMethod().getDescriptor();
iv.invokespecial(thisDescriptorType.getInternalName(), "<init>", constructorJvmDescriptor);
Method constructorAsmMethod = typeMapper.mapSignature(constructor).getAsmMethod();
iv.invokespecial(thisDescriptorType.getInternalName(), "<init>", constructorAsmMethod.getDescriptor());
iv.areturn(thisDescriptorType);
}
@@ -1580,8 +1580,6 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
iv.load(2, Type.INT_TYPE);
}
CallableMethod method = typeMapper.mapToCallableMethod(constructorDescriptor);
ResolvedCall<?> resolvedCall = BindingContextUtilPackage.getResolvedCallWithAssert(superCall, bindingContext);
ConstructorDescriptor superConstructor = (ConstructorDescriptor) resolvedCall.getResultingDescriptor();
@@ -1594,7 +1592,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
CallableMethod superCallable = typeMapper.mapToCallableMethod(superConstructor);
if (isAnonymousObject(descriptor) && superCall instanceof JetDelegatorToSuperCall) {
int nextVar = findFirstSuperArgument(method);
int nextVar = findFirstSuperArgument(typeMapper.mapToCallableMethod(constructorDescriptor));
for (Type t : superCallable.getAsmMethod().getArgumentTypes()) {
iv.load(nextVar, t);
nextVar += t.getSize();
@@ -23,8 +23,6 @@ import org.jetbrains.jet.codegen.ExpressionCodegen;
import org.jetbrains.jet.codegen.StackValue;
import org.jetbrains.jet.lang.psi.JetElement;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.resolve.bindingContextUtil.BindingContextUtilPackage;
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
import org.jetbrains.org.objectweb.asm.Opcodes;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
@@ -32,6 +30,7 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import java.util.Arrays;
import java.util.List;
import static org.jetbrains.jet.lang.resolve.bindingContextUtil.BindingContextUtilPackage.getResolvedCallWithAssert;
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.OBJECT_TYPE;
public class MonitorInstruction extends IntrinsicMethod {
@@ -56,12 +55,9 @@ public class MonitorInstruction extends IntrinsicMethod {
@Nullable StackValue receiver
) {
assert element != null : "Element should not be null";
ResolvedCall<?> resolvedCall = BindingContextUtilPackage.getResolvedCall((JetElement) element, codegen.getBindingContext());
assert resolvedCall != null : "Resolved call for " + element.getText() + " should be not null";
codegen.pushMethodArgumentsWithoutCallReceiver(
resolvedCall,
getResolvedCallWithAssert((JetElement) element, codegen.getBindingContext()),
Arrays.asList(OBJECT_TYPE),
false,
codegen.defaultCallGenerator
@@ -70,4 +66,4 @@ public class MonitorInstruction extends IntrinsicMethod {
v.visitInsn(opcode);
return Type.VOID_TYPE;
}
}
}