This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PR 13948 and Miranda Methods


Hi,

    I was trying my bit to track down the cause
of PR 13948 this weekend and I am a bit confused
by some things. It'll be really nice if someone
can throw some light on these.

The basic support was added by Tom:

  http://gcc.gnu.org/ml/java-patches/2003-q3/msg00357.html

which Andrew extended to cover interfaces:

  http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14231#c6

and Bryce enhanced to use proper order of methods:

  http://gcc.gnu.org/ml/java-patches/2003-q3/msg00648.html

Here are my questions:

  1. In line 2057 of class.c (add_miranda_methods), why do
     we start searching from index 1 and not 0? Once again,
     my Java language skills are abyssmal so I can only
     hazard a guess that interfaces have java.lang.Object
     as their superclass - is it so? It seems to be
     reinforced by what I actually see when inside a debugger
     and by:

       http://gcc.gnu.org/ml/gcc-patches/1999-12/msg00539.html

     Is that why we ignore index 0?

     In general, do we always store the superclass type at
     index 0 of a basetypes vector for the Java front end?

  2. Miranda methods are needed to work with older buggy VMs
     that need an implicit method declaration in an abstract
     class for a method from an implemented interface (right?).

     AFAICT, Andrew's patch above was needed because GCJ treats
     interfaces like abstract classes - but shouldn't it
     create problems with other JVMs that don't?

  3. Bryce's patch enforces method order by calling
     layout_class_methods() for superinterfaces from
     within add_miranda_methods().

     However, layout_class_methods() calls add_miranda_methods()
     anyways - so isn't the call on line 2097 made redundant by his
     patch?

  4. Line 2076 says:

       /* An interface can have <clinit>.  */

     How? A naive attempt to write one fails as I had thought.
     So what gives?

Sorry if these appear extremely "Duh!", but do try to
answer all the same.

Thanks,
Ranjit.

-- 
Ranjit Mathew          Email: rmathew AT gmail DOT com

Bangalore, INDIA.      Web: http://ranjitmathew.tripod.com/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]