public abstract class ObjectScanner extends Object
ObjectScanner.ReusableSet
).Modifier and Type | Class and Description |
---|---|
protected static class |
ObjectScanner.FieldScan |
protected static class |
ObjectScanner.MethodScan |
static class |
ObjectScanner.ReusableSet
This datastructure keeps track if an object was already put or not atomically.
|
static interface |
ObjectScanner.ScanReason |
Constructor and Description |
---|
ObjectScanner(BigBang bigbang,
CompletionExecutor executor,
ObjectScanner.ReusableSet scannedObjects) |
Modifier and Type | Method and Description |
---|---|
protected static AnalysisType |
analysisType(BigBang bb,
Object constant) |
protected static Object |
constantAsObject(BigBang bb,
jdk.vm.ci.meta.JavaConstant constant) |
protected static AnalysisType |
constantType(BigBang bb,
jdk.vm.ci.meta.JavaConstant constant) |
protected void |
finish()
Process all consequences for scanned fields.
|
abstract void |
forNonNullArrayElement(jdk.vm.ci.meta.JavaConstant array,
AnalysisType arrayType,
jdk.vm.ci.meta.JavaConstant elementConstant,
AnalysisType elementType,
int elementIndex)
Hook for scanned non-null element value.
|
abstract void |
forNonNullFieldValue(jdk.vm.ci.meta.JavaConstant receiver,
AnalysisField field,
jdk.vm.ci.meta.JavaConstant fieldValue)
Hook for scanned non-null field value.
|
abstract void |
forNullArrayElement(jdk.vm.ci.meta.JavaConstant array,
AnalysisType arrayType,
int elementIndex)
Hook for scanned null element value.
|
abstract void |
forNullFieldValue(jdk.vm.ci.meta.JavaConstant receiver,
AnalysisField field)
Hook for scanned null field value.
|
abstract void |
forRelocatedPointerFieldValue(jdk.vm.ci.meta.JavaConstant receiver,
AnalysisField field,
jdk.vm.ci.meta.JavaConstant fieldValue)
Hook for relocated pointer scanned field value.
|
protected abstract void |
forScannedConstant(jdk.vm.ci.meta.JavaConstant scannedValue,
ObjectScanner.ScanReason reason)
Hook for scanned constant.
|
protected void |
scanArray(jdk.vm.ci.meta.JavaConstant array,
com.oracle.graal.pointsto.ObjectScanner.WorklistEntry previous)
Scans constant arrays, one element at the time.
|
void |
scanBootImageHeapRoots(Comparator<AnalysisField> fieldComparator,
Comparator<jdk.vm.ci.code.BytecodePosition> embeddedRootComparator) |
void |
scanConstant(jdk.vm.ci.meta.JavaConstant value,
ObjectScanner.ScanReason reason) |
void |
scanConstant(jdk.vm.ci.meta.JavaConstant value,
ObjectScanner.ScanReason reason,
com.oracle.graal.pointsto.ObjectScanner.WorklistEntry previous) |
protected void |
scanField(AnalysisField field,
jdk.vm.ci.meta.JavaConstant receiver,
com.oracle.graal.pointsto.ObjectScanner.WorklistEntry previous)
Scans the value of a field giving a receiver object.
|
protected void |
scanRootField(AnalysisField field)
Scans the value of a root field.
|
protected final BigBang bb
public ObjectScanner(BigBang bigbang, CompletionExecutor executor, ObjectScanner.ReusableSet scannedObjects)
public void scanBootImageHeapRoots(Comparator<AnalysisField> fieldComparator, Comparator<jdk.vm.ci.code.BytecodePosition> embeddedRootComparator)
public abstract void forRelocatedPointerFieldValue(jdk.vm.ci.meta.JavaConstant receiver, AnalysisField field, jdk.vm.ci.meta.JavaConstant fieldValue)
public abstract void forNullFieldValue(jdk.vm.ci.meta.JavaConstant receiver, AnalysisField field)
public abstract void forNonNullFieldValue(jdk.vm.ci.meta.JavaConstant receiver, AnalysisField field, jdk.vm.ci.meta.JavaConstant fieldValue)
protected final void scanRootField(AnalysisField field)
field
- the scanned root fieldprotected final void scanField(AnalysisField field, jdk.vm.ci.meta.JavaConstant receiver, com.oracle.graal.pointsto.ObjectScanner.WorklistEntry previous)
field
- the scanned fieldreceiver
- the receiver objectprevious
- reference to the work list entry containing parent objectpublic abstract void forNullArrayElement(jdk.vm.ci.meta.JavaConstant array, AnalysisType arrayType, int elementIndex)
public abstract void forNonNullArrayElement(jdk.vm.ci.meta.JavaConstant array, AnalysisType arrayType, jdk.vm.ci.meta.JavaConstant elementConstant, AnalysisType elementType, int elementIndex)
protected final void scanArray(jdk.vm.ci.meta.JavaConstant array, com.oracle.graal.pointsto.ObjectScanner.WorklistEntry previous)
array
- the array to be scannedprevious
- reference to the work list entry containing parent objectprotected abstract void forScannedConstant(jdk.vm.ci.meta.JavaConstant scannedValue, ObjectScanner.ScanReason reason)
public final void scanConstant(jdk.vm.ci.meta.JavaConstant value, ObjectScanner.ScanReason reason)
public final void scanConstant(jdk.vm.ci.meta.JavaConstant value, ObjectScanner.ScanReason reason, com.oracle.graal.pointsto.ObjectScanner.WorklistEntry previous)
protected void finish()
exec
, to mitigate the calling overhead.
Processing fields can issue new fields to be scanned so we always add the check for workitems
at the end of the worklist.protected static AnalysisType analysisType(BigBang bb, Object constant)
protected static AnalysisType constantType(BigBang bb, jdk.vm.ci.meta.JavaConstant constant)