On Jun 24, 2005, at 5:17 PM, Weldon Washburn wrote:
On 6/23/05, Geir Magnusson Jr. <[EMAIL PROTECTED]> wrote:
Where is code we can start examining? What do the the java-on-java
implementations do?
geir
Geir,
I can't talk about code just yet.
I know, but I'm going to taunt you anyway! Taunt!
Seriously, how about referring us to code in ORP at sourceforge?
But I think we can at least get
started on the basic, low controversy APIs. For example, the access
and property flags defined in the class file format are straight
forward boolean values. While the access/property flags may be
extended, it is unlikely that basic notions such as public/private
access would ever be removed. Below is a first stab at the API to
retrieve the values contained in internal classloader data structures.
Its understood that the JIT won't use all of the below APIs. For
example, some of the access properties issues are dealt with during
resolution and not by the jit. I used the java 1.5 version of Chapter
3 of the Java Virtual Machine Spec.
Comment/questions are appreciated.
Thanks
Weldon
Class access and property modifiers (table 4.1)
bool Class::is_public(); // ACC_PUBLIC
bool Class::is_final(); // ACC_FINAL
bool Class::is_super(); // ACC_SUPER
bool Class::is_interface(); // ACC_INTERFACE
bool Class::is_abstract(); // ACC_ABSTRACT
bool Class::is_synthetic(); // ACC_SYNTHETIC
bool Class::is_annotation(); // ACC_ANNOTATION
bool Class::is_enum(); // ACC_ENUM
Field access and property flags (table 4.4)
bool Field::is_public(); // ACC_PUBLIC
bool Field::is_private(); // ACC_PRIVATE
bool Field::is_protected(); // ACC_PROTECTED
bool Field::is_static(); // ACC_STATIC
bool Field::is_final(); // ACC_FINAL
bool Field::is_volatile(); // ACC_VOLATILE
bool Field::is_transient(); // ACC_TRANSIENT
bool Field::is_synthetic(); // ACC_SYNTHETIC
bool Field::is_enum(); // ACC_ENUM
Method access and property flags (table 4.5)
bool Method::is_public(); // ACC_PUBLIC
bool Method::is_private(); // ACC_PRIVATE
bool Method::is_protected(); // ACC_PROTECTED
bool Method::is_static(); // ACC_STATIC
bool Method::is_final(); // ACC_FINAL
bool Method::is_synchronized(); // ACC_SYNCHRONIZED
bool Method::is_bridge(); // ACC_BRIDGE
bool Method::is_varargs(); // ACC_VARARGS
bool Method::is_native(); // ACC_NATIVE
bool Method::is_abstract(); // ACC_ABSTRACT
bool Method::is_strict(); // ACC_STRICT
boot Method::is_synthetic(); // ACC_SYNTHETIC
That's pretty non-controversial :)
So this API is really for the classes Method, Field and Class, rather
than a bigger C API. Does this make it harder for other languages to
use or implement? (I have to admit it's going to take a few to start
thinking in C again...)
geir
--
Geir Magnusson Jr +1-203-665-6437
[EMAIL PROTECTED]