2315
2316
2317 // Return a new AssertionStatusDirectives object with the fields filled in with
2318 // command-line assertion arguments (i.e., -ea, -da).
2319 JVM_ENTRY(jobject, JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused))
2320 JVMWrapper("JVM_AssertionStatusDirectives");
2321 JvmtiVMObjectAllocEventCollector oam;
2322 oop asd = JavaAssertions::createAssertionStatusDirectives(CHECK_NULL);
2323 return JNIHandles::make_local(env, asd);
2324 JVM_END
2325
2326 // Arrays support /////////////////////////////////////////////////////////////
2327
2328 JVM_ENTRY(jboolean, JVM_ArrayIsAccessAtomic(JNIEnv *env, jclass unused, jobject array))
2329 JVMWrapper("JVM_ArrayIsAccessAtomic");
2330 oop o = JNIHandles::resolve(array);
2331 Klass* k = o->klass();
2332 if ((o == NULL) || (!k->is_array_klass())) {
2333 THROW_0(vmSymbols::java_lang_IllegalArgumentException());
2334 }
2335 if (k->is_valueArray_klass()) {
2336 return ValueArrayKlass::cast(k)->is_atomic();
2337 }
2338 return true;
2339 JVM_END
2340
2341 JVM_ENTRY(jobject, JVM_ArrayEnsureAccessAtomic(JNIEnv *env, jclass unused, jobject array))
2342 JVMWrapper("JVM_ArrayEnsureAccessAtomic");
2343 oop o = JNIHandles::resolve(array);
2344 Klass* k = o->klass();
2345 if ((o == NULL) || (!k->is_array_klass())) {
2346 THROW_0(vmSymbols::java_lang_IllegalArgumentException());
2347 }
2348 if (k->is_valueArray_klass()) {
2349 ValueArrayKlass* vk = ValueArrayKlass::cast(k);
2350 if (!vk->is_atomic()) {
2351 /**
2352 * Need to decide how to implement:
2353 *
2354 * 1) Change to objArrayOop layout, therefore oop->klass() differs so
2355 * then "<atomic>[Qfoo;" klass needs to subclass "[Qfoo;" to pass through
2356 * "checkcast" & "instanceof"
2357 *
2358 * 2) Use extra header in the valueArrayOop to flag atomicity required and
2359 * possibly per instance lock structure. Said info, could be placed in
2360 * "trailer" rather than disturb the current arrayOop
2361 */
2362 Unimplemented();
2363 }
2364 }
2365 return array;
2366 JVM_END
2367
2368 // Verification ////////////////////////////////////////////////////////////////////////////////
2369
2370 // Reflection for the verifier /////////////////////////////////////////////////////////////////
|
2315
2316
2317 // Return a new AssertionStatusDirectives object with the fields filled in with
2318 // command-line assertion arguments (i.e., -ea, -da).
2319 JVM_ENTRY(jobject, JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused))
2320 JVMWrapper("JVM_AssertionStatusDirectives");
2321 JvmtiVMObjectAllocEventCollector oam;
2322 oop asd = JavaAssertions::createAssertionStatusDirectives(CHECK_NULL);
2323 return JNIHandles::make_local(env, asd);
2324 JVM_END
2325
2326 // Arrays support /////////////////////////////////////////////////////////////
2327
2328 JVM_ENTRY(jboolean, JVM_ArrayIsAccessAtomic(JNIEnv *env, jclass unused, jobject array))
2329 JVMWrapper("JVM_ArrayIsAccessAtomic");
2330 oop o = JNIHandles::resolve(array);
2331 Klass* k = o->klass();
2332 if ((o == NULL) || (!k->is_array_klass())) {
2333 THROW_0(vmSymbols::java_lang_IllegalArgumentException());
2334 }
2335 return ArrayKlass::cast(k)->element_access_is_atomic();
2336 JVM_END
2337
2338 JVM_ENTRY(jobject, JVM_ArrayEnsureAccessAtomic(JNIEnv *env, jclass unused, jobject array))
2339 JVMWrapper("JVM_ArrayEnsureAccessAtomic");
2340 oop o = JNIHandles::resolve(array);
2341 Klass* k = o->klass();
2342 if ((o == NULL) || (!k->is_array_klass())) {
2343 THROW_0(vmSymbols::java_lang_IllegalArgumentException());
2344 }
2345 if (k->is_valueArray_klass()) {
2346 ValueArrayKlass* vk = ValueArrayKlass::cast(k);
2347 if (!vk->element_access_is_atomic()) {
2348 /**
2349 * Need to decide how to implement:
2350 *
2351 * 1) Change to objArrayOop layout, therefore oop->klass() differs so
2352 * then "<atomic>[Qfoo;" klass needs to subclass "[Qfoo;" to pass through
2353 * "checkcast" & "instanceof"
2354 *
2355 * 2) Use extra header in the valueArrayOop to flag atomicity required and
2356 * possibly per instance lock structure. Said info, could be placed in
2357 * "trailer" rather than disturb the current arrayOop
2358 */
2359 Unimplemented();
2360 }
2361 }
2362 return array;
2363 JVM_END
2364
2365 // Verification ////////////////////////////////////////////////////////////////////////////////
2366
2367 // Reflection for the verifier /////////////////////////////////////////////////////////////////
|