Mercurial > hg > truffle
comparison src/share/vm/prims/jni.cpp @ 12269:da051ce490eb
Merge
author | adlertz |
---|---|
date | Thu, 19 Sep 2013 18:01:39 +0200 |
parents | 06ae47d9d088 b2e698d2276c |
children | a19bea467577 |
comparison
equal
deleted
inserted
replaced
12253:179cd89fb279 | 12269:da051ce490eb |
---|---|
1334 // non-interface call -- for that little speed boost, don't handlize | 1334 // non-interface call -- for that little speed boost, don't handlize |
1335 debug_only(No_Safepoint_Verifier nosafepoint;) | 1335 debug_only(No_Safepoint_Verifier nosafepoint;) |
1336 if (call_type == JNI_VIRTUAL) { | 1336 if (call_type == JNI_VIRTUAL) { |
1337 // jni_GetMethodID makes sure class is linked and initialized | 1337 // jni_GetMethodID makes sure class is linked and initialized |
1338 // so m should have a valid vtable index. | 1338 // so m should have a valid vtable index. |
1339 assert(!m->has_itable_index(), ""); | |
1339 int vtbl_index = m->vtable_index(); | 1340 int vtbl_index = m->vtable_index(); |
1340 if (vtbl_index != Method::nonvirtual_vtable_index) { | 1341 if (vtbl_index != Method::nonvirtual_vtable_index) { |
1341 Klass* k = h_recv->klass(); | 1342 Klass* k = h_recv->klass(); |
1342 // k might be an arrayKlassOop but all vtables start at | 1343 // k might be an arrayKlassOop but all vtables start at |
1343 // the same place. The cast is to avoid virtual call and assertion. | 1344 // the same place. The cast is to avoid virtual call and assertion. |
1353 } | 1354 } |
1354 } else { | 1355 } else { |
1355 // interface call | 1356 // interface call |
1356 KlassHandle h_holder(THREAD, holder); | 1357 KlassHandle h_holder(THREAD, holder); |
1357 | 1358 |
1358 int itbl_index = m->cached_itable_index(); | 1359 int itbl_index = m->itable_index(); |
1359 if (itbl_index == -1) { | |
1360 itbl_index = klassItable::compute_itable_index(m); | |
1361 m->set_cached_itable_index(itbl_index); | |
1362 // the above may have grabbed a lock, 'm' and anything non-handlized can't be used again | |
1363 } | |
1364 Klass* k = h_recv->klass(); | 1360 Klass* k = h_recv->klass(); |
1365 selected_method = InstanceKlass::cast(k)->method_at_itable(h_holder(), itbl_index, CHECK); | 1361 selected_method = InstanceKlass::cast(k)->method_at_itable(h_holder(), itbl_index, CHECK); |
1366 } | 1362 } |
1367 } | 1363 } |
1368 | 1364 |