2025 constantTag tag = cp->tag_at(index); 2026 if (!tag.is_field_or_method()) { 2027 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); 2028 } 2029 int klass_ref = cp->uncached_klass_ref_index_at(index); 2030 Symbol* klass_name = cp->klass_name_at(klass_ref); 2031 Symbol* member_name = cp->uncached_name_ref_at(index); 2032 Symbol* member_sig = cp->uncached_signature_ref_at(index); 2033 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::String_klass(), 3, CHECK_NULL); 2034 objArrayHandle dest(THREAD, dest_o); 2035 Handle str = java_lang_String::create_from_symbol(klass_name, CHECK_NULL); 2036 dest->obj_at_put(0, str()); 2037 str = java_lang_String::create_from_symbol(member_name, CHECK_NULL); 2038 dest->obj_at_put(1, str()); 2039 str = java_lang_String::create_from_symbol(member_sig, CHECK_NULL); 2040 dest->obj_at_put(2, str()); 2041 return (jobjectArray) JNIHandles::make_local(dest()); 2042 } 2043 JVM_END 2044 2045 JVM_ENTRY(jint, JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject obj, jobject unused, jint index)) 2046 { 2047 JVMWrapper("JVM_ConstantPoolGetIntAt"); 2048 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2049 bounds_check(cp, index, CHECK_0); 2050 constantTag tag = cp->tag_at(index); 2051 if (!tag.is_int()) { 2052 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); 2053 } 2054 return cp->int_at(index); 2055 } 2056 JVM_END 2057 2058 JVM_ENTRY(jlong, JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject obj, jobject unused, jint index)) 2059 { 2060 JVMWrapper("JVM_ConstantPoolGetLongAt"); 2061 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2062 bounds_check(cp, index, CHECK_(0L)); 2063 constantTag tag = cp->tag_at(index); 2064 if (!tag.is_long()) { 2107 return (jstring) JNIHandles::make_local(str); 2108 } 2109 JVM_END 2110 2111 JVM_ENTRY(jstring, JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject obj, jobject unused, jint index)) 2112 { 2113 JVMWrapper("JVM_ConstantPoolGetUTF8At"); 2114 JvmtiVMObjectAllocEventCollector oam; 2115 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2116 bounds_check(cp, index, CHECK_NULL); 2117 constantTag tag = cp->tag_at(index); 2118 if (!tag.is_symbol()) { 2119 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); 2120 } 2121 Symbol* sym = cp->symbol_at(index); 2122 Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL); 2123 return (jstring) JNIHandles::make_local(str()); 2124 } 2125 JVM_END 2126 2127 2128 // Assertion support. ////////////////////////////////////////////////////////// 2129 2130 JVM_ENTRY(jboolean, JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls)) 2131 JVMWrapper("JVM_DesiredAssertionStatus"); 2132 assert(cls != NULL, "bad class"); 2133 2134 oop r = JNIHandles::resolve(cls); 2135 assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed"); 2136 if (java_lang_Class::is_primitive(r)) return false; 2137 2138 Klass* k = java_lang_Class::as_Klass(r); 2139 assert(k->oop_is_instance(), "must be an instance klass"); 2140 if (! k->oop_is_instance()) return false; 2141 2142 ResourceMark rm(THREAD); 2143 const char* name = k->name()->as_C_string(); 2144 bool system_class = k->class_loader() == NULL; 2145 return JavaAssertions::enabled(name, system_class); 2146 | 2025 constantTag tag = cp->tag_at(index); 2026 if (!tag.is_field_or_method()) { 2027 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); 2028 } 2029 int klass_ref = cp->uncached_klass_ref_index_at(index); 2030 Symbol* klass_name = cp->klass_name_at(klass_ref); 2031 Symbol* member_name = cp->uncached_name_ref_at(index); 2032 Symbol* member_sig = cp->uncached_signature_ref_at(index); 2033 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::String_klass(), 3, CHECK_NULL); 2034 objArrayHandle dest(THREAD, dest_o); 2035 Handle str = java_lang_String::create_from_symbol(klass_name, CHECK_NULL); 2036 dest->obj_at_put(0, str()); 2037 str = java_lang_String::create_from_symbol(member_name, CHECK_NULL); 2038 dest->obj_at_put(1, str()); 2039 str = java_lang_String::create_from_symbol(member_sig, CHECK_NULL); 2040 dest->obj_at_put(2, str()); 2041 return (jobjectArray) JNIHandles::make_local(dest()); 2042 } 2043 JVM_END 2044 2045 JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetNameAndTypeRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index)) 2046 { 2047 JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefInfoAt"); 2048 JvmtiVMObjectAllocEventCollector oam; 2049 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2050 bounds_check(cp, index, CHECK_NULL); 2051 constantTag tag = cp->tag_at(index); 2052 if (!tag.is_name_and_type()) { 2053 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); 2054 } 2055 Symbol* member_name = cp->symbol_at(cp->name_ref_index_at(index)); 2056 Symbol* member_sig = cp->symbol_at(cp->signature_ref_index_at(index)); 2057 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::String_klass(), 2, CHECK_NULL); 2058 objArrayHandle dest(THREAD, dest_o); 2059 Handle str = java_lang_String::create_from_symbol(member_name, CHECK_NULL); 2060 dest->obj_at_put(0, str()); 2061 str = java_lang_String::create_from_symbol(member_sig, CHECK_NULL); 2062 dest->obj_at_put(1, str()); 2063 return (jobjectArray) JNIHandles::make_local(dest()); 2064 } 2065 JVM_END 2066 2067 JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetInvokedynamicRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index)) 2068 { 2069 JVMWrapper("JVM_ConstantPoolGetInvokedynamicRefInfoAt"); 2070 JvmtiVMObjectAllocEventCollector oam; 2071 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2072 bounds_check(cp, index, CHECK_NULL); 2073 constantTag tag = cp->tag_at(index); 2074 if (!tag.is_invoke_dynamic()) { 2075 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); 2076 } 2077 Symbol* member_name = cp->uncached_name_ref_at(index); 2078 Symbol* member_sig = cp->uncached_signature_ref_at(index); 2079 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::String_klass(), 2, CHECK_NULL); 2080 objArrayHandle dest(THREAD, dest_o); 2081 Handle str = java_lang_String::create_from_symbol(member_name, CHECK_NULL); 2082 dest->obj_at_put(0, str()); 2083 str = java_lang_String::create_from_symbol(member_sig, CHECK_NULL); 2084 dest->obj_at_put(1, str()); 2085 return (jobjectArray) JNIHandles::make_local(dest()); 2086 } 2087 JVM_END 2088 2089 JVM_ENTRY(jint, JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject obj, jobject unused, jint index)) 2090 { 2091 JVMWrapper("JVM_ConstantPoolGetIntAt"); 2092 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2093 bounds_check(cp, index, CHECK_0); 2094 constantTag tag = cp->tag_at(index); 2095 if (!tag.is_int()) { 2096 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); 2097 } 2098 return cp->int_at(index); 2099 } 2100 JVM_END 2101 2102 JVM_ENTRY(jlong, JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject obj, jobject unused, jint index)) 2103 { 2104 JVMWrapper("JVM_ConstantPoolGetLongAt"); 2105 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2106 bounds_check(cp, index, CHECK_(0L)); 2107 constantTag tag = cp->tag_at(index); 2108 if (!tag.is_long()) { 2151 return (jstring) JNIHandles::make_local(str); 2152 } 2153 JVM_END 2154 2155 JVM_ENTRY(jstring, JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject obj, jobject unused, jint index)) 2156 { 2157 JVMWrapper("JVM_ConstantPoolGetUTF8At"); 2158 JvmtiVMObjectAllocEventCollector oam; 2159 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2160 bounds_check(cp, index, CHECK_NULL); 2161 constantTag tag = cp->tag_at(index); 2162 if (!tag.is_symbol()) { 2163 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); 2164 } 2165 Symbol* sym = cp->symbol_at(index); 2166 Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL); 2167 return (jstring) JNIHandles::make_local(str()); 2168 } 2169 JVM_END 2170 2171 JVM_ENTRY(jbyte, JVM_ConstantPoolGetTagAt(JNIEnv *env, jobject obj, jobject unused, jint index)) 2172 { 2173 JVMWrapper("JVM_ConstantPoolGetTagAt"); 2174 constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2175 bounds_check(cp, index, CHECK_0); 2176 constantTag tag = cp->tag_at(index); 2177 return tag.value(); 2178 } 2179 JVM_END 2180 2181 // Assertion support. ////////////////////////////////////////////////////////// 2182 2183 JVM_ENTRY(jboolean, JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls)) 2184 JVMWrapper("JVM_DesiredAssertionStatus"); 2185 assert(cls != NULL, "bad class"); 2186 2187 oop r = JNIHandles::resolve(cls); 2188 assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed"); 2189 if (java_lang_Class::is_primitive(r)) return false; 2190 2191 Klass* k = java_lang_Class::as_Klass(r); 2192 assert(k->oop_is_instance(), "must be an instance klass"); 2193 if (! k->oop_is_instance()) return false; 2194 2195 ResourceMark rm(THREAD); 2196 const char* name = k->name()->as_C_string(); 2197 bool system_class = k->class_loader() == NULL; 2198 return JavaAssertions::enabled(name, system_class); 2199 |