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

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

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: P3
    • Resolution: Fixed
    • Affects Version/s: 8u112, 9
    • Fix Version/s: 9
    • Component/s: core-libs
    • Labels:
      None
    • Subcomponent:
    • Resolved In Build:
      b148
    • CPU:
      generic
    • OS:
      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

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

                  Dates

                  • Created:
                    Updated:
                    Resolved: