aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjlaskey <none@none>2013-06-12 11:22:06 -0300
committerjlaskey <none@none>2013-06-12 11:22:06 -0300
commitc5b280e3f51f8bf919389aa5c6815065a7608f62 (patch)
tree7313304b24dd627dec9b16bc9cd7c49467348376
parent80124a13c4d3b869e2f00657c8412571894f7635 (diff)
downloadnashorn-c5b280e3f51f8bf919389aa5c6815065a7608f62.tar.gz
8016453: loadWithNewGlobal does not allow apply operation
Reviewed-by: hannesw, sundar Contributed-by: james.laskey@oracle.com
-rw-r--r--samples/test.js11
-rw-r--r--src/jdk/nashorn/internal/objects/Global.java19
2 files changed, 18 insertions, 12 deletions
diff --git a/samples/test.js b/samples/test.js
index e2f8c934..ecdaf846 100644
--- a/samples/test.js
+++ b/samples/test.js
@@ -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");
+
diff --git a/src/jdk/nashorn/internal/objects/Global.java b/src/jdk/nashorn/internal/objects/Global.java
index d1954a62..279d5018 100644
--- a/src/jdk/nashorn/internal/objects/Global.java
+++ b/src/jdk/nashorn/internal/objects/Global.java
@@ -37,6 +37,7 @@ import java.lang.ref.SoftReference;
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 @@ public final class Global extends ScriptObject implements GlobalObject, Scope {
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 @@ public final class Global extends ScriptObject implements GlobalObject, Scope {
/**
* 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);
}
/**