1 /* 2 * Copyright (c) 2002, 2013, 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. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 package sun.jvm.hotspot.runtime; 26 27 public interface ClassConstants 28 { 29 // constant pool constant types - from JVM spec. 30 31 public static final int JVM_CONSTANT_Utf8 = 1; 32 public static final int JVM_CONSTANT_Unicode = 2; // unused 33 public static final int JVM_CONSTANT_Integer = 3; 34 public static final int JVM_CONSTANT_Float = 4; 35 public static final int JVM_CONSTANT_Long = 5; 36 public static final int JVM_CONSTANT_Double = 6; 37 public static final int JVM_CONSTANT_Class = 7; 38 public static final int JVM_CONSTANT_String = 8; 39 public static final int JVM_CONSTANT_Fieldref = 9; 40 public static final int JVM_CONSTANT_Methodref = 10; 41 public static final int JVM_CONSTANT_InterfaceMethodref = 11; 42 public static final int JVM_CONSTANT_NameAndType = 12; 43 public static final int JVM_CONSTANT_MethodHandle = 15; 44 public static final int JVM_CONSTANT_MethodType = 16; 45 public static final int JVM_CONSTANT_Dynamic = 17; 46 public static final int JVM_CONSTANT_InvokeDynamic = 18; 47 48 // JVM_CONSTANT_MethodHandle subtypes 49 public static final int JVM_REF_getField = 1; 50 public static final int JVM_REF_getStatic = 2; 51 public static final int JVM_REF_putField = 3; 52 public static final int JVM_REF_putStatic = 4; 53 public static final int JVM_REF_invokeVirtual = 5; 54 public static final int JVM_REF_invokeStatic = 6; 55 public static final int JVM_REF_invokeSpecial = 7; 56 public static final int JVM_REF_newInvokeSpecial = 8; 57 public static final int JVM_REF_invokeInterface = 9; 58 59 // HotSpot specific constant pool constant types. 60 61 // For bad value initialization 62 public static final int JVM_CONSTANT_Invalid = 0; 63 64 public static final int JVM_CONSTANT_UnresolvedClass = 100; // Temporary tag until actual use 65 public static final int JVM_CONSTANT_ClassIndex = 101; // Temporary tag while constructing constant pool 66 public static final int JVM_CONSTANT_StringIndex = 102; // Temporary tag while constructing constant pool 67 public static final int JVM_CONSTANT_UnresolvedClassInError = 103; // Error tag due to resolution error 68 public static final int JVM_CONSTANT_MethodHandleInError = 104; // Error tag due to resolution error 69 public static final int JVM_CONSTANT_MethodTypeInError = 105; // Error tag due to resolution error 70 71 // 1.5 major/minor version numbers from JVM spec. 3rd edition 72 public static final short MAJOR_VERSION = 49; 73 public static final short MINOR_VERSION = 0; 74 75 public static final short MAJOR_VERSION_OLD = 46; 76 public static final short MINOR_VERSION_OLD = 0; 77 78 // From jvm.h 79 public static final long JVM_ACC_PUBLIC = 0x0001; /* visible to everyone */ 80 public static final long JVM_ACC_PRIVATE = 0x0002; /* visible only to the defining class */ 81 public static final long JVM_ACC_PROTECTED = 0x0004; /* visible to subclasses */ 82 public static final long JVM_ACC_STATIC = 0x0008; /* instance variable is static */ 83 public static final long JVM_ACC_FINAL = 0x0010; /* no further subclassing, overriding */ 84 public static final long JVM_ACC_SYNCHRONIZED = 0x0020; /* wrap method call in monitor lock */ 85 public static final long JVM_ACC_SUPER = 0x0020; /* funky handling of invokespecial */ 86 public static final long JVM_ACC_VOLATILE = 0x0040; /* can not cache in registers */ 87 public static final long JVM_ACC_BRIDGE = 0x0040; /* bridge method generated by compiler */ 88 public static final long JVM_ACC_TRANSIENT = 0x0080; /* not persistant */ 89 public static final long JVM_ACC_VARARGS = 0x0080; /* method declared with variable number of args */ 90 public static final long JVM_ACC_NATIVE = 0x0100; /* implemented in C */ 91 public static final long JVM_ACC_INTERFACE = 0x0200; /* class is an interface */ 92 public static final long JVM_ACC_ABSTRACT = 0x0400; /* no definition provided */ 93 public static final long JVM_ACC_STRICT = 0x0800; /* strict floating point */ 94 public static final long JVM_ACC_SYNTHETIC = 0x1000; /* compiler-generated class, method or field */ 95 public static final long JVM_ACC_ANNOTATION = 0x2000; /* annotation type */ 96 public static final long JVM_ACC_ENUM = 0x4000; /* field is declared as element of enum */ 97 98 99 // from accessFlags.hpp - hotspot internal flags 100 101 // flags actually put in .class file 102 public static final long JVM_ACC_WRITTEN_FLAGS = 0x00007FFF; 103 104 // Method* flags 105 // monitorenter/monitorexit bytecodes match 106 public static final long JVM_ACC_MONITOR_MATCH = 0x10000000; 107 // Method contains monitorenter/monitorexit bytecodes 108 public static final long JVM_ACC_HAS_MONITOR_BYTECODES = 0x20000000; 109 // Method has loops 110 public static final long JVM_ACC_HAS_LOOPS = 0x40000000; 111 // The loop flag has been initialized 112 public static final long JVM_ACC_LOOPS_FLAG_INIT = (int)0x80000000; 113 // Queued for compilation 114 public static final long JVM_ACC_QUEUED = 0x01000000; 115 // TEMPORARY: currently on stack replacement compilation is not built into the 116 // invocation counter machinery. Until it is, we will keep track of methods which 117 // cannot be on stack replaced in the access flags. 118 public static final long JVM_ACC_NOT_OSR_COMPILABLE = 0x08000000; 119 public static final long JVM_ACC_HAS_LINE_NUMBER_TABLE = 0x00100000; 120 public static final long JVM_ACC_HAS_CHECKED_EXCEPTIONS = 0x00400000; 121 public static final long JVM_ACC_HAS_JSRS = 0x00800000; 122 // RedefineClasses() has made method obsolete 123 public static final long JVM_ACC_IS_OBSOLETE = 0x00010000; 124 125 // Klass* flags 126 // True if this class has miranda methods in it's vtable 127 public static final long JVM_ACC_HAS_MIRANDA_METHODS = 0x10000000; 128 // True if klass has a vanilla default constructor 129 public static final long JVM_ACC_HAS_VANILLA_CONSTRUCTOR = 0x20000000; 130 // True if klass has a non-empty finalize() method 131 public static final long JVM_ACC_HAS_FINALIZER = 0x40000000; 132 // True if klass supports the Clonable interface 133 public static final long JVM_ACC_IS_CLONEABLE = 0x80000000; 134 135 // Klass* and Method* flags 136 public static final long JVM_ACC_HAS_LOCAL_VARIABLE_TABLE = 0x00200000; 137 // flags promoted from methods to the holding klass 138 public static final long JVM_ACC_PROMOTED_FLAGS = 0x00200000; 139 140 // field flags 141 // Note: these flags must be defined in the low order 16 bits because 142 // InstanceKlass only stores a ushort worth of information from the 143 // AccessFlags value. 144 // field access is watched by JVMTI 145 public static final long JVM_ACC_FIELD_ACCESS_WATCHED = 0x00002000; 146 // field modification is watched by JVMTI 147 public static final long JVM_ACC_FIELD_MODIFICATION_WATCHED = 0x00008000; 148 // field has generic signature 149 public static final long JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE = 0x00000800; 150 151 // flags accepted by set_field_flags 152 public static final long JVM_ACC_FIELD_FLAGS = 0x00008000 | JVM_ACC_WRITTEN_FLAGS; 153 154 // from jvm.h 155 156 public static final long JVM_RECOGNIZED_CLASS_MODIFIERS = (JVM_ACC_PUBLIC | 157 JVM_ACC_FINAL | 158 JVM_ACC_SUPER | 159 JVM_ACC_INTERFACE | 160 JVM_ACC_ABSTRACT | 161 JVM_ACC_ANNOTATION | 162 JVM_ACC_ENUM | 163 JVM_ACC_SYNTHETIC); 164 165 166 public static final long JVM_RECOGNIZED_FIELD_MODIFIERS = (JVM_ACC_PUBLIC | 167 JVM_ACC_PRIVATE | 168 JVM_ACC_PROTECTED | 169 JVM_ACC_STATIC | 170 JVM_ACC_FINAL | 171 JVM_ACC_VOLATILE | 172 JVM_ACC_TRANSIENT | 173 JVM_ACC_ENUM | 174 JVM_ACC_SYNTHETIC); 175 176 public static final long JVM_RECOGNIZED_METHOD_MODIFIERS = (JVM_ACC_PUBLIC | 177 JVM_ACC_PRIVATE | 178 JVM_ACC_PROTECTED | 179 JVM_ACC_STATIC | 180 JVM_ACC_FINAL | 181 JVM_ACC_SYNCHRONIZED | 182 JVM_ACC_BRIDGE | 183 JVM_ACC_VARARGS | 184 JVM_ACC_NATIVE | 185 JVM_ACC_ABSTRACT | 186 JVM_ACC_STRICT | 187 JVM_ACC_SYNTHETIC); 188 } 189