public class INVOKESPECIAL extends InstanceInvocation
argSize, arguments, cname, invokedMethod, lastObj, mname, signature
attr, insnIndex, mi, position
Constructor and Description |
---|
INVOKESPECIAL(java.lang.String clsDescriptor,
java.lang.String methodName,
java.lang.String signature) |
Modifier and Type | Method and Description |
---|---|
void |
accept(JVMInstructionVisitor insVisitor) |
Instruction |
execute(ThreadInfo ti)
this is the real workhorse
returns next instruction to enter in this thread
<2do> it's unfortunate we roll every side effect into this method, because
it diminishes the value of the 'executeInstruction' notification: all
insns that require some sort of late binding (InvokeVirtual, GetField, ..)
are not yet fully analyzable (e.g.
|
int |
getByteCode() |
java.lang.Object |
getFieldValue(java.lang.String id,
ThreadInfo ti) |
MethodInfo |
getInvokedMethod(ThreadInfo th)
we can do some more caching here - the MethodInfo should be const
|
protected boolean |
isLastUnlock(ElementInfo ei)
If the object will still be owned, then the current thread can go on.
|
protected boolean |
isLockOwner(ThreadInfo ti,
ElementInfo ei)
If the current thread already owns the lock, then the current thread can go on.
|
java.lang.String |
toString() |
getArgSize, getCalleeThis, getObjectSlot, getThisElementInfo
getArgumentAttrs, getArgumentValue, getArgumentValues, getFieldOrArgumentValue, getInvokedMethod, getInvokedMethodClassName, getInvokedMethodName, getInvokedMethodSignature, getLastObjRef, getLength, getReturnType, getReturnTypeName, hasArgumentAttr, hasArgumentObjectAttr, isCompleted, isReferenceReturnType, setInvokedMethod, setupCallee, typeSafeClone
reschedulesLockAcquisition
addAttr, asInstruction, attrIterator, attrIterator, cleanupTransients, getAttr, getAttr, getFileLocation, getFilePos, getInstructionIndex, getLineNumber, getMethodInfo, getMnemonic, getNext, getNext, getNextAttr, getPosition, getPrev, getSourceLine, getSourceLocation, getSourceOrLocation, hasAttr, hasAttr, init, isBackJump, isExtendedInstruction, isFirstInstruction, isMonitorEnterPrologue, isSchedulingRelevant, removeAttr, replaceAttr, requiresClinitExecution, setAttr, setContext, setLocation, setMethodInfo, toPostExecString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getInvokedMethod
asInstruction, getFileLocation, getFilePos, getInstructionIndex, getLength, getLineNumber, getMethodInfo, getMnemonic, getNext, getNext, getPosition, getPrev, getSourceLine, getSourceLocation, isBackJump, isCompleted, isExtendedInstruction, isFirstInstruction, toPostExecString
addAttr, attrIterator, attrIterator, getAttr, getAttr, getNextAttr, hasAttr, hasAttr, removeAttr, replaceAttr, setAttr
public INVOKESPECIAL(java.lang.String clsDescriptor, java.lang.String methodName, java.lang.String signature)
public int getByteCode()
public Instruction execute(ThreadInfo ti)
Instruction
execute
in interface InstructionInterface
execute
in class Instruction
protected boolean isLockOwner(ThreadInfo ti, ElementInfo ei)
protected boolean isLastUnlock(ElementInfo ei)
public MethodInfo getInvokedMethod(ThreadInfo th)
getInvokedMethod
in class JVMInvokeInstruction
public java.lang.String toString()
toString
in class Instruction
public java.lang.Object getFieldValue(java.lang.String id, ThreadInfo ti)
getFieldValue
in class JVMInvokeInstruction
public void accept(JVMInstructionVisitor insVisitor)
accept
in interface JVMInstruction
accept
in class InstanceInvocation