javap/src/main/java/org/apidesign/javap/StackMapData.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 07 Feb 2013 12:58:12 +0100
branchemul
changeset 694 0d277415ed02
parent 149 32653a09f0db
permissions -rw-r--r--
Rebasing the Inflater support on jzlib which, unlike GNU ClassPath, has correct implementation of Huffman code. Making the implementation more easily testable by turning Inflater and ZipInputStream into pure delegates. Current implementation is going to need proper long support.
jtulach@144
     1
/*
jtulach@144
     2
 * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
jtulach@144
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
jtulach@144
     4
 *
jtulach@144
     5
 * This code is free software; you can redistribute it and/or modify it
jtulach@144
     6
 * under the terms of the GNU General Public License version 2 only, as
jtulach@144
     7
 * published by the Free Software Foundation.  Oracle designates this
jtulach@144
     8
 * particular file as subject to the "Classpath" exception as provided
jtulach@144
     9
 * by Oracle in the LICENSE file that accompanied this code.
jtulach@144
    10
 *
jtulach@144
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
jtulach@144
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
jtulach@144
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
jtulach@144
    14
 * version 2 for more details (a copy is included in the LICENSE file that
jtulach@144
    15
 * accompanied this code).
jtulach@144
    16
 *
jtulach@144
    17
 * You should have received a copy of the GNU General Public License version
jtulach@144
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
jtulach@144
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
jtulach@144
    20
 *
jtulach@144
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
jtulach@144
    22
 * or visit www.oracle.com if you need additional information or have any
jtulach@144
    23
 * questions.
jtulach@144
    24
 */
jtulach@144
    25
jtulach@144
    26
jtulach@167
    27
package org.apidesign.javap;
jtulach@144
    28
jtulach@144
    29
import java.util.*;
jtulach@144
    30
import java.io.*;
jtulach@144
    31
jtulach@167
    32
import static org.apidesign.javap.RuntimeConstants.*;
jtulach@144
    33
jtulach@144
    34
/* represents one entry of StackMap attribute
jtulach@144
    35
 */
jtulach@144
    36
class StackMapData {
jtulach@144
    37
    final int offset;
jtulach@144
    38
    final int[] locals;
jtulach@144
    39
    final int[] stack;
jtulach@144
    40
jtulach@144
    41
    StackMapData(int offset, int[] locals, int[] stack) {
jtulach@144
    42
        this.offset = offset;
jtulach@144
    43
        this.locals = locals;
jtulach@144
    44
        this.stack = stack;
jtulach@144
    45
    }
jtulach@144
    46
jtulach@144
    47
    StackMapData(DataInputStream in, MethodData method) throws IOException {
jtulach@144
    48
        offset = in.readUnsignedShort();
jtulach@144
    49
        int local_size = in.readUnsignedShort();
jtulach@144
    50
        locals = readTypeArray(in, local_size, method);
jtulach@144
    51
        int stack_size = in.readUnsignedShort();
jtulach@144
    52
        stack = readTypeArray(in, stack_size, method);
jtulach@144
    53
    }
jtulach@144
    54
jtulach@144
    55
    static final int[] readTypeArray(DataInputStream in, int length, MethodData method) throws IOException {
jtulach@144
    56
        int[] types = new int[length];
jtulach@144
    57
        for (int i=0; i<length; i++) {
jtulach@144
    58
            types[i] = readType(in, method);
jtulach@144
    59
        }
jtulach@144
    60
        return types;
jtulach@144
    61
    }
jtulach@144
    62
jtulach@144
    63
    static final int readType(DataInputStream in, MethodData method) throws IOException {
jtulach@144
    64
        int type = in.readUnsignedByte();
jtulach@144
    65
        if (type == ITEM_Object || type == ITEM_NewObject) {
jtulach@144
    66
            type = type | (in.readUnsignedShort()<<8);
jtulach@144
    67
        }
jtulach@144
    68
        return type;
jtulach@144
    69
    }
jtulach@144
    70
jtulach@144
    71
}