summaryrefslogtreecommitdiffstats
path: root/src/de/fernflower/code/interpreter/InstructionImpact.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/fernflower/code/interpreter/InstructionImpact.java')
-rw-r--r--src/de/fernflower/code/interpreter/InstructionImpact.java21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/de/fernflower/code/interpreter/InstructionImpact.java b/src/de/fernflower/code/interpreter/InstructionImpact.java
index 7d7e9e3..588991e 100644
--- a/src/de/fernflower/code/interpreter/InstructionImpact.java
+++ b/src/de/fernflower/code/interpreter/InstructionImpact.java
@@ -413,15 +413,18 @@ public class InstructionImpact {
case CodeConstants.opc_invokeinterface:
stack.pop();
case CodeConstants.opc_invokestatic:
- ck = pool.getLinkConstant(instr.getOperand(0));
- MethodDescriptor md = MethodDescriptor.parseDescriptor(ck.descriptor);
- for(int i=0;i<md.params.length;i++) {
- stack.pop(md.params[i].stack_size);
- }
- if(md.ret.type != CodeConstants.TYPE_VOID) {
- stack.push(md.ret);
- if(md.ret.stack_size==2) {
- stack.push(new VarType(CodeConstants.TYPE_GROUP2EMPTY));
+ case CodeConstants.opc_invokedynamic:
+ if(instr.opcode != CodeConstants.opc_invokedynamic || instr.bytecode_version >= CodeConstants.BYTECODE_JAVA_7) {
+ ck = pool.getLinkConstant(instr.getOperand(0));
+ MethodDescriptor md = MethodDescriptor.parseDescriptor(ck.descriptor);
+ for(int i=0;i<md.params.length;i++) {
+ stack.pop(md.params[i].stack_size);
+ }
+ if(md.ret.type != CodeConstants.TYPE_VOID) {
+ stack.push(md.ret);
+ if(md.ret.stack_size==2) {
+ stack.push(new VarType(CodeConstants.TYPE_GROUP2EMPTY));
+ }
}
}
break;