< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/FrameStateBuilder.java

Print this page




 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 


< prev index next >