// set initial values for stack markers (used only in cldc mode)
int indexInStackMarkers = 0;
StackMarker[] stackMarkers = stackMapFrameCodeStream.getStackMarkers();
int stackMarkersLength = stackMarkers == null ? 0 : stackMarkers.length;
boolean hasStackMarkers = stackMarkersLength != 0;
StackMarker stackMarker = null;
if (hasStackMarkers) {
stackMarker = stackMarkers[0];
}
// set initial values for exception markers
int indexInExceptionMarkers = 0;
ExceptionMarker[] exceptionMarkers= stackMapFrameCodeStream.getExceptionMarkers();
int exceptionsMarkersLength = exceptionMarkers == null ? 0 : exceptionMarkers.length;
boolean hasExceptionMarkers = exceptionsMarkersLength != 0;
ExceptionMarker exceptionMarker = null;
if (hasExceptionMarkers) {
exceptionMarker = exceptionMarkers[0];
}
StackMapFrame frame = new StackMapFrame(maxLocals);
if (!isClinit) {
initializeDefaultLocals(frame, methodBinding, maxLocals, codeLength);
}
frame.pc = -1;
add(frames, frame.duplicate());
addRealJumpTarget(realJumpTarget, -1);
for (int i = 0, max = this.codeStream.exceptionLabelsCounter; i < max; i++) {
ExceptionLabel exceptionLabel = this.codeStream.exceptionLabels[i];
if (exceptionLabel != null) {
addRealJumpTarget(realJumpTarget, exceptionLabel.position);
}
}
while (true) {
int currentPC = pc - codeOffset;
if (hasStackMarkers && stackMarker.pc == currentPC) {
VerificationTypeInfo[] infos = frame.stackItems;
VerificationTypeInfo[] tempInfos = new VerificationTypeInfo[frame.numberOfStackItems];
System.arraycopy(infos, 0, tempInfos, 0, frame.numberOfStackItems);
stackMarker.setInfos(tempInfos);
} else if (hasStackMarkers && stackMarker.destinationPC == currentPC) {
VerificationTypeInfo[] infos = stackMarker.infos;
frame.stackItems = infos;
frame.numberOfStackItems = infos.length;
indexInStackMarkers++;