diff options
Diffstat (limited to 'src/main/javassist/bytecode/Bytecode.java')
-rw-r--r-- | src/main/javassist/bytecode/Bytecode.java | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/main/javassist/bytecode/Bytecode.java b/src/main/javassist/bytecode/Bytecode.java index 9991a332..bea7b6fa 100644 --- a/src/main/javassist/bytecode/Bytecode.java +++ b/src/main/javassist/bytecode/Bytecode.java @@ -1083,7 +1083,7 @@ public class Bytecode extends ByteVector implements Cloneable, Opcode { public void addInvokevirtual(int clazz, String name, String desc) { add(INVOKEVIRTUAL); addIndex(constPool.addMethodrefInfo(clazz, name, desc)); - growStack(Descriptor.dataSize(desc) - 1); + growStack(Descriptor.dataSize(desc)); // assume CosntPool#REF_invokeStatic } /** @@ -1155,6 +1155,25 @@ public class Bytecode extends ByteVector implements Cloneable, Opcode { } /** + * Appends INVOKEDYNAMIC. + * + * @param bootstrap an index into the <code>bootstrap_methods</code> array + * of the bootstrap method table. + * @param name the method name. + * @param desc the method descriptor. + * @see Descriptor#ofMethod(CtClass,CtClass[]) + * @since 3.17 + */ + public void addInvokedynamic(int bootstrap, String name, String desc) { + int nt = constPool.addNameAndTypeInfo(name, desc); + int dyn = constPool.addInvokeDynamicInfo(bootstrap, nt); + add(INVOKEDYNAMIC); + addIndex(dyn); + add(0, 0); + growStack(Descriptor.dataSize(desc) - 1); + } + + /** * Appends LDC or LDC_W. The pushed item is a <code>String</code> * object. * |