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 |