# HG changeset patch # User jlaskey # Date 1371046926 10800 # Node ID aa16622193e14f939df1cd12a52b528c008a1ad6 # Parent df5d7f34e35e89dc8f2cdcafd5b7fd460d4c9201 8016453: loadWithNewGlobal does not allow apply operation Reviewed-by: hannesw, sundar Contributed-by: james.laskey@oracle.com diff -r df5d7f34e35e -r aa16622193e1 samples/test.js --- a/samples/test.js Tue Jun 11 17:50:10 2013 +0200 +++ b/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"); + diff -r df5d7f34e35e -r aa16622193e1 src/jdk/nashorn/internal/objects/Global.java --- a/src/jdk/nashorn/internal/objects/Global.java Tue Jun 11 17:50:10 2013 +0200 +++ b/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); } /**