In the following code, I generate a new context, new scope, and evaluate
some script, which results in Something Bad:

  public boolean createContext( boolean bAllowJavaImports, boolean
bDynamicScope ) // false and false
  {
      m_context = Context.enter();
      m_context.setErrorReporter( new ErrorHandler() );

      resetScope( bAllowJavaImports /*false*/); // m_scope =
m_context.initStandardObjects( null );

      m_context.setLanguageVersion( Context.VERSION_1_2 );
      m_context.setGeneratingDebug( true ); // true or false, same results

      DEBUG_STUFF();
    }
    return hasContext() && m_scope != null;
  }

  String testScript = "var foo;  var msg = (null == foo);  throw new Error(
msg, msg )";

  private void DEBUG_STUFF() {
    // evaluate() will catch and log the exception for us.
    evaluate( testScript, "test script", 1 );
  }

   public boolean evaluate( java.io.Reader in, java.lang.String name, int
lineno ) throws IOException
  {
    boolean ret = false;
    try {
      m_result = m_context.evaluateReader( m_scope, in, name, lineno, null
);
      ret = true;
    } catch (JavaScriptException e) {
      /* blah */
    } catch (EcmaError e) {
      /* blah */
    }
    return ret;
  }

The above code results in the following exception log ("false" is the
important part):

com.cardiff.js.EcmaException: Error: false (test script#1)
    at com.cardiff.js.ErrorHandler.error(ErrorHandler.java:52)
    at org.mozilla.javascript.Context.reportError(Context.java:897)
    at com.cardiff.js.Interpreter.evaluate(Interpreter.java:354)
    at com.cardiff.js.Interpreter.evaluate(Interpreter.java:378)
    at com.cardiff.js.Interpreter.DEBUG_STUFF(Interpreter.java:97)
    at com.cardiff.js.Interpreter.createContext(Interpreter.java:88)
...

This is under JRE 1.6.0_17

What the heck is going on here?

Eureka!

It turns out that setLanguageVersion() was the culprit, though there may be
some interaction with the new embedded JS engine from sun.
setlanguageVersion(Context.VERSION_1_5) remedied the problem.

Using an older JVM with Conext.VERSION_1_2 also fixed null != undefined.
Not Good.

-- 
--Mark Storer
Professional Geek
_______________________________________________
dev-tech-js-engine-rhino mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino

Reply via email to