8016453: loadWithNewGlobal does not allow apply operation
authorjlaskey
Wed, 12 Jun 2013 11:22:06 -0300
changeset 18326 512bdf9535a6
parent 18325 35288b76c9ff
child 18327 782bebd1b300
8016453: loadWithNewGlobal does not allow apply operation Reviewed-by: hannesw, sundar Contributed-by: james.laskey@oracle.com
nashorn/samples/test.js
nashorn/src/jdk/nashorn/internal/objects/Global.java
--- a/nashorn/samples/test.js	Tue Jun 11 17:50:10 2013 +0200
+++ b/nashorn/samples/test.js	Wed Jun 12 11:22:06 2013 -0300
@@ -1,21 +1,21 @@
 /*
  * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
- * 
+ *
  *   - Redistributions of source code must retain the above copyright
  *     notice, this list of conditions and the following disclaimer.
- * 
+ *
  *   - Redistributions in binary form must reproduce the above copyright
  *     notice, this list of conditions and the following disclaimer in the
  *     documentation and/or other materials provided with the distribution.
- * 
+ *
  *   - Neither the name of Oracle nor the names of its
  *     contributors may be used to endorse or promote products derived
  *     from this software without specific prior written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@@ -30,3 +30,4 @@
  */
 
 print("Hello World");
+
--- a/nashorn/src/jdk/nashorn/internal/objects/Global.java	Tue Jun 11 17:50:10 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/objects/Global.java	Wed Jun 12 11:22:06 2013 -0300
@@ -37,6 +37,7 @@
 import java.lang.reflect.Field;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -372,7 +373,7 @@
     private static final MethodHandle PRINT             = findOwnMH("print",             Object.class, Object.class, Object[].class);
     private static final MethodHandle PRINTLN           = findOwnMH("println",           Object.class, Object.class, Object[].class);
     private static final MethodHandle LOAD              = findOwnMH("load",              Object.class, Object.class, Object.class);
-    private static final MethodHandle LOADWITHNEWGLOBAL = findOwnMH("loadWithNewGlobal", Object.class, Object.class, Object.class, Object[].class);
+    private static final MethodHandle LOADWITHNEWGLOBAL = findOwnMH("loadWithNewGlobal", Object.class, Object.class, Object[].class);
     private static final MethodHandle EXIT              = findOwnMH("exit",              Object.class, Object.class, Object.class);
 
     private final Context context;
@@ -750,17 +751,21 @@
     /**
      * Global loadWithNewGlobal implementation - Nashorn extension
      *
-     * @param self    scope
-     * @param source  source to load
-     * @param args (optional) arguments to be passed to the loaded script
+     * @param self scope
+     * @param args from plus (optional) arguments to be passed to the loaded script
      *
-     * @return result of load (undefined)
+     * @return result of load (may be undefined)
      *
      * @throws IOException if source could not be read
      */
-    public static Object loadWithNewGlobal(final Object self, final Object source, final Object...args) throws IOException {
+    public static Object loadWithNewGlobal(final Object self, final Object...args) throws IOException {
         final Global global = Global.instance();
-        return global.context.loadWithNewGlobal(source, args);
+        final int length = args.length;
+        final boolean hasArgs = 0 < length;
+        final Object from = hasArgs ? args[0] : UNDEFINED;
+        final Object[] arguments = hasArgs ? Arrays.copyOfRange(args, 1, length) : args;
+
+        return global.context.loadWithNewGlobal(from, arguments);
     }
 
     /**