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 } |