Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8170565

JSObject call() is passed undefined for the argument 'thiz'

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P3
    • 9
    • 8u112, 9
    • core-libs
    • None
    • b148
    • generic
    • generic

    Backports

      Description

        This issue was reported by Art Fiedler via nashorn-dev openjdk alias:

        http://mail.openjdk.java.net/pipermail/nashorn-dev/2016-November/006662.html

        email content cut-pasted here for convenience:

        --- email from Art Fiedler ----

        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;
                }
            }
        }

        Attachments

          Issue Links

            Activity

              People

                sundar Sundararajan Athijegannathan
                sundar Sundararajan Athijegannathan
                Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved: