mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
6655638: dynamic languages need method handles
Initial implementation, with known omissions (x86/64, sparc, compiler optim., c-oops, C++ interp.) Reviewed-by: kvn, twisti, never
This commit is contained in:
parent
318da3f68c
commit
ce0c084720
63 changed files with 5815 additions and 70 deletions
|
@ -320,6 +320,7 @@ class methodOopDesc : public oopDesc {
|
|||
enum VtableIndexFlag {
|
||||
// Valid vtable indexes are non-negative (>= 0).
|
||||
// These few negative values are used as sentinels.
|
||||
highest_unused_vtable_index_value = -5,
|
||||
invalid_vtable_index = -4, // distinct from any valid vtable index
|
||||
garbage_vtable_index = -3, // not yet linked; no vtable layout yet
|
||||
nonvirtual_vtable_index = -2 // there is no need for vtable dispatch
|
||||
|
@ -523,6 +524,18 @@ class methodOopDesc : public oopDesc {
|
|||
// Reflection support
|
||||
bool is_overridden_in(klassOop k) const;
|
||||
|
||||
// JSR 292 support
|
||||
bool is_method_handle_invoke() const { return access_flags().is_method_handle_invoke(); }
|
||||
static methodHandle make_invoke_method(KlassHandle holder,
|
||||
symbolHandle signature,
|
||||
Handle method_type,
|
||||
TRAPS);
|
||||
// these operate only on invoke methods:
|
||||
oop method_handle_type() const;
|
||||
static jint* method_type_offsets_chain(); // series of pointer-offsets, terminated by -1
|
||||
// presize interpreter frames for extra interpreter stack entries, if needed
|
||||
static int extra_stack_entries() { return EnableMethodHandles ? (int)MethodHandlePushLimit : 0; }
|
||||
static int extra_stack_words(); // = extra_stack_entries() * Interpreter::stackElementSize()
|
||||
// RedefineClasses() support:
|
||||
bool is_old() const { return access_flags().is_old(); }
|
||||
void set_is_old() { _access_flags.set_is_old(); }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue