⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame.java

📁 jboss规则引擎
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            case Opcodes.ISTORE :
            case Opcodes.LSTORE :
            case Opcodes.FSTORE :
            case Opcodes.DSTORE :
            case Opcodes.ASTORE :
                value1 = interpreter.copyOperation( insn,
                                                    pop() );
                var = ((VarInsnNode) insn).var;
                setLocal( var,
                          value1 );
                if ( value1.getSize() == 2 ) {
                    setLocal( var + 1,
                              interpreter.newValue( null ) );
                }
                if ( var > 0 ) {
                    final Value local = getLocal( var - 1 );
                    if ( local != null && local.getSize() == 2 ) {
                        setLocal( var + 1,
                                  interpreter.newValue( null ) );
                    }
                }
                break;
            case Opcodes.IASTORE :
            case Opcodes.LASTORE :
            case Opcodes.FASTORE :
            case Opcodes.DASTORE :
            case Opcodes.AASTORE :
            case Opcodes.BASTORE :
            case Opcodes.CASTORE :
            case Opcodes.SASTORE :
                value3 = pop();
                value2 = pop();
                value1 = pop();
                interpreter.ternaryOperation( insn,
                                              value1,
                                              value2,
                                              value3 );
                break;
            case Opcodes.POP :
                if ( pop().getSize() == 2 ) {
                    throw new AnalyzerException( "Illegal use of POP" );
                }
                break;
            case Opcodes.POP2 :
                if ( pop().getSize() == 1 ) {
                    if ( pop().getSize() != 1 ) {
                        throw new AnalyzerException( "Illegal use of POP2" );
                    }
                }
                break;
            case Opcodes.DUP :
                value1 = pop();
                if ( value1.getSize() != 1 ) {
                    throw new AnalyzerException( "Illegal use of DUP" );
                }
                push( interpreter.copyOperation( insn,
                                                 value1 ) );
                push( interpreter.copyOperation( insn,
                                                 value1 ) );
                break;
            case Opcodes.DUP_X1 :
                value1 = pop();
                value2 = pop();
                if ( value1.getSize() != 1 || value2.getSize() != 1 ) {
                    throw new AnalyzerException( "Illegal use of DUP_X1" );
                }
                push( interpreter.copyOperation( insn,
                                                 value1 ) );
                push( interpreter.copyOperation( insn,
                                                 value2 ) );
                push( interpreter.copyOperation( insn,
                                                 value1 ) );
                break;
            case Opcodes.DUP_X2 :
                value1 = pop();
                if ( value1.getSize() == 1 ) {
                    value2 = pop();
                    if ( value2.getSize() == 1 ) {
                        value3 = pop();
                        if ( value3.getSize() == 1 ) {
                            push( interpreter.copyOperation( insn,
                                                             value1 ) );
                            push( interpreter.copyOperation( insn,
                                                             value3 ) );
                            push( interpreter.copyOperation( insn,
                                                             value2 ) );
                            push( interpreter.copyOperation( insn,
                                                             value1 ) );
                            break;
                        }
                    } else {
                        push( interpreter.copyOperation( insn,
                                                         value1 ) );
                        push( interpreter.copyOperation( insn,
                                                         value2 ) );
                        push( interpreter.copyOperation( insn,
                                                         value1 ) );
                        break;
                    }
                }
                throw new AnalyzerException( "Illegal use of DUP_X2" );
            case Opcodes.DUP2 :
                value1 = pop();
                if ( value1.getSize() == 1 ) {
                    value2 = pop();
                    if ( value2.getSize() == 1 ) {
                        push( interpreter.copyOperation( insn,
                                                         value2 ) );
                        push( interpreter.copyOperation( insn,
                                                         value1 ) );
                        push( interpreter.copyOperation( insn,
                                                         value2 ) );
                        push( interpreter.copyOperation( insn,
                                                         value1 ) );
                        break;
                    }
                } else {
                    push( interpreter.copyOperation( insn,
                                                     value1 ) );
                    push( interpreter.copyOperation( insn,
                                                     value1 ) );
                    break;
                }
                throw new AnalyzerException( "Illegal use of DUP2" );
            case Opcodes.DUP2_X1 :
                value1 = pop();
                if ( value1.getSize() == 1 ) {
                    value2 = pop();
                    if ( value2.getSize() == 1 ) {
                        value3 = pop();
                        if ( value3.getSize() == 1 ) {
                            push( interpreter.copyOperation( insn,
                                                             value2 ) );
                            push( interpreter.copyOperation( insn,
                                                             value1 ) );
                            push( interpreter.copyOperation( insn,
                                                             value3 ) );
                            push( interpreter.copyOperation( insn,
                                                             value2 ) );
                            push( interpreter.copyOperation( insn,
                                                             value1 ) );
                            break;
                        }
                    }
                } else {
                    value2 = pop();
                    if ( value2.getSize() == 1 ) {
                        push( interpreter.copyOperation( insn,
                                                         value1 ) );
                        push( interpreter.copyOperation( insn,
                                                         value2 ) );
                        push( interpreter.copyOperation( insn,
                                                         value1 ) );
                        break;
                    }
                }
                throw new AnalyzerException( "Illegal use of DUP2_X1" );
            case Opcodes.DUP2_X2 :
                value1 = pop();
                if ( value1.getSize() == 1 ) {
                    value2 = pop();
                    if ( value2.getSize() == 1 ) {
                        value3 = pop();
                        if ( value3.getSize() == 1 ) {
                            value4 = pop();
                            if ( value4.getSize() == 1 ) {
                                push( interpreter.copyOperation( insn,
                                                                 value2 ) );
                                push( interpreter.copyOperation( insn,
                                                                 value1 ) );
                                push( interpreter.copyOperation( insn,
                                                                 value4 ) );
                                push( interpreter.copyOperation( insn,
                                                                 value3 ) );
                                push( interpreter.copyOperation( insn,
                                                                 value2 ) );
                                push( interpreter.copyOperation( insn,
                                                                 value1 ) );
                                break;
                            }
                        } else {
                            push( interpreter.copyOperation( insn,
                                                             value2 ) );
                            push( interpreter.copyOperation( insn,
                                                             value1 ) );
                            push( interpreter.copyOperation( insn,
                                                             value3 ) );
                            push( interpreter.copyOperation( insn,
                                                             value2 ) );
                            push( interpreter.copyOperation( insn,
                                                             value1 ) );
                            break;
                        }
                    }
                } else {
                    value2 = pop();
                    if ( value2.getSize() == 1 ) {
                        value3 = pop();
                        if ( value3.getSize() == 1 ) {
                            push( interpreter.copyOperation( insn,
                                                             value1 ) );
                            push( interpreter.copyOperation( insn,
                                                             value3 ) );
                            push( interpreter.copyOperation( insn,
                                                             value2 ) );
                            push( interpreter.copyOperation( insn,
                                                             value1 ) );
                            break;
                        }
                    } else {
                        push( interpreter.copyOperation( insn,
                                                         value1 ) );
                        push( interpreter.copyOperation( insn,
                                                         value2 ) );
                        push( interpreter.copyOperation( insn,
                                                         value1 ) );
                        break;
                    }
                }
                throw new AnalyzerException( "Illegal use of DUP2_X2" );
            case Opcodes.SWAP :
                value2 = pop();
                value1 = pop();
                if ( value1.getSize() != 1 || value2.getSize() != 1 ) {
                    throw new AnalyzerException( "Illegal use of SWAP" );
                }
                push( interpreter.copyOperation( insn,
                                                 value2 ) );
                push( interpreter.copyOperation( insn,
                                                 value1 ) );
                break;
            case Opcodes.IADD :
            case Opcodes.LADD :
            case Opcodes.FADD :
            case Opcodes.DADD :
            case Opcodes.ISUB :
            case Opcodes.LSUB :
            case Opcodes.FSUB :
            case Opcodes.DSUB :
            case Opcodes.IMUL :
            case Opcodes.LMUL :
            case Opcodes.FMUL :
            case Opcodes.DMUL :
            case Opcodes.IDIV :
            case Opcodes.LDIV :
            case Opcodes.FDIV :
            case Opcodes.DDIV :
            case Opcodes.IREM :
            case Opcodes.LREM :
            case Opcodes.FREM :
            case Opcodes.DREM :
                value2 = pop();
                value1 = pop();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -