Saving and loading projection kind of array element type in bytecode.

This commit is contained in:
Evgeny Gerashchenko
2012-11-20 16:45:44 +04:00
parent 21e97b408c
commit d37bdbc07d
16 changed files with 72 additions and 13 deletions
@@ -166,7 +166,7 @@ public class BothSignatureWriter {
writeClassEnd();
return;
case Type.ARRAY:
writeArrayType(nullable);
writeArrayType(nullable, Variance.INVARIANT);
writeAsmType(asmType.getElementType(), false, kotlinTypeName);
writeArrayEnd();
return;
@@ -235,9 +235,9 @@ public class BothSignatureWriter {
jetSignatureWriter.visitEnd();
}
public void writeArrayType(boolean nullable) {
public void writeArrayType(boolean nullable, Variance projectionKind) {
push(signatureVisitor().visitArrayType());
jetSignatureWriter.visitArrayType(nullable);
jetSignatureWriter.visitArrayType(nullable, toJetSignatureVariance(projectionKind));
if (jvmCurrentType == null) {
++jvmCurrentTypeArrayLevel;
}
@@ -266,10 +266,11 @@ public class JetTypeMapper extends BindingTraceAware {
if (jetType.getArguments().size() != 1) {
throw new UnsupportedOperationException("arrays must have one type argument");
}
JetType memberType = jetType.getArguments().get(0).getType();
TypeProjection memberProjection = jetType.getArguments().get(0);
JetType memberType = memberProjection.getType();
if (signatureVisitor != null) {
signatureVisitor.writeArrayType(jetType.isNullable());
signatureVisitor.writeArrayType(jetType.isNullable(), memberProjection.getProjectionKind());
mapType(memberType, signatureVisitor, JetTypeMapperMode.TYPE_PARAMETER);
signatureVisitor.writeArrayEnd();
}