353 // setting of locals to the same java thread. This lock is needed |
353 // setting of locals to the same java thread. This lock is needed |
354 // to prevent compiledVFrames from trying to add deferred updates |
354 // to prevent compiledVFrames from trying to add deferred updates |
355 // to the thread simultaneously. |
355 // to the thread simultaneously. |
356 // |
356 // |
357 class VM_GetOrSetLocal : public VM_Operation { |
357 class VM_GetOrSetLocal : public VM_Operation { |
358 private: |
358 protected: |
359 JavaThread* _thread; |
359 JavaThread* _thread; |
360 JavaThread* _calling_thread; |
360 JavaThread* _calling_thread; |
361 jint _depth; |
361 jint _depth; |
362 jint _index; |
362 jint _index; |
363 BasicType _type; |
363 BasicType _type; |
364 jvalue _value; |
364 jvalue _value; |
365 javaVFrame* _jvf; |
365 javaVFrame* _jvf; |
366 bool _set; |
366 bool _set; |
367 |
367 |
|
368 // It is possible to get the receiver out of a non-static native wrapper |
|
369 // frame. Use VM_GetReceiver to do this. |
|
370 virtual bool getting_receiver() const { return false; } |
|
371 |
368 jvmtiError _result; |
372 jvmtiError _result; |
369 |
373 |
370 vframe* get_vframe(); |
374 vframe* get_vframe(); |
371 javaVFrame* get_java_vframe(); |
375 javaVFrame* get_java_vframe(); |
372 bool check_slot_type(javaVFrame* vf); |
376 bool check_slot_type(javaVFrame* vf); |
393 |
397 |
394 // Check that the klass is assignable to a type with the given signature. |
398 // Check that the klass is assignable to a type with the given signature. |
395 static bool is_assignable(const char* ty_sign, Klass* klass, Thread* thread); |
399 static bool is_assignable(const char* ty_sign, Klass* klass, Thread* thread); |
396 }; |
400 }; |
397 |
401 |
|
402 class VM_GetReceiver : public VM_GetOrSetLocal { |
|
403 protected: |
|
404 virtual bool getting_receiver() const { return true; } |
|
405 |
|
406 public: |
|
407 VM_GetReceiver(JavaThread* thread, JavaThread* calling_thread, jint depth); |
|
408 const char* name() const { return "get receiver"; } |
|
409 }; |
|
410 |
398 |
411 |
399 /////////////////////////////////////////////////////////////// |
412 /////////////////////////////////////////////////////////////// |
400 // |
413 // |
401 // class JvmtiSuspendControl |
414 // class JvmtiSuspendControl |
402 // |
415 // |