< prev index next >

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

Print this page




 554         SymbolicEncodedGraph(byte[] encoding, int startOffset, Object[] objects, NodeClass<?>[] types, String originalMethod, ResolvedJavaType... accessingClasses) {
 555             super(encoding, startOffset, objects, types, null, null, null, false, false);
 556             this.accessingClasses = accessingClasses;
 557             this.originalMethod = originalMethod;
 558         }
 559 
 560         SymbolicEncodedGraph(EncodedGraph encodedGraph, ResolvedJavaType declaringClass, String originalMethod) {
 561             this(encodedGraph.getEncoding(), encodedGraph.getStartOffset(), encodedGraph.getObjects(), encodedGraph.getNodeClasses(),
 562                             originalMethod, declaringClass);
 563         }
 564 
 565         @Override
 566         public Object getObject(int i) {
 567             Object o = objects[i];
 568             Object replacement = null;
 569             if (o instanceof SymbolicJVMCIReference) {
 570                 for (ResolvedJavaType type : accessingClasses) {
 571                     try {
 572                         replacement = ((SymbolicJVMCIReference<?>) o).resolve(type);
 573                         break;
 574                     } catch (NoClassDefFoundError | AssertionError e) {
 575                     }
 576                 }
 577             } else if (o instanceof UnresolvedJavaType) {
 578                 for (ResolvedJavaType type : accessingClasses) {
 579                     try {
 580                         replacement = ((UnresolvedJavaType) o).resolve(type);
 581                         break;
 582                     } catch (NoClassDefFoundError | AssertionError e) {
 583                     }
 584                 }
 585             } else if (o instanceof UnresolvedJavaMethod) {
 586                 throw new InternalError(o.toString());
 587             } else if (o instanceof UnresolvedJavaField) {
 588                 for (ResolvedJavaType type : accessingClasses) {
 589                     try {
 590                         replacement = ((UnresolvedJavaField) o).resolve(type);
 591                         break;
 592                     } catch (NoClassDefFoundError | AssertionError e) {
 593                     }
 594                 }
 595             } else if (o instanceof GraalCapability) {
 596                 replacement = ((GraalCapability) o).resolve(((GraalJVMCICompiler) getRuntime().getCompiler()).getGraalRuntime());
 597             } else {
 598                 return o;
 599             }
 600             if (replacement != null) {
 601                 objects[i] = o = replacement;
 602             } else {
 603                 throw new GraalError("Can't resolve " + o);
 604             }
 605             return o;
 606         }
 607 
 608         @Override
 609         public boolean isCallToOriginal(ResolvedJavaMethod callTarget) {
 610             if (originalMethod != null && originalMethod.equals(methodKey(callTarget))) {
 611                 return true;
 612             }




 554         SymbolicEncodedGraph(byte[] encoding, int startOffset, Object[] objects, NodeClass<?>[] types, String originalMethod, ResolvedJavaType... accessingClasses) {
 555             super(encoding, startOffset, objects, types, null, null, null, false, false);
 556             this.accessingClasses = accessingClasses;
 557             this.originalMethod = originalMethod;
 558         }
 559 
 560         SymbolicEncodedGraph(EncodedGraph encodedGraph, ResolvedJavaType declaringClass, String originalMethod) {
 561             this(encodedGraph.getEncoding(), encodedGraph.getStartOffset(), encodedGraph.getObjects(), encodedGraph.getNodeClasses(),
 562                             originalMethod, declaringClass);
 563         }
 564 
 565         @Override
 566         public Object getObject(int i) {
 567             Object o = objects[i];
 568             Object replacement = null;
 569             if (o instanceof SymbolicJVMCIReference) {
 570                 for (ResolvedJavaType type : accessingClasses) {
 571                     try {
 572                         replacement = ((SymbolicJVMCIReference<?>) o).resolve(type);
 573                         break;
 574                     } catch (NoClassDefFoundError e) {
 575                     }
 576                 }
 577             } else if (o instanceof UnresolvedJavaType) {
 578                 for (ResolvedJavaType type : accessingClasses) {
 579                     try {
 580                         replacement = ((UnresolvedJavaType) o).resolve(type);
 581                         break;
 582                     } catch (NoClassDefFoundError e) {
 583                     }
 584                 }
 585             } else if (o instanceof UnresolvedJavaMethod) {
 586                 throw new InternalError(o.toString());
 587             } else if (o instanceof UnresolvedJavaField) {
 588                 for (ResolvedJavaType type : accessingClasses) {
 589                     try {
 590                         replacement = ((UnresolvedJavaField) o).resolve(type);
 591                         break;
 592                     } catch (NoClassDefFoundError e) {
 593                     }
 594                 }
 595             } else if (o instanceof GraalCapability) {
 596                 replacement = ((GraalCapability) o).resolve(((GraalJVMCICompiler) getRuntime().getCompiler()).getGraalRuntime());
 597             } else {
 598                 return o;
 599             }
 600             if (replacement != null) {
 601                 objects[i] = o = replacement;
 602             } else {
 603                 throw new GraalError("Can't resolve " + o);
 604             }
 605             return o;
 606         }
 607 
 608         @Override
 609         public boolean isCallToOriginal(ResolvedJavaMethod callTarget) {
 610             if (originalMethod != null && originalMethod.equals(methodKey(callTarget))) {
 611                 return true;
 612             }


< prev index next >