190 StampPair receiverStamp = null; 191 if (plugins != null) { 192 receiverStamp = plugins.getOverridingStamp(tool, originalType, true); 193 } 194 if (receiverStamp == null) { 195 receiverStamp = StampFactory.forDeclaredType(assumptions, originalType, true); 196 } 197 198 if (plugins != null) { 199 for (ParameterPlugin plugin : plugins.getParameterPlugins()) { 200 receiver = plugin.interceptParameter(tool, index, receiverStamp); 201 if (receiver != null) { 202 break; 203 } 204 } 205 } 206 if (receiver == null) { 207 receiver = new ParameterNode(javaIndex, receiverStamp); 208 } 209 210 locals[javaIndex] = graph.addOrUnique(receiver); 211 javaIndex = 1; 212 index = 1; 213 } 214 Signature sig = method.getSignature(); 215 int max = sig.getParameterCount(false); 216 ResolvedJavaType accessingClass = originalType; 217 for (int i = 0; i < max; i++) { 218 JavaType type = sig.getParameterType(i, accessingClass); 219 if (eagerResolve) { 220 type = type.resolve(accessingClass); 221 } 222 JavaKind kind = type.getJavaKind(); 223 StampPair stamp = null; 224 if (plugins != null) { 225 stamp = plugins.getOverridingStamp(tool, type, false); 226 } 227 if (stamp == null) { 228 stamp = StampFactory.forDeclaredType(assumptions, type, false); 229 } 230 231 FloatingNode param = null; 232 if (plugins != null) { 233 for (ParameterPlugin plugin : plugins.getParameterPlugins()) { 234 param = plugin.interceptParameter(tool, index, stamp); 235 if (param != null) { 236 break; 237 } 238 } 239 } 240 if (param == null) { 241 param = new ParameterNode(index, stamp); 242 } 243 244 locals[javaIndex] = graph.addOrUnique(param); 245 javaIndex++; 246 if (kind.needsTwoSlots()) { 247 locals[javaIndex] = TWO_SLOT_MARKER; 248 javaIndex++; 249 } 250 index++; 251 } 252 } 253 254 private FrameStateBuilder(FrameStateBuilder other) { 255 this.parser = other.parser; 256 this.tool = other.tool; 257 this.code = other.code; 258 this.stackSize = other.stackSize; 259 this.locals = other.locals.clone(); 260 this.stack = other.stack.clone(); 261 this.lockedObjects = other.lockedObjects.length == 0 ? other.lockedObjects : other.lockedObjects.clone(); 262 this.rethrowException = other.rethrowException; 263 this.canVerifyKind = other.canVerifyKind; 264 | 190 StampPair receiverStamp = null; 191 if (plugins != null) { 192 receiverStamp = plugins.getOverridingStamp(tool, originalType, true); 193 } 194 if (receiverStamp == null) { 195 receiverStamp = StampFactory.forDeclaredType(assumptions, originalType, true); 196 } 197 198 if (plugins != null) { 199 for (ParameterPlugin plugin : plugins.getParameterPlugins()) { 200 receiver = plugin.interceptParameter(tool, index, receiverStamp); 201 if (receiver != null) { 202 break; 203 } 204 } 205 } 206 if (receiver == null) { 207 receiver = new ParameterNode(javaIndex, receiverStamp); 208 } 209 210 locals[javaIndex] = graph.addOrUniqueWithInputs(receiver); 211 javaIndex = 1; 212 index = 1; 213 } 214 Signature sig = method.getSignature(); 215 int max = sig.getParameterCount(false); 216 ResolvedJavaType accessingClass = originalType; 217 for (int i = 0; i < max; i++) { 218 JavaType type = sig.getParameterType(i, accessingClass); 219 if (eagerResolve) { 220 type = type.resolve(accessingClass); 221 } 222 JavaKind kind = type.getJavaKind(); 223 StampPair stamp = null; 224 if (plugins != null) { 225 stamp = plugins.getOverridingStamp(tool, type, false); 226 } 227 if (stamp == null) { 228 stamp = StampFactory.forDeclaredType(assumptions, type, false); 229 } 230 231 FloatingNode param = null; 232 if (plugins != null) { 233 for (ParameterPlugin plugin : plugins.getParameterPlugins()) { 234 param = plugin.interceptParameter(tool, index, stamp); 235 if (param != null) { 236 break; 237 } 238 } 239 } 240 if (param == null) { 241 param = new ParameterNode(index, stamp); 242 } 243 244 locals[javaIndex] = graph.addOrUniqueWithInputs(param); 245 javaIndex++; 246 if (kind.needsTwoSlots()) { 247 locals[javaIndex] = TWO_SLOT_MARKER; 248 javaIndex++; 249 } 250 index++; 251 } 252 } 253 254 private FrameStateBuilder(FrameStateBuilder other) { 255 this.parser = other.parser; 256 this.tool = other.tool; 257 this.code = other.code; 258 this.stackSize = other.stackSize; 259 this.locals = other.locals.clone(); 260 this.stack = other.stack.clone(); 261 this.lockedObjects = other.lockedObjects.length == 0 ? other.lockedObjects : other.lockedObjects.clone(); 262 this.rethrowException = other.rethrowException; 263 this.canVerifyKind = other.canVerifyKind; 264 |