MCPcopy Create free account
hub / github.com/FabricMC/Matcher / getStackDemand

Method getStackDemand

src/main/java/matcher/type/Analysis.java:2131–2383  ·  view source on GitHub ↗
(AbstractInsnNode ain, Frame<?> frame)

Source from the content-addressed store, hash-verified

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

Callers 1

checkInitializerMethod · 0.95

Calls 3

getClassMethod · 0.80
getNameMethod · 0.65
getTypeMethod · 0.45

Tested by

no test coverage detected