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