--- a/hotspot/src/share/vm/utilities/accessFlags.hpp Wed Apr 08 00:12:59 2009 -0700
+++ b/hotspot/src/share/vm/utilities/accessFlags.hpp Wed Apr 08 10:56:49 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -47,6 +47,8 @@
JVM_ACC_IS_OLD = 0x00010000, // RedefineClasses() has replaced this method
JVM_ACC_IS_OBSOLETE = 0x00020000, // RedefineClasses() has made method obsolete
JVM_ACC_IS_PREFIXED_NATIVE = 0x00040000, // JVMTI has prefixed this native method
+ JVM_MH_INVOKE_BITS // = 0x10001100 // MethodHandle.invoke quasi-native
+ = (JVM_ACC_NATIVE | JVM_ACC_SYNTHETIC | JVM_ACC_MONITOR_MATCH),
// klassOop flags
JVM_ACC_HAS_MIRANDA_METHODS = 0x10000000, // True if this class has miranda methods in it's vtable
@@ -72,6 +74,7 @@
// flags accepted by set_field_flags()
JVM_ACC_FIELD_FLAGS = 0x00008000 | JVM_ACC_WRITTEN_FLAGS
+
};
@@ -114,6 +117,15 @@
bool is_obsolete () const { return (_flags & JVM_ACC_IS_OBSOLETE ) != 0; }
bool is_prefixed_native () const { return (_flags & JVM_ACC_IS_PREFIXED_NATIVE ) != 0; }
+ // JSR 292: A method of the form MethodHandle.invoke(A...)R method is
+ // neither bytecoded nor a JNI native, but rather a fast call through
+ // a lightweight method handle object. Because it is not bytecoded,
+ // it has the native bit set, but the monitor-match bit is also set
+ // to distinguish it from a JNI native (which never has the match bit set).
+ // The synthetic bit is also present, because such a method is never
+ // explicitly defined in Java code.
+ bool is_method_handle_invoke () const { return (_flags & JVM_MH_INVOKE_BITS) == JVM_MH_INVOKE_BITS; }
+
// klassOop flags
bool has_miranda_methods () const { return (_flags & JVM_ACC_HAS_MIRANDA_METHODS ) != 0; }
bool has_vanilla_constructor () const { return (_flags & JVM_ACC_HAS_VANILLA_CONSTRUCTOR) != 0; }
@@ -199,6 +211,14 @@
jshort as_short() { return (jshort)_flags; }
jint as_int() { return _flags; }
+ inline friend AccessFlags accessFlags_from(jint flags);
+
// Printing/debugging
void print_on(outputStream* st) const PRODUCT_RETURN;
};
+
+inline AccessFlags accessFlags_from(jint flags) {
+ AccessFlags af;
+ af._flags = flags;
+ return af;
+}