Minor. Reformat

This commit is contained in:
Mikhael Bogdanov
2018-05-03 11:12:30 +02:00
parent eefc49a617
commit b4853d9293
2 changed files with 133 additions and 108 deletions
@@ -52,11 +52,13 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
private fun createOuterThisField() { private fun createOuterThisField() {
outerThisFieldDescriptor = context.descriptorsFactory.getOuterThisFieldDescriptor(irClass.descriptor) outerThisFieldDescriptor = context.descriptorsFactory.getOuterThisFieldDescriptor(irClass.descriptor)
irClass.declarations.add(IrFieldImpl( irClass.declarations.add(
IrFieldImpl(
irClass.startOffset, irClass.endOffset, irClass.startOffset, irClass.endOffset,
FIELD_FOR_OUTER_THIS, FIELD_FOR_OUTER_THIS,
outerThisFieldDescriptor outerThisFieldDescriptor
)) )
)
} }
private fun lowerConstructors() { private fun lowerConstructors() {
@@ -100,11 +102,10 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
IrGetValueImpl(startOffset, endOffset, outerThisValueParameter) IrGetValueImpl(startOffset, endOffset, outerThisValueParameter)
) )
) )
} } else {
else {
// Delegating constructor: invoke old constructor with dispatch receiver '$outer' // Delegating constructor: invoke old constructor with dispatch receiver '$outer'
val delegatingConstructorCall = (blockBody.statements.find { it is IrDelegatingConstructorCall } ?: val delegatingConstructorCall = (blockBody.statements.find { it is IrDelegatingConstructorCall }
throw AssertionError("Delegating constructor call expected: ${irConstructor.dump()}") ?: throw AssertionError("Delegating constructor call expected: ${irConstructor.dump()}")
) as IrDelegatingConstructorCall ) as IrDelegatingConstructorCall
delegatingConstructorCall.dispatchReceiver = IrGetValueImpl( delegatingConstructorCall.dispatchReceiver = IrGetValueImpl(
delegatingConstructorCall.startOffset, delegatingConstructorCall.endOffset, outerThisValueParameter delegatingConstructorCall.startOffset, delegatingConstructorCall.endOffset, outerThisValueParameter
@@ -130,8 +131,7 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
override fun visitGetValue(expression: IrGetValue): IrExpression { override fun visitGetValue(expression: IrGetValue): IrExpression {
expression.transformChildrenVoid(this) expression.transformChildrenVoid(this)
val implicitThisClass = expression.descriptor.getClassDescriptorForImplicitThis() ?: val implicitThisClass = expression.descriptor.getClassDescriptorForImplicitThis() ?: return expression
return expression
if (implicitThisClass == classDescriptor) return expression if (implicitThisClass == classDescriptor) return expression
@@ -118,8 +118,7 @@ class ExpressionCodegen(
if (returnType == Type.VOID_TYPE) { if (returnType == Type.VOID_TYPE) {
//for implicit return //for implicit return
mv.areturn(Type.VOID_TYPE) mv.areturn(Type.VOID_TYPE)
} } else if (irFunction.body is IrExpressionBody) {
else if (irFunction.body is IrExpressionBody) {
mv.areturn(returnType) mv.areturn(returnType)
} }
writeLocalVariablesInTable(info) writeLocalVariablesInTable(info)
@@ -127,8 +126,7 @@ class ExpressionCodegen(
} }
override fun visitBlockBody(body: IrBlockBody, data: BlockInfo): StackValue { override fun visitBlockBody(body: IrBlockBody, data: BlockInfo): StackValue {
return body.statements.fold(none()) { return body.statements.fold(none()) { _, exp ->
_, exp ->
exp.accept(this, data) exp.accept(this, data)
} }
} }
@@ -138,8 +136,7 @@ class ExpressionCodegen(
return super.visitBlock(expression, info).apply { return super.visitBlock(expression, info).apply {
if (!expression.isTransparentScope) { if (!expression.isTransparentScope) {
writeLocalVariablesInTable(info) writeLocalVariablesInTable(info)
} } else {
else {
info.variables.forEach { info.variables.forEach {
data.variables.add(it) data.variables.add(it)
} }
@@ -159,8 +156,7 @@ class ExpressionCodegen(
} }
override fun visitContainerExpression(expression: IrContainerExpression, data: BlockInfo): StackValue { override fun visitContainerExpression(expression: IrContainerExpression, data: BlockInfo): StackValue {
val result = expression.statements.fold(none()) { val result = expression.statements.fold(none()) { _, exp ->
_, exp ->
//coerceNotToUnit(r.type, Type.VOID_TYPE) //coerceNotToUnit(r.type, Type.VOID_TYPE)
exp.accept(this, data) exp.accept(this, data)
} }
@@ -243,7 +239,13 @@ class ExpressionCodegen(
callGenerator.genValueAndPut(parameterDescriptor, arg, parameterType, i, this@ExpressionCodegen, data) callGenerator.genValueAndPut(parameterDescriptor, arg, parameterType, i, this@ExpressionCodegen, data)
} }
parameterDescriptor.hasDefaultValue() -> { parameterDescriptor.hasDefaultValue() -> {
callGenerator.putValueIfNeeded(parameterType, StackValue.createDefaultValue(parameterType), ValueKind.DEFAULT_PARAMETER, i, this@ExpressionCodegen) callGenerator.putValueIfNeeded(
parameterType,
StackValue.createDefaultValue(parameterType),
ValueKind.DEFAULT_PARAMETER,
i,
this@ExpressionCodegen
)
defaultMask.mark(i) defaultMask.mark(i)
} }
else -> { else -> {
@@ -259,7 +261,8 @@ class ExpressionCodegen(
it.aconst(0) it.aconst(0)
it.newarray(correctElementType(type)) it.newarray(correctElementType(type))
}, },
ValueKind.GENERAL_VARARG, i, this@ExpressionCodegen) ValueKind.GENERAL_VARARG, i, this@ExpressionCodegen
)
} }
} }
} }
@@ -435,8 +438,7 @@ class ExpressionCodegen(
if (arrayOfReferences) { if (arrayOfReferences) {
mv.checkcast(type) mv.checkcast(type)
} }
} } else {
else {
val owner: String val owner: String
val addDescriptor: String val addDescriptor: String
val toArrayDescriptor: String val toArrayDescriptor: String
@@ -444,9 +446,9 @@ class ExpressionCodegen(
owner = "kotlin/jvm/internal/SpreadBuilder" owner = "kotlin/jvm/internal/SpreadBuilder"
addDescriptor = "(Ljava/lang/Object;)V" addDescriptor = "(Ljava/lang/Object;)V"
toArrayDescriptor = "([Ljava/lang/Object;)[Ljava/lang/Object;" toArrayDescriptor = "([Ljava/lang/Object;)[Ljava/lang/Object;"
} } else {
else { val spreadBuilderClassName =
val spreadBuilderClassName = AsmUtil.asmPrimitiveTypeToLangPrimitiveType(elementType)!!.typeName.identifier + "SpreadBuilder" AsmUtil.asmPrimitiveTypeToLangPrimitiveType(elementType)!!.typeName.identifier + "SpreadBuilder"
owner = "kotlin/jvm/internal/" + spreadBuilderClassName owner = "kotlin/jvm/internal/" + spreadBuilderClassName
addDescriptor = "(" + elementType.descriptor + ")V" addDescriptor = "(" + elementType.descriptor + ")V"
toArrayDescriptor = "()" + type.descriptor toArrayDescriptor = "()" + type.descriptor
@@ -461,8 +463,7 @@ class ExpressionCodegen(
if (argument is IrSpreadElement) { if (argument is IrSpreadElement) {
gen(argument.expression, OBJECT_TYPE, data) gen(argument.expression, OBJECT_TYPE, data)
mv.invokevirtual(owner, "addSpread", "(Ljava/lang/Object;)V", false) mv.invokevirtual(owner, "addSpread", "(Ljava/lang/Object;)V", false)
} } else {
else {
gen(argument, elementType, data) gen(argument, elementType, data)
mv.invokevirtual(owner, "add", addDescriptor, false) mv.invokevirtual(owner, "add", addDescriptor, false)
} }
@@ -473,13 +474,11 @@ class ExpressionCodegen(
newArrayInstruction(outType) newArrayInstruction(outType)
mv.invokevirtual(owner, "toArray", toArrayDescriptor, false) mv.invokevirtual(owner, "toArray", toArrayDescriptor, false)
mv.checkcast(type) mv.checkcast(type)
} } else {
else {
mv.invokevirtual(owner, "toArray", toArrayDescriptor, false) mv.invokevirtual(owner, "toArray", toArrayDescriptor, false)
} }
} }
} } else {
else {
mv.iconst(size) mv.iconst(size)
newArrayInstruction(expression.type) newArrayInstruction(expression.type)
val elementKotlinType = outType.constructor.builtIns.getArrayElementType(outType) val elementKotlinType = outType.constructor.builtIns.getArrayElementType(outType)
@@ -488,7 +487,12 @@ class ExpressionCodegen(
StackValue.constant(i, Type.INT_TYPE).put(Type.INT_TYPE, mv) StackValue.constant(i, Type.INT_TYPE).put(Type.INT_TYPE, mv)
val rightSide = gen(element, elementType, data) val rightSide = gen(element, elementType, data)
StackValue StackValue
.arrayElement(elementType, elementKotlinType, StackValue.onStack(elementType, outType), StackValue.onStack(Type.INT_TYPE)) .arrayElement(
elementType,
elementKotlinType,
StackValue.onStack(elementType, outType),
StackValue.onStack(Type.INT_TYPE)
)
.store(rightSide, mv) .store(rightSide, mv)
} }
} }
@@ -503,8 +507,7 @@ class ExpressionCodegen(
// ReifiedTypeInliner.OperationKind.NEW_ARRAY // ReifiedTypeInliner.OperationKind.NEW_ARRAY
// ) // )
mv.newarray(boxType(elementJetType.asmType)) mv.newarray(boxType(elementJetType.asmType))
} } else {
else {
val type = typeMapper.mapType(arrayType) val type = typeMapper.mapType(arrayType)
mv.newarray(correctElementType(type)) mv.newarray(correctElementType(type))
} }
@@ -602,8 +605,10 @@ class ExpressionCodegen(
gen(expression.argument, asmType, data) gen(expression.argument, asmType, data)
mv.dup() mv.dup()
mv.visitLdcInsn("TODO provide message for IMPLICIT_NOTNULL") /*TODO*/ mv.visitLdcInsn("TODO provide message for IMPLICIT_NOTNULL") /*TODO*/
mv.invokestatic("kotlin/jvm/internal/Intrinsics", "checkExpressionValueIsNotNull", mv.invokestatic(
"(Ljava/lang/Object;Ljava/lang/String;)V", false) "kotlin/jvm/internal/Intrinsics", "checkExpressionValueIsNotNull",
"(Ljava/lang/Object;Ljava/lang/String;)V", false
)
} }
IrTypeOperator.IMPLICIT_INTEGER_COERCION -> { IrTypeOperator.IMPLICIT_INTEGER_COERCION -> {
@@ -749,10 +754,17 @@ class ExpressionCodegen(
val clauseEnd = markNewLabel() val clauseEnd = markNewLabel()
mv.visitLocalVariable(descriptor.name.asString(), descriptorType.descriptor, null, clauseStart, clauseEnd, mv.visitLocalVariable(
index) descriptor.name.asString(), descriptorType.descriptor, null, clauseStart, clauseEnd,
index
)
genFinallyBlockOrGoto(tryInfo, if (clause != catches.last() || finallyExpression != null) tryCatchBlockEnd else null, null, data) genFinallyBlockOrGoto(
tryInfo,
if (clause != catches.last() || finallyExpression != null) tryCatchBlockEnd else null,
null,
data
)
generateExceptionTable(clauseStart, tryRegions, descriptorType.internalName) generateExceptionTable(clauseStart, tryRegions, descriptorType.internalName)
} }
@@ -857,8 +869,7 @@ class ExpressionCodegen(
doFinallyOnReturn(afterReturnLabel, data) doFinallyOnReturn(afterReturnLabel, data)
localForReturnValue.put(returnType, mv) localForReturnValue.put(returnType, mv)
frame.leaveTemp(returnType) frame.leaveTemp(returnType)
} } else {
else {
doFinallyOnReturn(afterReturnLabel, data) doFinallyOnReturn(afterReturnLabel, data)
} }
} }
@@ -906,8 +917,7 @@ class ExpressionCodegen(
if (classReference !is IrClassReference /* && DescriptorUtils.isObjectQualifier(classReference.descriptor)*/) { if (classReference !is IrClassReference /* && DescriptorUtils.isObjectQualifier(classReference.descriptor)*/) {
assert(classReference is IrGetClass) assert(classReference is IrGetClass)
JavaClassProperty.generateImpl(mv, gen((classReference as IrGetClass).argument, data)) JavaClassProperty.generateImpl(mv, gen((classReference as IrGetClass).argument, data))
} } else {
else {
val type = classReference.classType val type = classReference.classType
if (TypeUtils.isTypeParameter(type)) { if (TypeUtils.isTypeParameter(type)) {
assert(TypeUtils.isReifiedTypeParameter(type)) { "Non-reified type parameter under ::class should be rejected by type checker: " + type } assert(TypeUtils.isReifiedTypeParameter(type)) { "Non-reified type parameter under ::class should be rejected by type checker: " + type }
@@ -940,7 +950,11 @@ class ExpressionCodegen(
private fun resolveToCallable(irCall: IrMemberAccessExpression, isSuper: Boolean): Callable { private fun resolveToCallable(irCall: IrMemberAccessExpression, isSuper: Boolean): Callable {
val intrinsic = intrinsics.getIntrinsic(irCall.descriptor.original as CallableMemberDescriptor) val intrinsic = intrinsics.getIntrinsic(irCall.descriptor.original as CallableMemberDescriptor)
if (intrinsic != null) { if (intrinsic != null) {
return intrinsic.toCallable(irCall, typeMapper.mapSignatureSkipGeneric(irCall.descriptor as FunctionDescriptor), classCodegen.context) return intrinsic.toCallable(
irCall,
typeMapper.mapSignatureSkipGeneric(irCall.descriptor as FunctionDescriptor),
classCodegen.context
)
} }
var descriptor = irCall.descriptor var descriptor = irCall.descriptor
@@ -955,8 +969,7 @@ class ExpressionCodegen(
val propertyDescriptor = JvmCodegenUtil.getDirectMember(descriptor) as SyntheticJavaPropertyDescriptor val propertyDescriptor = JvmCodegenUtil.getDirectMember(descriptor) as SyntheticJavaPropertyDescriptor
descriptor = if (descriptor is PropertyGetterDescriptor) { descriptor = if (descriptor is PropertyGetterDescriptor) {
propertyDescriptor.getMethod propertyDescriptor.getMethod
} } else {
else {
propertyDescriptor.setMethod!! propertyDescriptor.setMethod!!
} }
} }
@@ -987,13 +1000,15 @@ class ExpressionCodegen(
val original = unwrapInitialSignatureDescriptor(DescriptorUtils.unwrapFakeOverride(descriptor.original as FunctionDescriptor)) val original = unwrapInitialSignatureDescriptor(DescriptorUtils.unwrapFakeOverride(descriptor.original as FunctionDescriptor))
return if (isDefaultCompilation) { return if (isDefaultCompilation) {
TODO() TODO()
} } else {
else {
IrInlineCodegen(this, state, original, typeParameterMappings!!, IrSourceCompilerForInline(state, element, this)) IrInlineCodegen(this, state, original, typeParameterMappings!!, IrSourceCompilerForInline(state, element, this))
} }
} }
internal fun getOrCreateCallGenerator(memberAccessExpression: IrMemberAccessExpression, descriptor: CallableDescriptor): IrCallGenerator { internal fun getOrCreateCallGenerator(
memberAccessExpression: IrMemberAccessExpression,
descriptor: CallableDescriptor
): IrCallGenerator {
val typeArguments = descriptor.original.typeParameters.keysToMap { memberAccessExpression.getTypeArgumentOrDefault(it) } val typeArguments = descriptor.original.typeParameters.keysToMap { memberAccessExpression.getTypeArgumentOrDefault(it) }
val mappings = TypeParameterMappings() val mappings = TypeParameterMappings()
@@ -1013,8 +1028,7 @@ class ExpressionCodegen(
mappings.addParameterMappingToType( mappings.addParameterMappingToType(
key.name.identifier, approximatedType, asmType, signatureWriter.toString(), isReified key.name.identifier, approximatedType, asmType, signatureWriter.toString(), isReified
) )
} } else {
else {
mappings.addParameterMappingForFurtherReification( mappings.addParameterMappingForFurtherReification(
key.name.identifier, type, typeParameterAndReificationArgument.second, isReified key.name.identifier, type, typeParameterAndReificationArgument.second, isReified
) )
@@ -1041,7 +1055,12 @@ class ExpressionCodegen(
//TODO //TODO
} }
override fun pushClosureOnStack(classDescriptor: ClassDescriptor, putThis: Boolean, callGenerator: CallGenerator, functionReferenceReceiver: StackValue?) { override fun pushClosureOnStack(
classDescriptor: ClassDescriptor,
putThis: Boolean,
callGenerator: CallGenerator,
functionReferenceReceiver: StackValue?
) {
//TODO //TODO
} }
@@ -1063,7 +1082,13 @@ fun DefaultCallArgs.generateOnStackIfNeeded(callGenerator: IrCallGenerator, isCo
} }
val parameterType = if (isConstructor) AsmTypes.DEFAULT_CONSTRUCTOR_MARKER else AsmTypes.OBJECT_TYPE val parameterType = if (isConstructor) AsmTypes.DEFAULT_CONSTRUCTOR_MARKER else AsmTypes.OBJECT_TYPE
callGenerator.putValueIfNeeded(parameterType, StackValue.constant(null, parameterType), ValueKind.METHOD_HANDLE_IN_DEFAULT, -1, codegen) callGenerator.putValueIfNeeded(
parameterType,
StackValue.constant(null, parameterType),
ValueKind.METHOD_HANDLE_IN_DEFAULT,
-1,
codegen
)
} }
return toInts.isNotEmpty() return toInts.isNotEmpty()
} }