[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: note: JasminClass change



Let's fix jasmin to make super optional.

pat

On Mon, 26 Apr 2004, Chris Pickett wrote:

> Hi Pat,
>
> Actually, it still doesn't work -- I guess we just didn't test it
> properly.  If I do:
>
> $ echo HelloWorld java.lang.Object | xargs transform-full
>
> eventually I get:
>
> java.lang.Object.jasmin:3: Warning - Syntax error.
> .method
>          ^
> java.lang.Object.jasmin:3: Error - Couldn't repair and continue parse.
> .method
>          ^
> ./sootOutput-full/java.lang.Object.jasmin: Found 2 errors
>
> I tried adding an else clause after your changes like so:
>
> if(sootClass.hasSuperclass())
>      emit(".super " + slashify(sootClass.getSuperclass().getName()));
> else
>    emit(".super");
>
> but that didn't work either.  If you look at the jasmin grammar in
> jasmin-sable-1.2/src/jasmin/parser.cup, you'll see at line 126:
>
> /* The grammar */
>
> jas_file ::=
>          source_spec
>          class_spec
>          super_spec
>          implements
>          class_attrs
>          fields
>          methods
>      ;
>
> and at line 205:
>
> // ---- Superclass specification
>
> super_spec ::=
>      DSUPER classname:name SEP
>          {:
>              classFile.setSuperClass(name);
>          :}
>    ;
>
> I think the grammar forces you to specify a superclass.  I don't really
> know how much effort is required to fix jasmin;  the best way seems to
> be to change the grammar so that a solitary '.super' means set a
> super_class field of 0 (or you could try and use some invalid
> classname).  I couldn't see any trivial solution from the handful of
> files in jas and jasmin that I looked at.  There's some binary code  at
> the beginning of parser.java which looks like it would need to change if
> you changed the grammar.
>
> A simpler solution might be to repass any written java.lang.Object
> classfiles back through Coffi and have it change the super_class field;
>   that's what I'm doing by hand for now anyway.
>
> Cheers,
> Chris
>
> Note to others:  we also found that the [Ljava.lang.Object problem has
> gone away in the Soot trunk.
>
> Patrick LAM wrote:
> > Hi all,
> >
> > I thought I'd get this archived:
> >
> > Chris Pickett asked soot-list a question a long time ago about Soot's
> > generation of java.lang.Object classes (e.g. when transforming CLASSPATH).
> > I looked into it today and noticed that JasminClass always generates a
> > .super java/lang/Object declaration even if the superclass field is not
> > set.  I changed this so that it wouldn't generate a .super declaration
> > anymore.  I have a vague fear that there was a reason the .super
> > declaration was there, but not enough to avoid making this change.  But
> > in case it breaks anything, you can talk to me about it.
> >
> > pat
> >
> > ---------- Forwarded message ----------
> > Date: Wed, 21 Apr 2004 17:44:42 -0400 (EDT)
> > From: plam-sable.svn <owner-soot-repos-commits@sable.mcgill.ca>
> > To: soot-repos-commits@sable.mcgill.ca
> > Subject: r1430: in soot/trunk/src/soot: baf jimple
> >
> > Author: plam
> > Date: 2004-04-21 17:44:38 -0400 (Wed, 21 Apr 2004)
> > New Revision: 1430
> >
> > Log:
> > 1. replace SootClass parameter with sootClass parameter (bad naming!)
> > 2. do not emit .super java/lang/Object for java.lang.Object class
> >      in jasmin output
> >
> >
> > Modified:
> >    soot/trunk/src/soot/baf/JasminClass.java
> >    soot/trunk/src/soot/jimple/JasminClass.java
> >
>