Thanks for reporting this issue. Filed a bug: https://bugs.openjdk.java.net/browse/JDK-8170565

Thanks,
-Sundar

On 01/12/16, 12:36 AM, Art Fiedler wrote:
@Sundararajan

When calling the following code, I expected the call to myJSObject inside
testJSOCall to pass the current
scope as a ScriptObjectMirror to JSObjectImpl's call method as the thiz
argument. In this case without
modifying the call to myJSObject() should 'this' automatically be passed to
the call() method?

Thanks,
Arthur Fiedler

public class NashornBugTest
{
     public static void main(String[] args) throws Exception {
         NashornScriptEngineFactory factory = new
NashornScriptEngineFactory();
         ScriptEngine scriptEngine = factory.getScriptEngine();
         scriptEngine.put("myJSObject", new JSObjectImpl());
         scriptEngine.eval(
             "var a = 42;\n" +
             "function testJSOCall(b) {\n" +
             "    myJSObject('text purposely did not pass b');\n" +
             "}\n" +
             "testJSOCall(a);\n");
     }
     public static class JSObjectImpl extends AbstractJSObject
     {
         @Override
         public Object call(Object thiz, Object... args)
         {
             if (ScriptObjectMirror.isUndefined(thiz) || thiz == null)
                 throw new IllegalArgumentException("'thiz' is
undefined/null");
             // TODO: need the value of 'b' in the calling function
             return super.call(thiz, args);
         }
         @Override
         public boolean isFunction()
         {
             return true;
         }
     }
}

Reply via email to