Inline internal functions with one usage

This commit is contained in:
Iaroslav Postovalov 2020-12-20 18:55:59 +07:00
parent 484b35cb4f
commit 3cd00b9df6
No known key found for this signature in database
GPG Key ID: 46E15E4A31B3BCD7

View File

@ -204,18 +204,13 @@ internal class AsmBuilder<T>(
*/ */
fun loadObjectConstant(value: Any, type: Type = tType): Unit = invokeMethodVisitor.run { fun loadObjectConstant(value: Any, type: Type = tType): Unit = invokeMethodVisitor.run {
val idx = if (value in constants) constants.indexOf(value) else constants.also { it += value }.lastIndex val idx = if (value in constants) constants.indexOf(value) else constants.also { it += value }.lastIndex
loadThis() invokeMethodVisitor.load(0, classType)
getfield(classType.internalName, "constants", OBJECT_ARRAY_TYPE.descriptor) getfield(classType.internalName, "constants", OBJECT_ARRAY_TYPE.descriptor)
iconst(idx) iconst(idx)
visitInsn(AALOAD) visitInsn(AALOAD)
if (type != OBJECT_TYPE) checkcast(type) if (type != OBJECT_TYPE) checkcast(type)
} }
/**
* Loads `this` variable.
*/
private fun loadThis(): Unit = invokeMethodVisitor.load(0, classType)
/** /**
* Either loads a numeric constant [value] from the class's constants field or boxes a primitive * Either loads a numeric constant [value] from the class's constants field or boxes a primitive
* constant from the constant pool. * constant from the constant pool.
@ -234,17 +229,6 @@ internal class AsmBuilder<T>(
SHORT_TYPE -> invokeMethodVisitor.iconst(value.toInt()) SHORT_TYPE -> invokeMethodVisitor.iconst(value.toInt())
} }
box(primitive)
return
}
loadObjectConstant(value, boxed)
}
/**
* Boxes the current value and pushes it.
*/
private fun box(primitive: Type) {
val r = PRIMITIVES_TO_BOXED.getValue(primitive) val r = PRIMITIVES_TO_BOXED.getValue(primitive)
invokeMethodVisitor.invokestatic( invokeMethodVisitor.invokestatic(
@ -253,6 +237,11 @@ internal class AsmBuilder<T>(
getMethodDescriptor(r, primitive), getMethodDescriptor(r, primitive),
false, false,
) )
return
}
loadObjectConstant(value, boxed)
} }
/** /**