(AbstractInsnNode ain, Frame<?> frame)
| 2129 | } |
| 2130 | |
| 2131 | private static int getStackDemand(AbstractInsnNode ain, Frame<?> frame) { |
| 2132 | switch (ain.getType()) { |
| 2133 | case AbstractInsnNode.INSN: |
| 2134 | switch (ain.getOpcode()) { |
| 2135 | case Opcodes.NOP: |
| 2136 | return 0; |
| 2137 | case Opcodes.ACONST_NULL: |
| 2138 | case Opcodes.ICONST_M1: |
| 2139 | case Opcodes.ICONST_0: |
| 2140 | case Opcodes.ICONST_1: |
| 2141 | case Opcodes.ICONST_2: |
| 2142 | case Opcodes.ICONST_3: |
| 2143 | case Opcodes.ICONST_4: |
| 2144 | case Opcodes.ICONST_5: |
| 2145 | case Opcodes.LCONST_0: |
| 2146 | case Opcodes.LCONST_1: |
| 2147 | case Opcodes.FCONST_0: |
| 2148 | case Opcodes.FCONST_1: |
| 2149 | case Opcodes.FCONST_2: |
| 2150 | case Opcodes.DCONST_0: |
| 2151 | case Opcodes.DCONST_1: |
| 2152 | return 0; // +1 |
| 2153 | case Opcodes.IALOAD: |
| 2154 | case Opcodes.LALOAD: |
| 2155 | case Opcodes.FALOAD: |
| 2156 | case Opcodes.DALOAD: |
| 2157 | case Opcodes.AALOAD: |
| 2158 | case Opcodes.BALOAD: |
| 2159 | case Opcodes.CALOAD: |
| 2160 | case Opcodes.SALOAD: |
| 2161 | return 2; // +2 |
| 2162 | case Opcodes.IASTORE: |
| 2163 | case Opcodes.LASTORE: |
| 2164 | case Opcodes.FASTORE: |
| 2165 | case Opcodes.DASTORE: |
| 2166 | case Opcodes.AASTORE: |
| 2167 | case Opcodes.BASTORE: |
| 2168 | case Opcodes.CASTORE: |
| 2169 | case Opcodes.SASTORE: |
| 2170 | return 3; |
| 2171 | case Opcodes.POP: |
| 2172 | return 1; |
| 2173 | case Opcodes.POP2: |
| 2174 | return frame.getStack(frame.getStackSize() - 1).getSize() == 1 ? 2 : 1; |
| 2175 | case Opcodes.DUP: |
| 2176 | return 1; // +2 |
| 2177 | case Opcodes.DUP_X1: |
| 2178 | return 2; // +3 |
| 2179 | case Opcodes.DUP_X2: |
| 2180 | return frame.getStack(frame.getStackSize() - 2).getSize() == 1 ? 3 : 2; // +4/3 |
| 2181 | case Opcodes.DUP2: |
| 2182 | return frame.getStack(frame.getStackSize() - 1).getSize() == 1 ? 2 : 1; // +4/2 |
| 2183 | case Opcodes.DUP2_X1: |
| 2184 | return frame.getStack(frame.getStackSize() - 1).getSize() == 1 ? 3 : 2; // +5/3 |
| 2185 | case Opcodes.DUP2_X2: |
| 2186 | if (frame.getStack(frame.getStackSize() - 1).getSize() == 1) { |
| 2187 | if (frame.getStack(frame.getStackSize() - 3).getSize() == 1) { // 4 single slots |
| 2188 | return 4; // +6 |
no test coverage detected