2214 return (jstring) JNIHandles::make_local(str()); 2215 } 2216 JVM_END 2217 2218 JVM_ENTRY(jbyte, JVM_ConstantPoolGetTagAt(JNIEnv *env, jobject obj, jobject unused, jint index)) 2219 { 2220 JVMWrapper("JVM_ConstantPoolGetTagAt"); 2221 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2222 bounds_check(cp, index, CHECK_0); 2223 constantTag tag = cp->tag_at(index); 2224 jbyte result = tag.value(); 2225 // If returned tag values are not from the JVM spec, e.g. tags from 100 to 105, 2226 // they are changed to the corresponding tags from the JVM spec, so that java code in 2227 // sun.reflect.ConstantPool will return only tags from the JVM spec, not internal ones. 2228 if (tag.is_klass_or_reference()) { 2229 result = JVM_CONSTANT_Class; 2230 } else if (tag.is_string_index()) { 2231 result = JVM_CONSTANT_String; 2232 } else if (tag.is_method_type_in_error()) { 2233 result = JVM_CONSTANT_MethodType; 2234 } else if (tag.is_method_handle_in_error()) { 2235 result = JVM_CONSTANT_MethodHandle; 2236 } 2237 return result; 2238 } 2239 JVM_END 2240 2241 // Assertion support. ////////////////////////////////////////////////////////// 2242 2243 JVM_ENTRY(jboolean, JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls)) 2244 JVMWrapper("JVM_DesiredAssertionStatus"); 2245 assert(cls != NULL, "bad class"); 2246 2247 oop r = JNIHandles::resolve(cls); 2248 assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed"); 2249 if (java_lang_Class::is_primitive(r)) return false; 2250 2251 Klass* k = java_lang_Class::as_Klass(r); 2252 assert(k->is_instance_klass(), "must be an instance klass"); 2253 if (!k->is_instance_klass()) return false; | 2214 return (jstring) JNIHandles::make_local(str()); 2215 } 2216 JVM_END 2217 2218 JVM_ENTRY(jbyte, JVM_ConstantPoolGetTagAt(JNIEnv *env, jobject obj, jobject unused, jint index)) 2219 { 2220 JVMWrapper("JVM_ConstantPoolGetTagAt"); 2221 constantPoolHandle cp = constantPoolHandle(THREAD, reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); 2222 bounds_check(cp, index, CHECK_0); 2223 constantTag tag = cp->tag_at(index); 2224 jbyte result = tag.value(); 2225 // If returned tag values are not from the JVM spec, e.g. tags from 100 to 105, 2226 // they are changed to the corresponding tags from the JVM spec, so that java code in 2227 // sun.reflect.ConstantPool will return only tags from the JVM spec, not internal ones. 2228 if (tag.is_klass_or_reference()) { 2229 result = JVM_CONSTANT_Class; 2230 } else if (tag.is_string_index()) { 2231 result = JVM_CONSTANT_String; 2232 } else if (tag.is_method_type_in_error()) { 2233 result = JVM_CONSTANT_MethodType; 2234 } else if (tag.is_invoke_dynamic_in_error()) { 2235 result = JVM_CONSTANT_InvokeDynamic; 2236 } else if (tag.is_method_handle_in_error()) { 2237 result = JVM_CONSTANT_MethodHandle; 2238 } 2239 return result; 2240 } 2241 JVM_END 2242 2243 // Assertion support. ////////////////////////////////////////////////////////// 2244 2245 JVM_ENTRY(jboolean, JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls)) 2246 JVMWrapper("JVM_DesiredAssertionStatus"); 2247 assert(cls != NULL, "bad class"); 2248 2249 oop r = JNIHandles::resolve(cls); 2250 assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed"); 2251 if (java_lang_Class::is_primitive(r)) return false; 2252 2253 Klass* k = java_lang_Class::as_Klass(r); 2254 assert(k->is_instance_klass(), "must be an instance klass"); 2255 if (!k->is_instance_klass()) return false; |