private void writeFrameTypes()

in org.eclipse.sisu.inject/src/org/eclipse/sisu/space/asm/MethodWriter.java [1951:2008]


    private void writeFrameTypes(final int start, final int end) {
        for (int i = start; i < end; ++i) {
            int t = frame[i];
            int d = t & Frame.DIM;
            if (d == 0) {
                int v = t & Frame.BASE_VALUE;
                switch (t & Frame.BASE_KIND) {
                case Frame.OBJECT:
                    stackMap.putByte(7).putShort(
                            cw.newClass(cw.typeTable[v].strVal1));
                    break;
                case Frame.UNINITIALIZED:
                    stackMap.putByte(8).putShort(cw.typeTable[v].intVal);
                    break;
                default:
                    stackMap.putByte(v);
                }
            } else {
                StringBuilder buf = new StringBuilder();
                d >>= 28;
                while (d-- > 0) {
                    buf.append('[');
                }
                if ((t & Frame.BASE_KIND) == Frame.OBJECT) {
                    buf.append('L');
                    buf.append(cw.typeTable[t & Frame.BASE_VALUE].strVal1);
                    buf.append(';');
                } else {
                    switch (t & 0xF) {
                    case 1:
                        buf.append('I');
                        break;
                    case 2:
                        buf.append('F');
                        break;
                    case 3:
                        buf.append('D');
                        break;
                    case 9:
                        buf.append('Z');
                        break;
                    case 10:
                        buf.append('B');
                        break;
                    case 11:
                        buf.append('C');
                        break;
                    case 12:
                        buf.append('S');
                        break;
                    default:
                        buf.append('J');
                    }
                }
                stackMap.putByte(7).putShort(cw.newClass(buf.toString()));
            }
        }
    }