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