110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali/**
210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * ASM: a very small and fast Java bytecode manipulation framework
310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * Copyright (c) 2000-2005 INRIA, France Telecom
410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * All rights reserved.
510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *
610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * Redistribution and use in source and binary forms, with or without
710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * modification, are permitted provided that the following conditions
810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * are met:
910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * 1. Redistributions of source code must retain the above copyright
1010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *    notice, this list of conditions and the following disclaimer.
1110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * 2. Redistributions in binary form must reproduce the above copyright
1210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *    notice, this list of conditions and the following disclaimer in the
1310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *    documentation and/or other materials provided with the distribution.
1410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * 3. Neither the name of the copyright holders nor the names of its
1510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *    contributors may be used to endorse or promote products derived from
1610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *    this software without specific prior written permission.
1710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *
1810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * THE POSSIBILITY OF SUCH DAMAGE.
2910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali */
3010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
3110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Alipackage org.objectweb.asm.attrs;
3210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
3310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Aliimport org.objectweb.asm.Label;
3410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
3510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali/**
3610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * Verification type info used by {@link StackMapAttribute}.
3710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *
3810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * @see <a href="http://www.jcp.org/en/jsr/detail?id=139">JSR 139 : Connected
3910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *      Limited Device Configuration 1.1</a>
4010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *
4110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * @see "ClassFileFormat-Java6.fm Page 138 Friday, April 15, 2005 3:22 PM"
4210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *
4310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * @author Eugene Kuleshov
4410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali */
4510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
4610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Alipublic class StackMapType {
4710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
4810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static final int ITEM_Top = 0;
4910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static final int ITEM_Integer = 1;
5010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static final int ITEM_Float = 2;
5110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static final int ITEM_Double = 3;
5210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static final int ITEM_Long = 4;
5310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static final int ITEM_Null = 5;
5410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static final int ITEM_UninitializedThis = 6;
5510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static final int ITEM_Object = 7;
5610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static final int ITEM_Uninitialized = 8;
5710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
5810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static final String[] ITEM_NAMES = {
5910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        "Top",
6010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        "Integer",
6110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        "Float",
6210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        "Double",
6310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        "Long",
6410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        "Null",
6510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        "UninitializedThis",
6610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        "Object",
6710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        "Uninitialized" };
6810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
6910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    private int type;
7010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    private Label offset;
7110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    private String object;
7210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
7310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    private StackMapType(int type) {
7410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        this.type = type;
7510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
7610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
7710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public int getType() {
7810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        return type;
7910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
8010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
8110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static StackMapType getTypeInfo(int itemType) {
8210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        if (itemType < ITEM_Top || itemType > ITEM_Uninitialized) {
8310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            throw new IllegalArgumentException("" + itemType);
8410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        }
8510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        return new StackMapType(itemType);
8610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
8710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
8810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public void setLabel(Label offset) {
8910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        this.offset = offset;
9010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
9110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
9210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public void setObject(String object) {
9310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        this.object = object;
9410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
9510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
9610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public Label getLabel() {
9710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        return offset;
9810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
9910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
10010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public String getObject() {
10110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        return object;
10210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
10310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
10410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public String toString() {
10510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        StringBuffer sb = new StringBuffer(ITEM_NAMES[type]);
10610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        if (type == ITEM_Object) {
10710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            sb.append(":").append(object);
10810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        }
10910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        if (type == ITEM_Uninitialized) {
11010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            sb.append(":L").append(System.identityHashCode(offset));
11110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        }
11210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        return sb.toString();
11310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
11410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali}
115