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