1938 // Return null for primitives and arrays |
1938 // Return null for primitives and arrays |
1939 if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { |
1939 if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { |
1940 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); |
1940 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); |
1941 if (k->is_instance_klass()) { |
1941 if (k->is_instance_klass()) { |
1942 instanceKlassHandle k_h(THREAD, k); |
1942 instanceKlassHandle k_h(THREAD, k); |
1943 Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL); |
1943 Handle jcp = reflect_ConstantPool::create(CHECK_NULL); |
1944 sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants()); |
1944 reflect_ConstantPool::set_cp(jcp(), k_h->constants()); |
1945 return JNIHandles::make_local(jcp()); |
1945 return JNIHandles::make_local(jcp()); |
1946 } |
1946 } |
1947 } |
1947 } |
1948 return NULL; |
1948 return NULL; |
1949 } |
1949 } |
1951 |
1951 |
1952 |
1952 |
1953 JVM_ENTRY(jint, JVM_ConstantPoolGetSize(JNIEnv *env, jobject obj, jobject unused)) |
1953 JVM_ENTRY(jint, JVM_ConstantPoolGetSize(JNIEnv *env, jobject obj, jobject unused)) |
1954 { |
1954 { |
1955 JVMWrapper("JVM_ConstantPoolGetSize"); |
1955 JVMWrapper("JVM_ConstantPoolGetSize"); |
1956 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
1956 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
1957 return cp->length(); |
1957 return cp->length(); |
1958 } |
1958 } |
1959 JVM_END |
1959 JVM_END |
1960 |
1960 |
1961 |
1961 |
1962 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
1962 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
1963 { |
1963 { |
1964 JVMWrapper("JVM_ConstantPoolGetClassAt"); |
1964 JVMWrapper("JVM_ConstantPoolGetClassAt"); |
1965 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
1965 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
1966 bounds_check(cp, index, CHECK_NULL); |
1966 bounds_check(cp, index, CHECK_NULL); |
1967 constantTag tag = cp->tag_at(index); |
1967 constantTag tag = cp->tag_at(index); |
1968 if (!tag.is_klass() && !tag.is_unresolved_klass()) { |
1968 if (!tag.is_klass() && !tag.is_unresolved_klass()) { |
1969 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
1969 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
1970 } |
1970 } |
1974 JVM_END |
1974 JVM_END |
1975 |
1975 |
1976 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index)) |
1976 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index)) |
1977 { |
1977 { |
1978 JVMWrapper("JVM_ConstantPoolGetClassAtIfLoaded"); |
1978 JVMWrapper("JVM_ConstantPoolGetClassAtIfLoaded"); |
1979 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
1979 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
1980 bounds_check(cp, index, CHECK_NULL); |
1980 bounds_check(cp, index, CHECK_NULL); |
1981 constantTag tag = cp->tag_at(index); |
1981 constantTag tag = cp->tag_at(index); |
1982 if (!tag.is_klass() && !tag.is_unresolved_klass()) { |
1982 if (!tag.is_klass() && !tag.is_unresolved_klass()) { |
1983 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
1983 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
1984 } |
1984 } |
2019 |
2019 |
2020 JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2020 JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2021 { |
2021 { |
2022 JVMWrapper("JVM_ConstantPoolGetMethodAt"); |
2022 JVMWrapper("JVM_ConstantPoolGetMethodAt"); |
2023 JvmtiVMObjectAllocEventCollector oam; |
2023 JvmtiVMObjectAllocEventCollector oam; |
2024 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2024 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2025 bounds_check(cp, index, CHECK_NULL); |
2025 bounds_check(cp, index, CHECK_NULL); |
2026 jobject res = get_method_at_helper(cp, index, true, CHECK_NULL); |
2026 jobject res = get_method_at_helper(cp, index, true, CHECK_NULL); |
2027 return res; |
2027 return res; |
2028 } |
2028 } |
2029 JVM_END |
2029 JVM_END |
2030 |
2030 |
2031 JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2031 JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2032 { |
2032 { |
2033 JVMWrapper("JVM_ConstantPoolGetMethodAtIfLoaded"); |
2033 JVMWrapper("JVM_ConstantPoolGetMethodAtIfLoaded"); |
2034 JvmtiVMObjectAllocEventCollector oam; |
2034 JvmtiVMObjectAllocEventCollector oam; |
2035 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2035 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2036 bounds_check(cp, index, CHECK_NULL); |
2036 bounds_check(cp, index, CHECK_NULL); |
2037 jobject res = get_method_at_helper(cp, index, false, CHECK_NULL); |
2037 jobject res = get_method_at_helper(cp, index, false, CHECK_NULL); |
2038 return res; |
2038 return res; |
2039 } |
2039 } |
2040 JVM_END |
2040 JVM_END |
2066 |
2066 |
2067 JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject obj, jobject unusedl, jint index)) |
2067 JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject obj, jobject unusedl, jint index)) |
2068 { |
2068 { |
2069 JVMWrapper("JVM_ConstantPoolGetFieldAt"); |
2069 JVMWrapper("JVM_ConstantPoolGetFieldAt"); |
2070 JvmtiVMObjectAllocEventCollector oam; |
2070 JvmtiVMObjectAllocEventCollector oam; |
2071 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2071 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2072 bounds_check(cp, index, CHECK_NULL); |
2072 bounds_check(cp, index, CHECK_NULL); |
2073 jobject res = get_field_at_helper(cp, index, true, CHECK_NULL); |
2073 jobject res = get_field_at_helper(cp, index, true, CHECK_NULL); |
2074 return res; |
2074 return res; |
2075 } |
2075 } |
2076 JVM_END |
2076 JVM_END |
2077 |
2077 |
2078 JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2078 JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2079 { |
2079 { |
2080 JVMWrapper("JVM_ConstantPoolGetFieldAtIfLoaded"); |
2080 JVMWrapper("JVM_ConstantPoolGetFieldAtIfLoaded"); |
2081 JvmtiVMObjectAllocEventCollector oam; |
2081 JvmtiVMObjectAllocEventCollector oam; |
2082 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2082 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2083 bounds_check(cp, index, CHECK_NULL); |
2083 bounds_check(cp, index, CHECK_NULL); |
2084 jobject res = get_field_at_helper(cp, index, false, CHECK_NULL); |
2084 jobject res = get_field_at_helper(cp, index, false, CHECK_NULL); |
2085 return res; |
2085 return res; |
2086 } |
2086 } |
2087 JVM_END |
2087 JVM_END |
2088 |
2088 |
2089 JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2089 JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2090 { |
2090 { |
2091 JVMWrapper("JVM_ConstantPoolGetMemberRefInfoAt"); |
2091 JVMWrapper("JVM_ConstantPoolGetMemberRefInfoAt"); |
2092 JvmtiVMObjectAllocEventCollector oam; |
2092 JvmtiVMObjectAllocEventCollector oam; |
2093 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2093 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2094 bounds_check(cp, index, CHECK_NULL); |
2094 bounds_check(cp, index, CHECK_NULL); |
2095 constantTag tag = cp->tag_at(index); |
2095 constantTag tag = cp->tag_at(index); |
2096 if (!tag.is_field_or_method()) { |
2096 if (!tag.is_field_or_method()) { |
2097 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2097 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2098 } |
2098 } |
2114 |
2114 |
2115 JVM_ENTRY(jint, JVM_ConstantPoolGetClassRefIndexAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2115 JVM_ENTRY(jint, JVM_ConstantPoolGetClassRefIndexAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2116 { |
2116 { |
2117 JVMWrapper("JVM_ConstantPoolGetClassRefIndexAt"); |
2117 JVMWrapper("JVM_ConstantPoolGetClassRefIndexAt"); |
2118 JvmtiVMObjectAllocEventCollector oam; |
2118 JvmtiVMObjectAllocEventCollector oam; |
2119 constantPoolHandle cp(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2119 constantPoolHandle cp(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2120 bounds_check(cp, index, CHECK_0); |
2120 bounds_check(cp, index, CHECK_0); |
2121 constantTag tag = cp->tag_at(index); |
2121 constantTag tag = cp->tag_at(index); |
2122 if (!tag.is_field_or_method()) { |
2122 if (!tag.is_field_or_method()) { |
2123 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2123 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2124 } |
2124 } |
2128 |
2128 |
2129 JVM_ENTRY(jint, JVM_ConstantPoolGetNameAndTypeRefIndexAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2129 JVM_ENTRY(jint, JVM_ConstantPoolGetNameAndTypeRefIndexAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2130 { |
2130 { |
2131 JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefIndexAt"); |
2131 JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefIndexAt"); |
2132 JvmtiVMObjectAllocEventCollector oam; |
2132 JvmtiVMObjectAllocEventCollector oam; |
2133 constantPoolHandle cp(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2133 constantPoolHandle cp(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2134 bounds_check(cp, index, CHECK_0); |
2134 bounds_check(cp, index, CHECK_0); |
2135 constantTag tag = cp->tag_at(index); |
2135 constantTag tag = cp->tag_at(index); |
2136 if (!tag.is_invoke_dynamic() && !tag.is_field_or_method()) { |
2136 if (!tag.is_invoke_dynamic() && !tag.is_field_or_method()) { |
2137 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2137 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2138 } |
2138 } |
2142 |
2142 |
2143 JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetNameAndTypeRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2143 JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetNameAndTypeRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2144 { |
2144 { |
2145 JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefInfoAt"); |
2145 JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefInfoAt"); |
2146 JvmtiVMObjectAllocEventCollector oam; |
2146 JvmtiVMObjectAllocEventCollector oam; |
2147 constantPoolHandle cp(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2147 constantPoolHandle cp(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2148 bounds_check(cp, index, CHECK_NULL); |
2148 bounds_check(cp, index, CHECK_NULL); |
2149 constantTag tag = cp->tag_at(index); |
2149 constantTag tag = cp->tag_at(index); |
2150 if (!tag.is_name_and_type()) { |
2150 if (!tag.is_name_and_type()) { |
2151 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2151 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2152 } |
2152 } |
2163 JVM_END |
2163 JVM_END |
2164 |
2164 |
2165 JVM_ENTRY(jint, JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2165 JVM_ENTRY(jint, JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2166 { |
2166 { |
2167 JVMWrapper("JVM_ConstantPoolGetIntAt"); |
2167 JVMWrapper("JVM_ConstantPoolGetIntAt"); |
2168 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2168 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2169 bounds_check(cp, index, CHECK_0); |
2169 bounds_check(cp, index, CHECK_0); |
2170 constantTag tag = cp->tag_at(index); |
2170 constantTag tag = cp->tag_at(index); |
2171 if (!tag.is_int()) { |
2171 if (!tag.is_int()) { |
2172 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2172 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2173 } |
2173 } |
2176 JVM_END |
2176 JVM_END |
2177 |
2177 |
2178 JVM_ENTRY(jlong, JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2178 JVM_ENTRY(jlong, JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2179 { |
2179 { |
2180 JVMWrapper("JVM_ConstantPoolGetLongAt"); |
2180 JVMWrapper("JVM_ConstantPoolGetLongAt"); |
2181 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2181 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2182 bounds_check(cp, index, CHECK_(0L)); |
2182 bounds_check(cp, index, CHECK_(0L)); |
2183 constantTag tag = cp->tag_at(index); |
2183 constantTag tag = cp->tag_at(index); |
2184 if (!tag.is_long()) { |
2184 if (!tag.is_long()) { |
2185 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2185 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2186 } |
2186 } |
2189 JVM_END |
2189 JVM_END |
2190 |
2190 |
2191 JVM_ENTRY(jfloat, JVM_ConstantPoolGetFloatAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2191 JVM_ENTRY(jfloat, JVM_ConstantPoolGetFloatAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2192 { |
2192 { |
2193 JVMWrapper("JVM_ConstantPoolGetFloatAt"); |
2193 JVMWrapper("JVM_ConstantPoolGetFloatAt"); |
2194 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2194 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2195 bounds_check(cp, index, CHECK_(0.0f)); |
2195 bounds_check(cp, index, CHECK_(0.0f)); |
2196 constantTag tag = cp->tag_at(index); |
2196 constantTag tag = cp->tag_at(index); |
2197 if (!tag.is_float()) { |
2197 if (!tag.is_float()) { |
2198 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2198 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2199 } |
2199 } |
2202 JVM_END |
2202 JVM_END |
2203 |
2203 |
2204 JVM_ENTRY(jdouble, JVM_ConstantPoolGetDoubleAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2204 JVM_ENTRY(jdouble, JVM_ConstantPoolGetDoubleAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2205 { |
2205 { |
2206 JVMWrapper("JVM_ConstantPoolGetDoubleAt"); |
2206 JVMWrapper("JVM_ConstantPoolGetDoubleAt"); |
2207 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2207 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2208 bounds_check(cp, index, CHECK_(0.0)); |
2208 bounds_check(cp, index, CHECK_(0.0)); |
2209 constantTag tag = cp->tag_at(index); |
2209 constantTag tag = cp->tag_at(index); |
2210 if (!tag.is_double()) { |
2210 if (!tag.is_double()) { |
2211 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2211 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2212 } |
2212 } |
2215 JVM_END |
2215 JVM_END |
2216 |
2216 |
2217 JVM_ENTRY(jstring, JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2217 JVM_ENTRY(jstring, JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2218 { |
2218 { |
2219 JVMWrapper("JVM_ConstantPoolGetStringAt"); |
2219 JVMWrapper("JVM_ConstantPoolGetStringAt"); |
2220 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2220 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2221 bounds_check(cp, index, CHECK_NULL); |
2221 bounds_check(cp, index, CHECK_NULL); |
2222 constantTag tag = cp->tag_at(index); |
2222 constantTag tag = cp->tag_at(index); |
2223 if (!tag.is_string()) { |
2223 if (!tag.is_string()) { |
2224 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2224 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2225 } |
2225 } |
2230 |
2230 |
2231 JVM_ENTRY(jstring, JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2231 JVM_ENTRY(jstring, JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2232 { |
2232 { |
2233 JVMWrapper("JVM_ConstantPoolGetUTF8At"); |
2233 JVMWrapper("JVM_ConstantPoolGetUTF8At"); |
2234 JvmtiVMObjectAllocEventCollector oam; |
2234 JvmtiVMObjectAllocEventCollector oam; |
2235 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2235 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); |
2236 bounds_check(cp, index, CHECK_NULL); |
2236 bounds_check(cp, index, CHECK_NULL); |
2237 constantTag tag = cp->tag_at(index); |
2237 constantTag tag = cp->tag_at(index); |
2238 if (!tag.is_symbol()) { |
2238 if (!tag.is_symbol()) { |
2239 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2239 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); |
2240 } |
2240 } |
2245 JVM_END |
2245 JVM_END |
2246 |
2246 |
2247 JVM_ENTRY(jbyte, JVM_ConstantPoolGetTagAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2247 JVM_ENTRY(jbyte, JVM_ConstantPoolGetTagAt(JNIEnv *env, jobject obj, jobject unused, jint index)) |
2248 { |
2248 { |
2249 JVMWrapper("JVM_ConstantPoolGetTagAt"); |
2249 JVMWrapper("JVM_ConstantPoolGetTagAt"); |
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); |
2251 bounds_check(cp, index, CHECK_0); |
2252 constantTag tag = cp->tag_at(index); |
2252 constantTag tag = cp->tag_at(index); |
2253 jbyte result = tag.value(); |
2253 jbyte result = tag.value(); |
2254 // If returned tag values are not from the JVM spec, e.g. tags from 100 to 105, |
2254 // If returned tag values are not from the JVM spec, e.g. tags from 100 to 105, |
2255 // they are changed to the corresponding tags from the JVM spec, so that java code in |
2255 // they are changed to the corresponding tags from the JVM spec, so that java code in |