I am experiencing a problem with ClassCompiler with some of my scripts
using either rhino 1.6 or 1.7
js.jar manifests...

rhino 1.6 from 11/18/2006
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.5.0_06-b05 (Sun Microsystems Inc.)
Main-Class: org.mozilla.javascript.tools.shell.Main
Class-Path: xbean.jar

rhino 1.7 from 8/19/2007
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.5.0_07-b03 (Sun Microsystems Inc.)
Main-Class: org.mozilla.javascript.tools.shell.Main
Class-Path: xbean.jar

the following contrived code example exhibits the problem producing a
java.lang.VerifyError when a new instance is created.
verifyError.js

var o = new Object;
o.setX = function (id) {
   this.oid = id;
}
function setX(n) {
        if (n == "" || n == null)
                n = 0;

   var s = new Object;
   s.xyz = n;

        if(s != null) {
            o.setX(s.xyz);
        }
}
setX('x');

all compilations using jdk1.6...
> java -version
java version "1.6.0_01-ea"
Java(TM) SE Runtime Environment (build 1.6.0_01-ea-b03)
Java HotSpot(TM) Server VM (build 1.6.0_01-ea-b03, mixed mode)

> java org.mozilla.javascript.tools.jsc.Main -nosource -O 9 -version 160 
> verifyError.js
> java org.mozilla.javascript.tools.jsc.Main verifyError

Exception in thread "main" java.lang.VerifyError: (class: verifyError,
method: _c2 signature: (LverifyError;Lorg/mozilla/javascript/
Context;Lorg/mozilla/javascript/Scriptable;Lorg/mozilla/javascript/
Scriptable;Ljava/lang/Object;D[Ljava/lang/Object;)Ljava/lang/Object;)
Register 4 contains wrong type
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)


changing version to 120 or 140 has no effect...

> java org.mozilla.javascript.tools.jsc.Main -nosource -O 9 -version 140 
> verifyError.js
> java org.mozilla.javascript.tools.jsc.Main verifyError

Exception in thread "main" java.lang.VerifyError: (class: verifyError,
method: _c2 signature: (LverifyError;Lorg/mozilla/javascript/
Context;Lorg/mozilla/javascript/Scriptable;Lorg/mozilla/javascript/
Scriptable;Ljava/lang/Object;D[Ljava/lang/Object;)Ljava/lang/Object;)
Register 4 contains wrong type


changing optimization to 1 has no effect...

> java org.mozilla.javascript.tools.jsc.Main -nosource -O 1 -version 140 
> verifyError.js
> java org.mozilla.javascript.tools.jsc.Main verifyError

Exception in thread "main" java.lang.VerifyError: (class: verifyError,
method: _c2 signature: (LverifyError;Lorg/mozilla/javascript/
Context;Lorg/mozilla/javascript/Scriptable;Lorg/mozilla/javascript/
Scriptable;Ljava/lang/Object;D[Ljava/lang/Object;)Ljava/lang/Object;)
Register 4 contains wrong type

changing optimization to -1 or zero works...

> java org.mozilla.javascript.tools.jsc.Main -nosource -O 0 -version 140 
> verifyError.js
> java org.mozilla.javascript.tools.jsc.Main verifyError

no exception thrown.

oddly enough, certain minor code changes cure the problem.   e.g.

comment out...
/*
           if (n == "" || n == null)
                n = 0;
*/

or comment out...
//  o.setX(s.ID);

or change...
s.xyz = 1;

or...

change one of the function names so that they are different.

each of these trivial modifications cures the problem in all
compilation cases.
_______________________________________________
dev-tech-js-engine-rhino mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino

Reply via email to