001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.bcel.generic; 018 019/** 020 * Contains shareable instruction objects. 021 * <p> 022 * In order to save memory you can use some instructions multiply, since they have an immutable state and are directly 023 * derived from Instruction. I.e. they have no instance fields that could be changed. Since some of these instructions 024 * like ICONST_0 occur very frequently this can save a lot of time and space. This feature is an adaptation of the 025 * FlyWeight design pattern, we just use an array instead of a factory. 026 * </p> 027 * <p> 028 * The Instructions can also accessed directly under their names, so it's possible to write 029 * il.append(Instruction.ICONST_0); 030 * </p> 031 * 032 * @deprecated (since 6.0) Do not use. Use {@link InstructionConst} instead. 033 */ 034@Deprecated 035public interface InstructionConstants { 036 037 /** 038 * Deprecated, consider private and ignore. 039 */ 040 class Clinit { 041 // empty 042 } 043 044 /* 045 * NOTE these are not currently immutable, because Instruction has mutable protected fields opcode and length. 046 */ 047 Instruction NOP = InstructionConst.NOP; 048 Instruction ACONST_NULL = InstructionConst.ACONST_NULL; 049 Instruction ICONST_M1 = InstructionConst.ICONST_M1; 050 Instruction ICONST_0 = InstructionConst.ICONST_0; 051 Instruction ICONST_1 = InstructionConst.ICONST_1; 052 Instruction ICONST_2 = InstructionConst.ICONST_2; 053 Instruction ICONST_3 = InstructionConst.ICONST_3; 054 Instruction ICONST_4 = InstructionConst.ICONST_4; 055 Instruction ICONST_5 = InstructionConst.ICONST_5; 056 Instruction LCONST_0 = InstructionConst.LCONST_0; 057 Instruction LCONST_1 = InstructionConst.LCONST_1; 058 Instruction FCONST_0 = InstructionConst.FCONST_0; 059 Instruction FCONST_1 = InstructionConst.FCONST_1; 060 Instruction FCONST_2 = InstructionConst.FCONST_2; 061 Instruction DCONST_0 = InstructionConst.DCONST_0; 062 Instruction DCONST_1 = InstructionConst.DCONST_1; 063 ArrayInstruction IALOAD = InstructionConst.IALOAD; 064 ArrayInstruction LALOAD = InstructionConst.LALOAD; 065 ArrayInstruction FALOAD = InstructionConst.FALOAD; 066 ArrayInstruction DALOAD = InstructionConst.DALOAD; 067 ArrayInstruction AALOAD = InstructionConst.AALOAD; 068 ArrayInstruction BALOAD = InstructionConst.BALOAD; 069 ArrayInstruction CALOAD = InstructionConst.CALOAD; 070 ArrayInstruction SALOAD = InstructionConst.SALOAD; 071 ArrayInstruction IASTORE = InstructionConst.IASTORE; 072 ArrayInstruction LASTORE = InstructionConst.LASTORE; 073 ArrayInstruction FASTORE = InstructionConst.FASTORE; 074 ArrayInstruction DASTORE = InstructionConst.DASTORE; 075 ArrayInstruction AASTORE = InstructionConst.AASTORE; 076 ArrayInstruction BASTORE = InstructionConst.BASTORE; 077 ArrayInstruction CASTORE = InstructionConst.CASTORE; 078 ArrayInstruction SASTORE = InstructionConst.SASTORE; 079 StackInstruction POP = InstructionConst.POP; 080 StackInstruction POP2 = InstructionConst.POP2; 081 StackInstruction DUP = InstructionConst.DUP; 082 StackInstruction DUP_X1 = InstructionConst.DUP_X1; 083 StackInstruction DUP_X2 = InstructionConst.DUP_X2; 084 StackInstruction DUP2 = InstructionConst.DUP2; 085 StackInstruction DUP2_X1 = InstructionConst.DUP2_X1; 086 StackInstruction DUP2_X2 = InstructionConst.DUP2_X2; 087 StackInstruction SWAP = InstructionConst.SWAP; 088 ArithmeticInstruction IADD = InstructionConst.IADD; 089 ArithmeticInstruction LADD = InstructionConst.LADD; 090 ArithmeticInstruction FADD = InstructionConst.FADD; 091 ArithmeticInstruction DADD = InstructionConst.DADD; 092 ArithmeticInstruction ISUB = InstructionConst.ISUB; 093 ArithmeticInstruction LSUB = InstructionConst.LSUB; 094 ArithmeticInstruction FSUB = InstructionConst.FSUB; 095 ArithmeticInstruction DSUB = InstructionConst.DSUB; 096 ArithmeticInstruction IMUL = InstructionConst.IMUL; 097 ArithmeticInstruction LMUL = InstructionConst.LMUL; 098 ArithmeticInstruction FMUL = InstructionConst.FMUL; 099 ArithmeticInstruction DMUL = InstructionConst.DMUL; 100 ArithmeticInstruction IDIV = InstructionConst.IDIV; 101 ArithmeticInstruction LDIV = InstructionConst.LDIV; 102 ArithmeticInstruction FDIV = InstructionConst.FDIV; 103 ArithmeticInstruction DDIV = InstructionConst.DDIV; 104 ArithmeticInstruction IREM = InstructionConst.IREM; 105 ArithmeticInstruction LREM = InstructionConst.LREM; 106 ArithmeticInstruction FREM = InstructionConst.FREM; 107 ArithmeticInstruction DREM = InstructionConst.DREM; 108 ArithmeticInstruction INEG = InstructionConst.INEG; 109 ArithmeticInstruction LNEG = InstructionConst.LNEG; 110 ArithmeticInstruction FNEG = InstructionConst.FNEG; 111 ArithmeticInstruction DNEG = InstructionConst.DNEG; 112 ArithmeticInstruction ISHL = InstructionConst.ISHL; 113 ArithmeticInstruction LSHL = InstructionConst.LSHL; 114 ArithmeticInstruction ISHR = InstructionConst.ISHR; 115 ArithmeticInstruction LSHR = InstructionConst.LSHR; 116 ArithmeticInstruction IUSHR = InstructionConst.IUSHR; 117 ArithmeticInstruction LUSHR = InstructionConst.LUSHR; 118 ArithmeticInstruction IAND = InstructionConst.IAND; 119 ArithmeticInstruction LAND = InstructionConst.LAND; 120 ArithmeticInstruction IOR = InstructionConst.IOR; 121 ArithmeticInstruction LOR = InstructionConst.LOR; 122 ArithmeticInstruction IXOR = InstructionConst.IXOR; 123 ArithmeticInstruction LXOR = InstructionConst.LXOR; 124 ConversionInstruction I2L = InstructionConst.I2L; 125 ConversionInstruction I2F = InstructionConst.I2F; 126 ConversionInstruction I2D = InstructionConst.I2D; 127 ConversionInstruction L2I = InstructionConst.L2I; 128 ConversionInstruction L2F = InstructionConst.L2F; 129 ConversionInstruction L2D = InstructionConst.L2D; 130 ConversionInstruction F2I = InstructionConst.F2I; 131 ConversionInstruction F2L = InstructionConst.F2L; 132 ConversionInstruction F2D = InstructionConst.F2D; 133 ConversionInstruction D2I = InstructionConst.D2I; 134 ConversionInstruction D2L = InstructionConst.D2L; 135 ConversionInstruction D2F = InstructionConst.D2F; 136 ConversionInstruction I2B = InstructionConst.I2B; 137 ConversionInstruction I2C = InstructionConst.I2C; 138 ConversionInstruction I2S = InstructionConst.I2S; 139 Instruction LCMP = InstructionConst.LCMP; 140 Instruction FCMPL = InstructionConst.FCMPL; 141 Instruction FCMPG = InstructionConst.FCMPG; 142 Instruction DCMPL = InstructionConst.DCMPL; 143 Instruction DCMPG = InstructionConst.DCMPG; 144 ReturnInstruction IRETURN = InstructionConst.IRETURN; 145 ReturnInstruction LRETURN = InstructionConst.LRETURN; 146 ReturnInstruction FRETURN = InstructionConst.FRETURN; 147 ReturnInstruction DRETURN = InstructionConst.DRETURN; 148 ReturnInstruction ARETURN = InstructionConst.ARETURN; 149 ReturnInstruction RETURN = InstructionConst.RETURN; 150 Instruction ARRAYLENGTH = InstructionConst.ARRAYLENGTH; 151 Instruction ATHROW = InstructionConst.ATHROW; 152 Instruction MONITORENTER = InstructionConst.MONITORENTER; 153 Instruction MONITOREXIT = InstructionConst.MONITOREXIT; 154 155 /** 156 * You can use these constants in multiple places safely, if you can guarantee that you will never alter their internal 157 * values, e.g. call setIndex(). 158 */ 159 LocalVariableInstruction THIS = InstructionConst.THIS; 160 LocalVariableInstruction ALOAD_0 = InstructionConst.ALOAD_0; 161 LocalVariableInstruction ALOAD_1 = InstructionConst.ALOAD_1; 162 LocalVariableInstruction ALOAD_2 = InstructionConst.ALOAD_2; 163 LocalVariableInstruction ILOAD_0 = InstructionConst.ILOAD_0; 164 LocalVariableInstruction ILOAD_1 = InstructionConst.ILOAD_1; 165 LocalVariableInstruction ILOAD_2 = InstructionConst.ILOAD_2; 166 LocalVariableInstruction ASTORE_0 = InstructionConst.ASTORE_0; 167 LocalVariableInstruction ASTORE_1 = InstructionConst.ASTORE_1; 168 LocalVariableInstruction ASTORE_2 = InstructionConst.ASTORE_2; 169 LocalVariableInstruction ISTORE_0 = InstructionConst.ISTORE_0; 170 LocalVariableInstruction ISTORE_1 = InstructionConst.ISTORE_1; 171 LocalVariableInstruction ISTORE_2 = InstructionConst.ISTORE_2; 172 173 /** 174 * Gets object via its opcode, for immutable instructions like branch instructions entries are set to null. 175 */ 176 Instruction[] INSTRUCTIONS = InstructionConst.INSTRUCTIONS; 177 178 /** 179 * Interfaces may have no static initializers, so we simulate this with an inner class. 180 */ 181 Clinit bla = new Clinit(); 182}