private void writeFrame() {
        int clocalsSize = frame[1];
        int cstackSize = frame[2];
        if ((cw.version & 0xFFFF) < Opcodes.V1_6) {
            stackMap.putShort(frame[0]).putShort(clocalsSize);
            writeFrameTypes(3, 3 + clocalsSize);
            stackMap.putShort(cstackSize);
            writeFrameTypes(3 + clocalsSize, 3 + clocalsSize + cstackSize);
            return;
        }
        int localsSize = previousFrame[1];
        int type = FULL_FRAME;
        int k = 0;
        int delta;
        if (frameCount == 0) {
            delta = frame[0];
        } else {
            delta = frame[0] - previousFrame[0] - 1;
        }
        if (cstackSize == 0) {
            k = clocalsSize - localsSize;
            switch (k) {
            case -3:
            case -2:
            case -1:
                type = CHOP_FRAME;
                localsSize = clocalsSize;
                break;
            case 0:
                type = delta < 64 ? SAME_FRAME : SAME_FRAME_EXTENDED;
                break;
            case 1:
            case 2:
            case 3:
                type = APPEND_FRAME;
                break;
            }
        } else if (clocalsSize == localsSize && cstackSize == 1) {
            type = delta < 63 ? SAME_LOCALS_1_STACK_ITEM_FRAME
                    : SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED;
        }
        if (type != FULL_FRAME) {
            // verify if locals are the same
            int l = 3;
            for (int j = 0; j < localsSize; j++) {
                if (frame[l] != previousFrame[l]) {
                    type = FULL_FRAME;
                    break;
                }
                l++;
            }
        }
        switch (type) {
        case SAME_FRAME:
            stackMap.putByte(delta);
            break;
        case SAME_LOCALS_1_STACK_ITEM_FRAME:
            stackMap.putByte(SAME_LOCALS_1_STACK_ITEM_FRAME + delta);
            writeFrameTypes(3 + clocalsSize, 4 + clocalsSize);
            break;
        case SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED:
            stackMap.putByte(SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED).putShort(
                    delta);
            writeFrameTypes(3 + clocalsSize, 4 + clocalsSize);
            break;
        case SAME_FRAME_EXTENDED:
            stackMap.putByte(SAME_FRAME_EXTENDED).putShort(delta);
            break;
        case CHOP_FRAME:
            stackMap.putByte(SAME_FRAME_EXTENDED + k).putShort(delta);
            break;
        case APPEND_FRAME:
            stackMap.putByte(SAME_FRAME_EXTENDED + k).putShort(delta);
            writeFrameTypes(3 + localsSize, 3 + clocalsSize);
            break;
        // case FULL_FRAME:
        default:
            stackMap.putByte(FULL_FRAME).putShort(delta).putShort(clocalsSize);
            writeFrameTypes(3, 3 + clocalsSize);
            stackMap.putShort(cstackSize);
            writeFrameTypes(3 + clocalsSize, 3 + clocalsSize + cstackSize);
        }
    }
private void writeFrame() {
        int clocalsSize = frame[1];
        int cstackSize = frame[2];
        if ((cw.version & 0xFFFF) < Opcodes.V1_6) {
            stackMap.putShort(frame[0]).putShort(clocalsSize);
            writeFrameTypes(3, 3 + clocalsSize);
            stackMap.putShort(cstackSize);
            writeFrameTypes(3 + clocalsSize, 3 + clocalsSize + cstackSize);
            return;
        }
        int localsSize = previousFrame[1];
        int type = FULL_FRAME;
        int k = 0;
        int delta;
        if (frameCount == 0) {
            delta = frame[0];
        } else {
            delta = frame[0] - previousFrame[0] - 1;
        }
        if (cstackSize == 0) {
            k = clocalsSize - localsSize;
            switch (k) {
            case -3:
            case -2:
            case -1:
                type = CHOP_FRAME;
                localsSize = clocalsSize;
                break;
            case 0:
                type = delta < 64 ? SAME_FRAME : SAME_FRAME_EXTENDED;
                break;
            case 1:
            case 2:
            case 3:
                type = APPEND_FRAME;
                break;
            }
        } else if (clocalsSize == localsSize && cstackSize == 1) {
            type = delta < 63 ? SAME_LOCALS_1_STACK_ITEM_FRAME
                    : SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED;
        }
        if (type != FULL_FRAME) {
            
            int l = 3;
            for (int j = 0; j < localsSize; j++) {
                if (frame[l] != previousFrame[l]) {
                    type = FULL_FRAME;
                    break;
                }
                l++;
            }
        }
        switch (type) {
        case SAME_FRAME:
            stackMap.putByte(delta);
            break;
        case SAME_LOCALS_1_STACK_ITEM_FRAME:
            stackMap.putByte(SAME_LOCALS_1_STACK_ITEM_FRAME + delta);
            writeFrameTypes(3 + clocalsSize, 4 + clocalsSize);
            break;
        case SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED:
            stackMap.putByte(SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED).putShort(
                    delta);
            writeFrameTypes(3 + clocalsSize, 4 + clocalsSize);
            break;
        case SAME_FRAME_EXTENDED:
            stackMap.putByte(SAME_FRAME_EXTENDED).putShort(delta);
            break;
        case CHOP_FRAME:
            stackMap.putByte(SAME_FRAME_EXTENDED + k).putShort(delta);
            break;
        case APPEND_FRAME:
            stackMap.putByte(SAME_FRAME_EXTENDED + k).putShort(delta);
            writeFrameTypes(3 + localsSize, 3 + clocalsSize);
            break;
        
        default:
            stackMap.putByte(FULL_FRAME).putShort(delta).putShort(clocalsSize);
            writeFrameTypes(3, 3 + clocalsSize);
            stackMap.putShort(cstackSize);
            writeFrameTypes(3 + clocalsSize, 3 + clocalsSize + cstackSize);
        }
    }
private void writeFrame ( ) { int clocalsSize = frame [ 1 ] ; int cstackSize = frame [ 2 ] ; if ( ( cw . version & 0xFFFF ) < Opcodes . V1_6 ) { stackMap . putShort ( frame [ 0 ] ) . putShort ( clocalsSize ) ; writeFrameTypes ( 3 , 3 + clocalsSize ) ; stackMap . putShort ( cstackSize ) ; writeFrameTypes ( 3 + clocalsSize , 3 + clocalsSize + cstackSize ) ; return ; } int localsSize = previousFrame [ 1 ] ; int type = FULL_FRAME ; int k = 0 ; int delta ; if ( frameCount == 0 ) { delta = frame [ 0 ] ; } else { delta = frame [ 0 ] - previousFrame [ 0 ] - 1 ; } if ( cstackSize == 0 ) { k = clocalsSize - localsSize ; switch ( k ) { case - 3 : case - 2 : case - 1 : type = CHOP_FRAME ; localsSize = clocalsSize ; break ; case 0 : type = delta < 64 ? SAME_FRAME : SAME_FRAME_EXTENDED ; break ; case 1 : case 2 : case 3 : type = APPEND_FRAME ; break ; } } else if ( clocalsSize == localsSize && cstackSize == 1 ) { type = delta < 63 ? SAME_LOCALS_1_STACK_ITEM_FRAME : SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED ; } if ( type != FULL_FRAME ) { // verify if locals are the same int l = 3 ; for ( int j = 0 ; j < localsSize ; j ++ ) { if ( frame [ l ] != previousFrame [ l ] ) { type = FULL_FRAME ; break ; } l ++ ; } } switch ( type ) { case SAME_FRAME : stackMap . putByte ( delta ) ; break ; case SAME_LOCALS_1_STACK_ITEM_FRAME : stackMap . putByte ( SAME_LOCALS_1_STACK_ITEM_FRAME + delta ) ; writeFrameTypes ( 3 + clocalsSize , 4 + clocalsSize ) ; break ; case SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED : stackMap . putByte ( SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED ) . putShort ( delta ) ; writeFrameTypes ( 3 + clocalsSize , 4 + clocalsSize ) ; break ; case SAME_FRAME_EXTENDED : stackMap . putByte ( SAME_FRAME_EXTENDED ) . putShort ( delta ) ; break ; case CHOP_FRAME : stackMap . putByte ( SAME_FRAME_EXTENDED + k ) . putShort ( delta ) ; break ; case APPEND_FRAME : stackMap . putByte ( SAME_FRAME_EXTENDED + k ) . putShort ( delta ) ; writeFrameTypes ( 3 + localsSize , 3 + clocalsSize ) ; break ; // case FULL_FRAME: default : stackMap . putByte ( FULL_FRAME ) . putShort ( delta ) . putShort ( clocalsSize ) ; writeFrameTypes ( 3 , 3 + clocalsSize ) ; stackMap . putShort ( cstackSize ) ; writeFrameTypes ( 3 + clocalsSize , 3 + clocalsSize + cstackSize ) ; } }
Compress and writes the current frame {@link #frame} in the StackMapTable
attribute.
Compress and writes the current frame {