代码之家  ›  专栏  ›  技术社区  ›  H-H

字节码:lookupswitch和tableswitch

  •  4
  • H-H  · 技术社区  · 15 年前

    我目前正在使用bcel检测字节码。在bcel api中,这两种指令类型 LOOKUPSWITCH TABLESWITCH ( package org.apache.bcel.generic )正在实现接口 StackProducer . 我知道这两条指令会弹出操作数堆栈(即使用它),并且不会在堆栈上产生任何结果,所以它们是如何实现的? 堆栈生成器 而不是 StackConsumer ?这是虫子吗?谢谢你

    (附言:我试图把这个问题贴在BCEL的邮件列表上,但没有得到答案。我希望我能在这里找到更多的运气)

    1 回复  |  直到 13 年前
        1
  •  3
  •   Jb Evain    13 年前

    它是 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: ...
    

    Select 是的基类 LOOKUPSWITCH TABLESWITCH .