< prev index next >

src/share/vm/prims/jvm.cpp

Print this page




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 


< prev index next >