字节码:LOOKUPSWITCH和TABLESWITCH

时间:2010-03-04 20:59:21

标签: java bytecode bytecode-manipulation bcel

我目前正在使用BCEL检测字节码。在BCEL API中,两个指令类型LOOKUPSWITCHTABLESWITCHpackage org.apache.bcel.generic)正在实现接口StackProducer。我知道这两个指令弹出操作数堆栈(即使用它)并且不会在堆栈上产生任何内容,那么他​​们为什么要实现StackProducer而不是StackConsumer呢?这是一个错误吗?谢谢

(ps:我试图在BCEL邮件列表上发布这个问题但没有答案。我希望我能在这里找到更多运气)

1 个答案:

答案 0 :(得分:3)

那是a bug。但它现在已经修复了。

tree:generic jbevain$ svn log -c 1081190 && svn diff -c 1081190
------------------------------------------------------------------------
r1081190 | dbrosius | 2011-03-13 19:41:20 +0100 (Sun, 13 Mar 2011) | 1 line

Bug 48908 - Select instructions should implement StackConsumer instead of StackProducer
------------------------------------------------------------------------
Index: Select.java
===================================================================
--- Select.java (revision 1081189)
+++ Select.java (revision 1081190)
@@ -33,7 +33,7 @@
  * @see InstructionList
  */
 public abstract class Select extends BranchInstruction implements VariableLengthInstruction,
-        StackProducer {
+        StackConsumer {

     private static final long serialVersionUID = 2806771744559217250L;
     protected int[] match; // matches, i.e., case 1: ...

SelectLOOKUPSWITCHTABLESWITCH的基类。