001: /**
002: * ASM: a very small and fast Java bytecode manipulation framework
003: * Copyright (c) 2000-2005 INRIA, France Telecom
004: * All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: * 1. Redistributions of source code must retain the above copyright
010: * notice, this list of conditions and the following disclaimer.
011: * 2. Redistributions in binary form must reproduce the above copyright
012: * notice, this list of conditions and the following disclaimer in the
013: * documentation and/or other materials provided with the distribution.
014: * 3. Neither the name of the copyright holders nor the names of its
015: * contributors may be used to endorse or promote products derived from
016: * this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
022: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
024: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
025: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
026: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
027: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
028: * THE POSSIBILITY OF SUCH DAMAGE.
029: */package com.uwyn.rife.asm.attrs;
030:
031: import com.uwyn.rife.asm.Label;
032:
033: /**
034: * Verification type info used by {@link StackMapAttribute}.
035: *
036: * @see <a href="http://www.jcp.org/en/jsr/detail?id=139">JSR 139 : Connected
037: * Limited Device Configuration 1.1</a>
038: *
039: * @see "ClassFileFormat-Java6.fm Page 138 Friday, April 15, 2005 3:22 PM"
040: *
041: * @author Eugene Kuleshov
042: */
043:
044: public class StackMapType {
045:
046: public static final int ITEM_Top = 0;
047: public static final int ITEM_Integer = 1;
048: public static final int ITEM_Float = 2;
049: public static final int ITEM_Double = 3;
050: public static final int ITEM_Long = 4;
051: public static final int ITEM_Null = 5;
052: public static final int ITEM_UninitializedThis = 6;
053: public static final int ITEM_Object = 7;
054: public static final int ITEM_Uninitialized = 8;
055:
056: public static final String[] ITEM_NAMES = { "Top", "Integer",
057: "Float", "Double", "Long", "Null", "UninitializedThis",
058: "Object", "Uninitialized" };
059:
060: private int type;
061: private Label offset;
062: private String object;
063:
064: private StackMapType(int type) {
065: this .type = type;
066: }
067:
068: public int getType() {
069: return type;
070: }
071:
072: public static StackMapType getTypeInfo(int itemType) {
073: if (itemType < ITEM_Top || itemType > ITEM_Uninitialized) {
074: throw new IllegalArgumentException("" + itemType);
075: }
076: return new StackMapType(itemType);
077: }
078:
079: public void setLabel(Label offset) {
080: this .offset = offset;
081: }
082:
083: public void setObject(String object) {
084: this .object = object;
085: }
086:
087: public Label getLabel() {
088: return offset;
089: }
090:
091: public String getObject() {
092: return object;
093: }
094:
095: public String toString() {
096: StringBuffer sb = new StringBuffer(ITEM_NAMES[type]);
097: if (type == ITEM_Object) {
098: sb.append(":").append(object);
099: }
100: if (type == ITEM_Uninitialized) {
101: sb.append(":L").append(System.identityHashCode(offset));
102: }
103: return sb.toString();
104: }
105: }
|