hotspot/src/share/vm/prims/jvm.cpp
changeset 37301 a936b4e01afb
parent 37248 11a660dbbb8e
child 37479 14a195eaf2c5
equal deleted inserted replaced
37300:82e233a4a546 37301:a936b4e01afb
  1981   // Return null for primitives and arrays
  1981   // Return null for primitives and arrays
  1982   if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
  1982   if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
  1983     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  1983     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  1984     if (k->is_instance_klass()) {
  1984     if (k->is_instance_klass()) {
  1985       instanceKlassHandle k_h(THREAD, k);
  1985       instanceKlassHandle k_h(THREAD, k);
  1986       Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL);
  1986       Handle jcp = reflect_ConstantPool::create(CHECK_NULL);
  1987       sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants());
  1987       reflect_ConstantPool::set_cp(jcp(), k_h->constants());
  1988       return JNIHandles::make_local(jcp());
  1988       return JNIHandles::make_local(jcp());
  1989     }
  1989     }
  1990   }
  1990   }
  1991   return NULL;
  1991   return NULL;
  1992 }
  1992 }
  1994 
  1994 
  1995 
  1995 
  1996 JVM_ENTRY(jint, JVM_ConstantPoolGetSize(JNIEnv *env, jobject obj, jobject unused))
  1996 JVM_ENTRY(jint, JVM_ConstantPoolGetSize(JNIEnv *env, jobject obj, jobject unused))
  1997 {
  1997 {
  1998   JVMWrapper("JVM_ConstantPoolGetSize");
  1998   JVMWrapper("JVM_ConstantPoolGetSize");
  1999   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  1999   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2000   return cp->length();
  2000   return cp->length();
  2001 }
  2001 }
  2002 JVM_END
  2002 JVM_END
  2003 
  2003 
  2004 
  2004 
  2005 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2005 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2006 {
  2006 {
  2007   JVMWrapper("JVM_ConstantPoolGetClassAt");
  2007   JVMWrapper("JVM_ConstantPoolGetClassAt");
  2008   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2008   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2009   bounds_check(cp, index, CHECK_NULL);
  2009   bounds_check(cp, index, CHECK_NULL);
  2010   constantTag tag = cp->tag_at(index);
  2010   constantTag tag = cp->tag_at(index);
  2011   if (!tag.is_klass() && !tag.is_unresolved_klass()) {
  2011   if (!tag.is_klass() && !tag.is_unresolved_klass()) {
  2012     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2012     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2013   }
  2013   }
  2017 JVM_END
  2017 JVM_END
  2018 
  2018 
  2019 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index))
  2019 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index))
  2020 {
  2020 {
  2021   JVMWrapper("JVM_ConstantPoolGetClassAtIfLoaded");
  2021   JVMWrapper("JVM_ConstantPoolGetClassAtIfLoaded");
  2022   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2022   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2023   bounds_check(cp, index, CHECK_NULL);
  2023   bounds_check(cp, index, CHECK_NULL);
  2024   constantTag tag = cp->tag_at(index);
  2024   constantTag tag = cp->tag_at(index);
  2025   if (!tag.is_klass() && !tag.is_unresolved_klass()) {
  2025   if (!tag.is_klass() && !tag.is_unresolved_klass()) {
  2026     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2026     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2027   }
  2027   }
  2062 
  2062 
  2063 JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2063 JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2064 {
  2064 {
  2065   JVMWrapper("JVM_ConstantPoolGetMethodAt");
  2065   JVMWrapper("JVM_ConstantPoolGetMethodAt");
  2066   JvmtiVMObjectAllocEventCollector oam;
  2066   JvmtiVMObjectAllocEventCollector oam;
  2067   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2067   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2068   bounds_check(cp, index, CHECK_NULL);
  2068   bounds_check(cp, index, CHECK_NULL);
  2069   jobject res = get_method_at_helper(cp, index, true, CHECK_NULL);
  2069   jobject res = get_method_at_helper(cp, index, true, CHECK_NULL);
  2070   return res;
  2070   return res;
  2071 }
  2071 }
  2072 JVM_END
  2072 JVM_END
  2073 
  2073 
  2074 JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index))
  2074 JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index))
  2075 {
  2075 {
  2076   JVMWrapper("JVM_ConstantPoolGetMethodAtIfLoaded");
  2076   JVMWrapper("JVM_ConstantPoolGetMethodAtIfLoaded");
  2077   JvmtiVMObjectAllocEventCollector oam;
  2077   JvmtiVMObjectAllocEventCollector oam;
  2078   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2078   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2079   bounds_check(cp, index, CHECK_NULL);
  2079   bounds_check(cp, index, CHECK_NULL);
  2080   jobject res = get_method_at_helper(cp, index, false, CHECK_NULL);
  2080   jobject res = get_method_at_helper(cp, index, false, CHECK_NULL);
  2081   return res;
  2081   return res;
  2082 }
  2082 }
  2083 JVM_END
  2083 JVM_END
  2109 
  2109 
  2110 JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject obj, jobject unusedl, jint index))
  2110 JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject obj, jobject unusedl, jint index))
  2111 {
  2111 {
  2112   JVMWrapper("JVM_ConstantPoolGetFieldAt");
  2112   JVMWrapper("JVM_ConstantPoolGetFieldAt");
  2113   JvmtiVMObjectAllocEventCollector oam;
  2113   JvmtiVMObjectAllocEventCollector oam;
  2114   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2114   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2115   bounds_check(cp, index, CHECK_NULL);
  2115   bounds_check(cp, index, CHECK_NULL);
  2116   jobject res = get_field_at_helper(cp, index, true, CHECK_NULL);
  2116   jobject res = get_field_at_helper(cp, index, true, CHECK_NULL);
  2117   return res;
  2117   return res;
  2118 }
  2118 }
  2119 JVM_END
  2119 JVM_END
  2120 
  2120 
  2121 JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index))
  2121 JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index))
  2122 {
  2122 {
  2123   JVMWrapper("JVM_ConstantPoolGetFieldAtIfLoaded");
  2123   JVMWrapper("JVM_ConstantPoolGetFieldAtIfLoaded");
  2124   JvmtiVMObjectAllocEventCollector oam;
  2124   JvmtiVMObjectAllocEventCollector oam;
  2125   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2125   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2126   bounds_check(cp, index, CHECK_NULL);
  2126   bounds_check(cp, index, CHECK_NULL);
  2127   jobject res = get_field_at_helper(cp, index, false, CHECK_NULL);
  2127   jobject res = get_field_at_helper(cp, index, false, CHECK_NULL);
  2128   return res;
  2128   return res;
  2129 }
  2129 }
  2130 JVM_END
  2130 JVM_END
  2131 
  2131 
  2132 JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2132 JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2133 {
  2133 {
  2134   JVMWrapper("JVM_ConstantPoolGetMemberRefInfoAt");
  2134   JVMWrapper("JVM_ConstantPoolGetMemberRefInfoAt");
  2135   JvmtiVMObjectAllocEventCollector oam;
  2135   JvmtiVMObjectAllocEventCollector oam;
  2136   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2136   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2137   bounds_check(cp, index, CHECK_NULL);
  2137   bounds_check(cp, index, CHECK_NULL);
  2138   constantTag tag = cp->tag_at(index);
  2138   constantTag tag = cp->tag_at(index);
  2139   if (!tag.is_field_or_method()) {
  2139   if (!tag.is_field_or_method()) {
  2140     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2140     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2141   }
  2141   }
  2157 
  2157 
  2158 JVM_ENTRY(jint, JVM_ConstantPoolGetClassRefIndexAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2158 JVM_ENTRY(jint, JVM_ConstantPoolGetClassRefIndexAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2159 {
  2159 {
  2160   JVMWrapper("JVM_ConstantPoolGetClassRefIndexAt");
  2160   JVMWrapper("JVM_ConstantPoolGetClassRefIndexAt");
  2161   JvmtiVMObjectAllocEventCollector oam;
  2161   JvmtiVMObjectAllocEventCollector oam;
  2162   constantPoolHandle cp(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2162   constantPoolHandle cp(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2163   bounds_check(cp, index, CHECK_0);
  2163   bounds_check(cp, index, CHECK_0);
  2164   constantTag tag = cp->tag_at(index);
  2164   constantTag tag = cp->tag_at(index);
  2165   if (!tag.is_field_or_method()) {
  2165   if (!tag.is_field_or_method()) {
  2166     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2166     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2167   }
  2167   }
  2171 
  2171 
  2172 JVM_ENTRY(jint, JVM_ConstantPoolGetNameAndTypeRefIndexAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2172 JVM_ENTRY(jint, JVM_ConstantPoolGetNameAndTypeRefIndexAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2173 {
  2173 {
  2174   JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefIndexAt");
  2174   JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefIndexAt");
  2175   JvmtiVMObjectAllocEventCollector oam;
  2175   JvmtiVMObjectAllocEventCollector oam;
  2176   constantPoolHandle cp(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2176   constantPoolHandle cp(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2177   bounds_check(cp, index, CHECK_0);
  2177   bounds_check(cp, index, CHECK_0);
  2178   constantTag tag = cp->tag_at(index);
  2178   constantTag tag = cp->tag_at(index);
  2179   if (!tag.is_invoke_dynamic() && !tag.is_field_or_method()) {
  2179   if (!tag.is_invoke_dynamic() && !tag.is_field_or_method()) {
  2180     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2180     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2181   }
  2181   }
  2185 
  2185 
  2186 JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetNameAndTypeRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2186 JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetNameAndTypeRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2187 {
  2187 {
  2188   JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefInfoAt");
  2188   JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefInfoAt");
  2189   JvmtiVMObjectAllocEventCollector oam;
  2189   JvmtiVMObjectAllocEventCollector oam;
  2190   constantPoolHandle cp(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2190   constantPoolHandle cp(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2191   bounds_check(cp, index, CHECK_NULL);
  2191   bounds_check(cp, index, CHECK_NULL);
  2192   constantTag tag = cp->tag_at(index);
  2192   constantTag tag = cp->tag_at(index);
  2193   if (!tag.is_name_and_type()) {
  2193   if (!tag.is_name_and_type()) {
  2194     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2194     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2195   }
  2195   }
  2206 JVM_END
  2206 JVM_END
  2207 
  2207 
  2208 JVM_ENTRY(jint, JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2208 JVM_ENTRY(jint, JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2209 {
  2209 {
  2210   JVMWrapper("JVM_ConstantPoolGetIntAt");
  2210   JVMWrapper("JVM_ConstantPoolGetIntAt");
  2211   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2211   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2212   bounds_check(cp, index, CHECK_0);
  2212   bounds_check(cp, index, CHECK_0);
  2213   constantTag tag = cp->tag_at(index);
  2213   constantTag tag = cp->tag_at(index);
  2214   if (!tag.is_int()) {
  2214   if (!tag.is_int()) {
  2215     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2215     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2216   }
  2216   }
  2219 JVM_END
  2219 JVM_END
  2220 
  2220 
  2221 JVM_ENTRY(jlong, JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2221 JVM_ENTRY(jlong, JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2222 {
  2222 {
  2223   JVMWrapper("JVM_ConstantPoolGetLongAt");
  2223   JVMWrapper("JVM_ConstantPoolGetLongAt");
  2224   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2224   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2225   bounds_check(cp, index, CHECK_(0L));
  2225   bounds_check(cp, index, CHECK_(0L));
  2226   constantTag tag = cp->tag_at(index);
  2226   constantTag tag = cp->tag_at(index);
  2227   if (!tag.is_long()) {
  2227   if (!tag.is_long()) {
  2228     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2228     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2229   }
  2229   }
  2232 JVM_END
  2232 JVM_END
  2233 
  2233 
  2234 JVM_ENTRY(jfloat, JVM_ConstantPoolGetFloatAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2234 JVM_ENTRY(jfloat, JVM_ConstantPoolGetFloatAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2235 {
  2235 {
  2236   JVMWrapper("JVM_ConstantPoolGetFloatAt");
  2236   JVMWrapper("JVM_ConstantPoolGetFloatAt");
  2237   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2237   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2238   bounds_check(cp, index, CHECK_(0.0f));
  2238   bounds_check(cp, index, CHECK_(0.0f));
  2239   constantTag tag = cp->tag_at(index);
  2239   constantTag tag = cp->tag_at(index);
  2240   if (!tag.is_float()) {
  2240   if (!tag.is_float()) {
  2241     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2241     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2242   }
  2242   }
  2245 JVM_END
  2245 JVM_END
  2246 
  2246 
  2247 JVM_ENTRY(jdouble, JVM_ConstantPoolGetDoubleAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2247 JVM_ENTRY(jdouble, JVM_ConstantPoolGetDoubleAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2248 {
  2248 {
  2249   JVMWrapper("JVM_ConstantPoolGetDoubleAt");
  2249   JVMWrapper("JVM_ConstantPoolGetDoubleAt");
  2250   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2250   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2251   bounds_check(cp, index, CHECK_(0.0));
  2251   bounds_check(cp, index, CHECK_(0.0));
  2252   constantTag tag = cp->tag_at(index);
  2252   constantTag tag = cp->tag_at(index);
  2253   if (!tag.is_double()) {
  2253   if (!tag.is_double()) {
  2254     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2254     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2255   }
  2255   }
  2258 JVM_END
  2258 JVM_END
  2259 
  2259 
  2260 JVM_ENTRY(jstring, JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2260 JVM_ENTRY(jstring, JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2261 {
  2261 {
  2262   JVMWrapper("JVM_ConstantPoolGetStringAt");
  2262   JVMWrapper("JVM_ConstantPoolGetStringAt");
  2263   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2263   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2264   bounds_check(cp, index, CHECK_NULL);
  2264   bounds_check(cp, index, CHECK_NULL);
  2265   constantTag tag = cp->tag_at(index);
  2265   constantTag tag = cp->tag_at(index);
  2266   if (!tag.is_string()) {
  2266   if (!tag.is_string()) {
  2267     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2267     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2268   }
  2268   }
  2273 
  2273 
  2274 JVM_ENTRY(jstring, JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject obj, jobject unused, jint index))
  2274 JVM_ENTRY(jstring, JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject obj, jobject unused, jint index))
  2275 {
  2275 {
  2276   JVMWrapper("JVM_ConstantPoolGetUTF8At");
  2276   JVMWrapper("JVM_ConstantPoolGetUTF8At");
  2277   JvmtiVMObjectAllocEventCollector oam;
  2277   JvmtiVMObjectAllocEventCollector oam;
  2278   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2278   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2279   bounds_check(cp, index, CHECK_NULL);
  2279   bounds_check(cp, index, CHECK_NULL);
  2280   constantTag tag = cp->tag_at(index);
  2280   constantTag tag = cp->tag_at(index);
  2281   if (!tag.is_symbol()) {
  2281   if (!tag.is_symbol()) {
  2282     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2282     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
  2283   }
  2283   }
  2288 JVM_END
  2288 JVM_END
  2289 
  2289 
  2290 JVM_ENTRY(jbyte, JVM_ConstantPoolGetTagAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2290 JVM_ENTRY(jbyte, JVM_ConstantPoolGetTagAt(JNIEnv *env, jobject obj, jobject unused, jint index))
  2291 {
  2291 {
  2292   JVMWrapper("JVM_ConstantPoolGetTagAt");
  2292   JVMWrapper("JVM_ConstantPoolGetTagAt");
  2293   constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2293   constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
  2294   bounds_check(cp, index, CHECK_0);
  2294   bounds_check(cp, index, CHECK_0);
  2295   constantTag tag = cp->tag_at(index);
  2295   constantTag tag = cp->tag_at(index);
  2296   jbyte result = tag.value();
  2296   jbyte result = tag.value();
  2297   // If returned tag values are not from the JVM spec, e.g. tags from 100 to 105,
  2297   // If returned tag values are not from the JVM spec, e.g. tags from 100 to 105,
  2298   // they are changed to the corresponding tags from the JVM spec, so that java code in
  2298   // they are changed to the corresponding tags from the JVM spec, so that java code in