src/share/vm/prims/jvm.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7017732_incremental Sdiff src/share/vm/prims

src/share/vm/prims/jvm.cpp

Print this page




1791 JVM_END
1792 
1793 
1794 static void bounds_check(constantPoolHandle cp, jint index, TRAPS) {
1795   if (!cp->is_within_bounds(index)) {
1796     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Constant pool index out of bounds");
1797   }
1798 }
1799 
1800 
1801 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject unused, jobject jcpool, jint index))
1802 {
1803   JVMWrapper("JVM_ConstantPoolGetClassAt");
1804   constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool)));
1805   bounds_check(cp, index, CHECK_NULL);
1806   constantTag tag = cp->tag_at(index);
1807   if (!tag.is_klass() && !tag.is_unresolved_klass()) {
1808     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
1809   }
1810   klassOop k = cp->klass_at(index, CHECK_NULL);
1811   return (jclass) JNIHandles::make_local(k->klass_part()->java_mirror());
1812 }
1813 JVM_END
1814 
1815 
1816 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index))
1817 {
1818   JVMWrapper("JVM_ConstantPoolGetClassAtIfLoaded");
1819   constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool)));
1820   bounds_check(cp, index, CHECK_NULL);
1821   constantTag tag = cp->tag_at(index);
1822   if (!tag.is_klass() && !tag.is_unresolved_klass()) {
1823     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
1824   }
1825   klassOop k = constantPoolOopDesc::klass_at_if_loaded(cp, index);
1826   if (k == NULL) return NULL;
1827   return (jclass) JNIHandles::make_local(k->klass_part()->java_mirror());
1828 }
1829 JVM_END
1830 
1831 static jobject get_method_at_helper(constantPoolHandle cp, jint index, bool force_resolution, TRAPS) {
1832   constantTag tag = cp->tag_at(index);
1833   if (!tag.is_method() && !tag.is_interface_method()) {
1834     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
1835   }
1836   int klass_ref  = cp->uncached_klass_ref_index_at(index);
1837   klassOop k_o;
1838   if (force_resolution) {
1839     k_o = cp->klass_at(klass_ref, CHECK_NULL);
1840   } else {
1841     k_o = constantPoolOopDesc::klass_at_if_loaded(cp, klass_ref);
1842     if (k_o == NULL) return NULL;
1843   }
1844   instanceKlassHandle k(THREAD, k_o);
1845   Symbol* name = cp->uncached_name_ref_at(index);
1846   Symbol* sig  = cp->uncached_signature_ref_at(index);
1847   methodHandle m (THREAD, k->find_method(name, sig));




1791 JVM_END
1792 
1793 
1794 static void bounds_check(constantPoolHandle cp, jint index, TRAPS) {
1795   if (!cp->is_within_bounds(index)) {
1796     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Constant pool index out of bounds");
1797   }
1798 }
1799 
1800 
1801 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject unused, jobject jcpool, jint index))
1802 {
1803   JVMWrapper("JVM_ConstantPoolGetClassAt");
1804   constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool)));
1805   bounds_check(cp, index, CHECK_NULL);
1806   constantTag tag = cp->tag_at(index);
1807   if (!tag.is_klass() && !tag.is_unresolved_klass()) {
1808     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
1809   }
1810   klassOop k = cp->klass_at(index, CHECK_NULL);
1811   return (jclass) JNIHandles::make_local(k->java_mirror());
1812 }
1813 JVM_END
1814 
1815 
1816 JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index))
1817 {
1818   JVMWrapper("JVM_ConstantPoolGetClassAtIfLoaded");
1819   constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool)));
1820   bounds_check(cp, index, CHECK_NULL);
1821   constantTag tag = cp->tag_at(index);
1822   if (!tag.is_klass() && !tag.is_unresolved_klass()) {
1823     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
1824   }
1825   klassOop k = constantPoolOopDesc::klass_at_if_loaded(cp, index);
1826   if (k == NULL) return NULL;
1827   return (jclass) JNIHandles::make_local(k->java_mirror());
1828 }
1829 JVM_END
1830 
1831 static jobject get_method_at_helper(constantPoolHandle cp, jint index, bool force_resolution, TRAPS) {
1832   constantTag tag = cp->tag_at(index);
1833   if (!tag.is_method() && !tag.is_interface_method()) {
1834     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
1835   }
1836   int klass_ref  = cp->uncached_klass_ref_index_at(index);
1837   klassOop k_o;
1838   if (force_resolution) {
1839     k_o = cp->klass_at(klass_ref, CHECK_NULL);
1840   } else {
1841     k_o = constantPoolOopDesc::klass_at_if_loaded(cp, klass_ref);
1842     if (k_o == NULL) return NULL;
1843   }
1844   instanceKlassHandle k(THREAD, k_o);
1845   Symbol* name = cp->uncached_name_ref_at(index);
1846   Symbol* sig  = cp->uncached_signature_ref_at(index);
1847   methodHandle m (THREAD, k->find_method(name, sig));


src/share/vm/prims/jvm.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File