Use proper type constructor in IrIllegalArgumentException
'v.anew(Type.geType(...))' worked accidentally because
1. By default, ASM 6 creates METHOD Type for 'Type.geType(...)' invocation
2. It didn't fail because this type was used only in 'anew' invocation that
calls 'internalName' only
3. ASM 7 changes default behavior to throw Exception
This commit is contained in:
+8
-3
@@ -27,7 +27,7 @@ import org.jetbrains.org.objectweb.asm.Type
|
|||||||
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
||||||
|
|
||||||
class IrIllegalArgumentException : IntrinsicMethod() {
|
class IrIllegalArgumentException : IntrinsicMethod() {
|
||||||
val exceptionTypeDescriptor = Type.getInternalName(IllegalArgumentException::class.java)
|
val exceptionTypeDescriptor = Type.getType(IllegalArgumentException::class.java)!!
|
||||||
|
|
||||||
override fun toCallable(
|
override fun toCallable(
|
||||||
expression: IrMemberAccessExpression,
|
expression: IrMemberAccessExpression,
|
||||||
@@ -36,12 +36,17 @@ class IrIllegalArgumentException : IntrinsicMethod() {
|
|||||||
): IrIntrinsicFunction {
|
): IrIntrinsicFunction {
|
||||||
return object : IrIntrinsicFunction(expression, signature, context, listOf(JAVA_STRING_TYPE)) {
|
return object : IrIntrinsicFunction(expression, signature, context, listOf(JAVA_STRING_TYPE)) {
|
||||||
override fun genInvokeInstruction(v: InstructionAdapter) {
|
override fun genInvokeInstruction(v: InstructionAdapter) {
|
||||||
v.invokespecial(exceptionTypeDescriptor, "<init>", Type.getMethodDescriptor(Type.VOID_TYPE, JAVA_STRING_TYPE), false)
|
v.invokespecial(
|
||||||
|
exceptionTypeDescriptor.internalName,
|
||||||
|
"<init>",
|
||||||
|
Type.getMethodDescriptor(Type.VOID_TYPE, JAVA_STRING_TYPE),
|
||||||
|
false
|
||||||
|
)
|
||||||
v.athrow()
|
v.athrow()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun invoke(v: InstructionAdapter, codegen: ExpressionCodegen, data: BlockInfo): StackValue {
|
override fun invoke(v: InstructionAdapter, codegen: ExpressionCodegen, data: BlockInfo): StackValue {
|
||||||
v.anew(Type.getType(exceptionTypeDescriptor))
|
v.anew(exceptionTypeDescriptor)
|
||||||
v.dup()
|
v.dup()
|
||||||
return super.invoke(v, codegen, data)
|
return super.invoke(v, codegen, data)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user