changeset 477:fbd21b00197b

8021571: @fork tests should use VM options passed from project.properties Reviewed-by: lagergren, hannesw, jlaskey
author sundar
date Fri, 26 Jul 2013 20:10:47 +0530
parents 17a947418e65
children 5fc6b7f11289 0532397d0732
files buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ClassGenerator.java buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ConstructorGenerator.java buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/PrototypeGenerator.java make/project.properties src/jdk/nashorn/internal/objects/BoundScriptFunctionImpl.java src/jdk/nashorn/internal/objects/PrototypeObject.java src/jdk/nashorn/internal/runtime/AccessorProperty.java src/jdk/nashorn/internal/runtime/FinalScriptFunctionData.java src/jdk/nashorn/internal/runtime/ListAdapter.java src/jdk/nashorn/internal/runtime/Property.java src/jdk/nashorn/internal/runtime/PropertyListenerManager.java src/jdk/nashorn/internal/runtime/ScriptFunctionData.java src/jdk/nashorn/internal/runtime/UserAccessorProperty.java src/jdk/nashorn/internal/runtime/WithObject.java src/jdk/nashorn/internal/runtime/linker/AdaptationException.java src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java src/jdk/nashorn/internal/runtime/linker/InvokeByName.java src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java src/jdk/nashorn/internal/runtime/linker/JavaArgumentConverters.java src/jdk/nashorn/internal/runtime/linker/NashornCallSiteDescriptor.java src/jdk/nashorn/internal/runtime/linker/NashornLinker.java src/jdk/nashorn/internal/runtime/linker/PrimitiveLookup.java src/jdk/nashorn/internal/runtime/options/KeyValueOption.java src/jdk/nashorn/internal/runtime/options/OptionTemplate.java test/src/jdk/nashorn/internal/test/framework/AbstractScriptRunnable.java test/src/jdk/nashorn/internal/test/framework/ScriptRunnable.java test/src/jdk/nashorn/internal/test/framework/TestConfig.java
diffstat 28 files changed, 48 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ClassGenerator.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ClassGenerator.java	Fri Jul 26 20:10:47 2013 +0530
@@ -152,14 +152,14 @@
     }
 
     static MethodGenerator makeStaticInitializer(final ClassVisitor cv, final String name) {
-        final int access = ACC_PUBLIC | ACC_STATIC;
+        final int access =  ACC_PUBLIC | ACC_STATIC;
         final String desc = DEFAULT_INIT_DESC;
         final MethodVisitor mv = cv.visitMethod(access, name, desc, null, null);
         return new MethodGenerator(mv, access, name, desc);
     }
 
     static MethodGenerator makeConstructor(final ClassVisitor cv) {
-        final int access = ACC_PUBLIC;
+        final int access = 0;
         final String name = INIT;
         final String desc = DEFAULT_INIT_DESC;
         final MethodVisitor mv = cv.visitMethod(access, name, desc, null, null);
--- a/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ConstructorGenerator.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ConstructorGenerator.java	Fri Jul 26 20:10:47 2013 +0530
@@ -25,6 +25,7 @@
 
 package jdk.nashorn.internal.tools.nasgen;
 
+import static jdk.internal.org.objectweb.asm.Opcodes.ACC_FINAL;
 import static jdk.internal.org.objectweb.asm.Opcodes.ACC_PUBLIC;
 import static jdk.internal.org.objectweb.asm.Opcodes.ACC_SUPER;
 import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKESTATIC;
@@ -80,7 +81,7 @@
     byte[] getClassBytes() {
         // new class extensing from ScriptObject
         final String superClass = (constructor != null)? SCRIPTFUNCTIONIMPL_TYPE : SCRIPTOBJECT_TYPE;
-        cw.visit(V1_7, ACC_PUBLIC | ACC_SUPER, className, null, superClass, null);
+        cw.visit(V1_7, ACC_FINAL, className, null, superClass, null);
         if (memberCount > 0) {
             // add fields
             emitFields();
--- a/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/PrototypeGenerator.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/PrototypeGenerator.java	Fri Jul 26 20:10:47 2013 +0530
@@ -25,6 +25,7 @@
 
 package jdk.nashorn.internal.tools.nasgen;
 
+import static jdk.internal.org.objectweb.asm.Opcodes.ACC_FINAL;
 import static jdk.internal.org.objectweb.asm.Opcodes.ACC_PUBLIC;
 import static jdk.internal.org.objectweb.asm.Opcodes.ACC_SUPER;
 import static jdk.internal.org.objectweb.asm.Opcodes.V1_7;
@@ -60,7 +61,7 @@
 
     byte[] getClassBytes() {
         // new class extensing from ScriptObject
-        cw.visit(V1_7, ACC_PUBLIC | ACC_SUPER, className, null, PROTOTYPEOBJECT_TYPE, null);
+        cw.visit(V1_7, ACC_FINAL | ACC_SUPER, className, null, PROTOTYPEOBJECT_TYPE, null);
         if (memberCount > 0) {
             // add fields
             emitFields();
--- a/make/project.properties	Fri Jul 26 09:17:54 2013 -0300
+++ b/make/project.properties	Fri Jul 26 20:10:47 2013 +0530
@@ -230,6 +230,9 @@
 
 run.test.jvmsecurityargs=-Xverify:all -Djava.security.properties=${basedir}/make/java.security.override -Djava.security.manager -Djava.security.policy=${basedir}/build/nashorn.policy
 
+# VM options for script tests with @fork option
+test-sys-prop.test.fork.jvm.options=${run.test.jvmargs.main} ${run.test.jvmsecurityargs}
+
 # path of rhino.jar for benchmarks
 rhino.jar=
 
--- a/src/jdk/nashorn/internal/objects/BoundScriptFunctionImpl.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/objects/BoundScriptFunctionImpl.java	Fri Jul 26 20:10:47 2013 +0530
@@ -35,7 +35,7 @@
  * must track their {@code [[TargetFunction]]} property for purposes of correctly implementing {@code [[HasInstance]]};
  * see {@link ScriptFunction#isInstance(ScriptObject)}.
  */
-class BoundScriptFunctionImpl extends ScriptFunctionImpl {
+final class BoundScriptFunctionImpl extends ScriptFunctionImpl {
     private final ScriptFunction targetFunction;
 
     BoundScriptFunctionImpl(ScriptFunctionData data, ScriptFunction targetFunction) {
--- a/src/jdk/nashorn/internal/objects/PrototypeObject.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/objects/PrototypeObject.java	Fri Jul 26 20:10:47 2013 +0530
@@ -75,7 +75,7 @@
      *
      * @param map property map
      */
-    public PrototypeObject(final PropertyMap map) {
+    PrototypeObject(final PropertyMap map) {
         this(Global.instance(), map);
     }
 
@@ -89,7 +89,7 @@
      * @param self self reference
      * @return constructor, probably, but not necessarily, a {@link ScriptFunction}
      */
-    public static Object getConstructor(final Object self) {
+    static Object getConstructor(final Object self) {
         return (self instanceof PrototypeObject) ?
             ((PrototypeObject)self).getConstructor() :
             UNDEFINED;
@@ -100,7 +100,7 @@
      * @param self self reference
      * @param constructor constructor, probably, but not necessarily, a {@link ScriptFunction}
      */
-    public static void setConstructor(final Object self, final Object constructor) {
+    static void setConstructor(final Object self, final Object constructor) {
         if (self instanceof PrototypeObject) {
             ((PrototypeObject)self).setConstructor(constructor);
         }
--- a/src/jdk/nashorn/internal/runtime/AccessorProperty.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/AccessorProperty.java	Fri Jul 26 20:10:47 2013 +0530
@@ -51,7 +51,7 @@
  * An AccessorProperty is the most generic property type. An AccessorProperty is
  * represented as fields in a ScriptObject class.
  */
-public class AccessorProperty extends Property {
+public final class AccessorProperty extends Property {
     private static final MethodHandles.Lookup lookup = MethodHandles.lookup();
     private static final MethodHandle REPLACE_MAP = findOwnMH("replaceMap", Object.class, Object.class, PropertyMap.class, String.class, Class.class, Class.class);
 
@@ -149,7 +149,7 @@
      * @param property  accessor property to rebind
      * @param delegate  delegate object to rebind receiver to
      */
-    public AccessorProperty(final AccessorProperty property, final Object delegate) {
+    AccessorProperty(final AccessorProperty property, final Object delegate) {
         super(property);
 
         this.primitiveGetter = bindTo(property.primitiveGetter, delegate);
@@ -185,7 +185,7 @@
      * @param getter the property getter
      * @param setter the property setter or null if non writable, non configurable
      */
-    public AccessorProperty(final String key, final int flags, final int slot, final MethodHandle getter, final MethodHandle setter) {
+    AccessorProperty(final String key, final int flags, final int slot, final MethodHandle getter, final MethodHandle setter) {
         super(key, flags, slot);
 
         // we don't need to prep the setters these will never be invalidated as this is a nasgen
--- a/src/jdk/nashorn/internal/runtime/FinalScriptFunctionData.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/FinalScriptFunctionData.java	Fri Jul 26 20:10:47 2013 +0530
@@ -33,7 +33,7 @@
  * This is a subclass that represents a script function that may not be regenerated.
  * This is used for example for bound functions and builtins.
  */
-public final class FinalScriptFunctionData extends ScriptFunctionData {
+final class FinalScriptFunctionData extends ScriptFunctionData {
 
     /**
      * Constructor - used for bind
--- a/src/jdk/nashorn/internal/runtime/ListAdapter.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/ListAdapter.java	Fri Jul 26 20:10:47 2013 +0530
@@ -47,7 +47,7 @@
  * operations respectively, while {@link #addLast(Object)} and {@link #removeLast()} will translate to {@code push} and
  * {@code pop}.
  */
-public class ListAdapter extends AbstractList<Object> implements RandomAccess, Deque<Object> {
+public final class ListAdapter extends AbstractList<Object> implements RandomAccess, Deque<Object> {
     // These add to the back and front of the list
     private static final InvokeByName PUSH    = new InvokeByName("push",    ScriptObject.class, void.class, Object.class);
     private static final InvokeByName UNSHIFT = new InvokeByName("unshift", ScriptObject.class, void.class, Object.class);
--- a/src/jdk/nashorn/internal/runtime/Property.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/Property.java	Fri Jul 26 20:10:47 2013 +0530
@@ -100,7 +100,7 @@
      * @param flags property flags
      * @param slot  property field number or spill slot
      */
-    public Property(final String key, final int flags, final int slot) {
+    Property(final String key, final int flags, final int slot) {
         assert key != null;
         this.key   = key;
         this.flags = flags;
@@ -112,7 +112,7 @@
      *
      * @param property source property
      */
-    protected Property(final Property property) {
+    Property(final Property property) {
         this.key   = property.key;
         this.flags = property.flags;
         this.slot  = property.slot;
@@ -123,7 +123,7 @@
      *
      * @return cloned property
      */
-    protected abstract Property copy();
+    abstract Property copy();
 
     /**
      * Property flag utility method for {@link PropertyDescriptor}s. Given two property descriptors,
--- a/src/jdk/nashorn/internal/runtime/PropertyListenerManager.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/PropertyListenerManager.java	Fri Jul 26 20:10:47 2013 +0530
@@ -32,6 +32,7 @@
  * Helper class to manage property listeners and notification.
  */
 public class PropertyListenerManager implements PropertyListener {
+    PropertyListenerManager() {}
 
     /** property listeners for this object. */
     private Map<PropertyListener,Boolean> listeners;
--- a/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java	Fri Jul 26 20:10:47 2013 +0530
@@ -67,7 +67,7 @@
      * @param isBuiltin     is the function built in
      * @param isConstructor is the function a constructor
      */
-    protected ScriptFunctionData(final String name, final int arity, final boolean isStrict, final boolean isBuiltin, final boolean isConstructor) {
+    ScriptFunctionData(final String name, final int arity, final boolean isStrict, final boolean isBuiltin, final boolean isConstructor) {
         this.name          = name;
         this.arity         = arity;
         this.code          = new CompiledFunctions();
--- a/src/jdk/nashorn/internal/runtime/UserAccessorProperty.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/UserAccessorProperty.java	Fri Jul 26 20:10:47 2013 +0530
@@ -83,7 +83,7 @@
      * @param getterSlot getter slot, starting at first embed
      * @param setterSlot setter slot, starting at first embed
      */
-    public UserAccessorProperty(final String key, final int flags, final int getterSlot, final int setterSlot) {
+    UserAccessorProperty(final String key, final int flags, final int getterSlot, final int setterSlot) {
         super(key, flags, -1);
         this.getterSlot = getterSlot;
         this.setterSlot = setterSlot;
--- a/src/jdk/nashorn/internal/runtime/WithObject.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/WithObject.java	Fri Jul 26 20:10:47 2013 +0530
@@ -57,7 +57,7 @@
      * @param scope scope object
      * @param expression with expression
      */
-    public WithObject(final ScriptObject scope, final Object expression) {
+    WithObject(final ScriptObject scope, final Object expression) {
         super(scope, null);
         setIsScope();
         this.expression = expression;
--- a/src/jdk/nashorn/internal/runtime/linker/AdaptationException.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/linker/AdaptationException.java	Fri Jul 26 20:10:47 2013 +0530
@@ -26,7 +26,7 @@
 package jdk.nashorn.internal.runtime.linker;
 
 @SuppressWarnings("serial")
-class AdaptationException extends Exception {
+final class AdaptationException extends Exception {
     private final AdaptationResult adaptationResult;
 
     AdaptationException(final AdaptationResult.Outcome outcome, final String classList) {
--- a/src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java	Fri Jul 26 20:10:47 2013 +0530
@@ -32,7 +32,7 @@
  * A result of generating an adapter for a class. A tuple of an outcome and - in case of an error outcome - a list of
  * classes that caused the error.
  */
-class AdaptationResult {
+final class AdaptationResult {
     /**
      * Contains various outcomes for attempting to generate an adapter class. These are stored in AdapterInfo instances.
      * We have a successful outcome (adapter class was generated) and four possible error outcomes: superclass is final,
--- a/src/jdk/nashorn/internal/runtime/linker/InvokeByName.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/linker/InvokeByName.java	Fri Jul 26 20:10:47 2013 +0530
@@ -58,7 +58,7 @@
  * you dynamically invoke a function with the same name from multiple places in your code, it is advisable to create a
  * separate instance of this class for every place.
  */
-public class InvokeByName {
+public final class InvokeByName {
     private final String name;
     private final MethodHandle getter;
     private final MethodHandle invoker;
--- a/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java	Fri Jul 26 20:10:47 2013 +0530
@@ -56,7 +56,6 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Random;
 import java.util.Set;
 import jdk.internal.org.objectweb.asm.ClassWriter;
 import jdk.internal.org.objectweb.asm.Label;
--- a/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java	Fri Jul 26 20:10:47 2013 +0530
@@ -37,7 +37,7 @@
 /**
  * Provides static utility services to generated Java adapter classes.
  */
-public class JavaAdapterServices {
+public final class JavaAdapterServices {
     private static final ThreadLocal<ScriptObject> classOverrides = new ThreadLocal<>();
 
     private JavaAdapterServices() {
--- a/src/jdk/nashorn/internal/runtime/linker/JavaArgumentConverters.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/linker/JavaArgumentConverters.java	Fri Jul 26 20:10:47 2013 +0530
@@ -42,7 +42,7 @@
  * Utility class shared by {@code NashornLinker} and {@code NashornPrimitiveLinker} for converting JS values to Java
  * types.
  */
-public class JavaArgumentConverters {
+final class JavaArgumentConverters {
 
     private static final MethodHandle TO_BOOLEAN        = findOwnMH("toBoolean", Boolean.class, Object.class);
     private static final MethodHandle TO_STRING         = findOwnMH("toString", String.class, Object.class);
--- a/src/jdk/nashorn/internal/runtime/linker/NashornCallSiteDescriptor.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/linker/NashornCallSiteDescriptor.java	Fri Jul 26 20:10:47 2013 +0530
@@ -39,7 +39,7 @@
  * we can have a more compact representation, as we know that we're always only using {@code "dyn:*"} operations; also
  * we're storing flags in an additional primitive field.
  */
-public class NashornCallSiteDescriptor extends AbstractCallSiteDescriptor {
+public final class NashornCallSiteDescriptor extends AbstractCallSiteDescriptor {
     /** Flags that the call site references a scope variable (it's an identifier reference or a var declaration, not a
      * property access expression. */
     public static final int CALLSITE_SCOPE                = 0x01;
--- a/src/jdk/nashorn/internal/runtime/linker/NashornLinker.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/linker/NashornLinker.java	Fri Jul 26 20:10:47 2013 +0530
@@ -46,7 +46,7 @@
  * This is the main dynamic linker for Nashorn. It is used for linking all {@link ScriptObject} and its subclasses (this
  * includes {@link ScriptFunction} and its subclasses) as well as {@link Undefined}.
  */
-public final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTypeConverterFactory, ConversionComparator {
+final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTypeConverterFactory, ConversionComparator {
     /**
      * Returns true if {@code ScriptObject} is assignable from {@code type}, or it is {@code Undefined}.
      */
--- a/src/jdk/nashorn/internal/runtime/linker/PrimitiveLookup.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/linker/PrimitiveLookup.java	Fri Jul 26 20:10:47 2013 +0530
@@ -25,7 +25,6 @@
 
 package jdk.nashorn.internal.runtime.linker;
 
-import jdk.nashorn.internal.lookup.Lookup;
 import static jdk.nashorn.internal.lookup.Lookup.MH;
 
 import java.lang.invoke.MethodHandle;
@@ -35,6 +34,7 @@
 import jdk.internal.dynalink.linker.LinkRequest;
 import jdk.internal.dynalink.support.CallSiteDescriptorFactory;
 import jdk.internal.dynalink.support.Guards;
+import jdk.nashorn.internal.lookup.Lookup;
 import jdk.nashorn.internal.runtime.ScriptObject;
 
 /**
@@ -42,7 +42,7 @@
  * numbers). This class is only public so it can be accessed by classes in the {@code jdk.nashorn.internal.objects}
  * package.
  */
-public class PrimitiveLookup {
+public final class PrimitiveLookup {
 
     private PrimitiveLookup() {
     }
--- a/src/jdk/nashorn/internal/runtime/options/KeyValueOption.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/options/KeyValueOption.java	Fri Jul 26 20:10:47 2013 +0530
@@ -36,7 +36,7 @@
  *
  * {@code --log=module1:level1,module2:level2... }
  */
-public class KeyValueOption extends Option<String> {
+public final class KeyValueOption extends Option<String> {
     /**
      * Map of keys given
      */
--- a/src/jdk/nashorn/internal/runtime/options/OptionTemplate.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/src/jdk/nashorn/internal/runtime/options/OptionTemplate.java	Fri Jul 26 20:10:47 2013 +0530
@@ -34,7 +34,7 @@
  * bundle file. Metainfo such as parameters and description is here as well
  * for context sensitive help generation.
  */
-public class OptionTemplate implements Comparable<OptionTemplate> {
+public final class OptionTemplate implements Comparable<OptionTemplate> {
     /** Resource, e.g. "nashorn" for this option */
     private final String resource;
 
--- a/test/src/jdk/nashorn/internal/test/framework/AbstractScriptRunnable.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/test/src/jdk/nashorn/internal/test/framework/AbstractScriptRunnable.java	Fri Jul 26 20:10:47 2013 +0530
@@ -109,7 +109,6 @@
         this.copyExpectedFileName = buildDir + File.separator + testName + ".EXPECTED";
         this.expectedFileName = testFile.getPath() + ".EXPECTED";
 
-        final String failListString = System.getProperty(TEST_JS_FAIL_LIST);
         if (failListString != null) {
             final String[] failedTests = failListString.split(" ");
             for (final String failedTest : failedTests) {
@@ -151,10 +150,15 @@
     }
 
     // shared context or not?
-    protected static final boolean sharedContext;
+    protected static final boolean sharedContext = Boolean.getBoolean(TEST_JS_SHARED_CONTEXT);
+    protected static final String failListString = System.getProperty(TEST_JS_FAIL_LIST);
+    // VM options when a @fork test is executed by a separate process
+    protected static final String[] forkJVMOptions;
     static {
-        sharedContext = Boolean.getBoolean(TEST_JS_SHARED_CONTEXT);
+        String vmOptions = System.getProperty(TestConfig.TEST_FORK_JVM_OPTIONS);
+        forkJVMOptions = (vmOptions != null)? vmOptions.split(" ") : new String[0];
     }
+
     private static ThreadLocal<ScriptEvaluator> evaluators = new ThreadLocal<>();
 
     /**
--- a/test/src/jdk/nashorn/internal/test/framework/ScriptRunnable.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/test/src/jdk/nashorn/internal/test/framework/ScriptRunnable.java	Fri Jul 26 20:10:47 2013 +0530
@@ -174,6 +174,9 @@
 
         cmd.add(System.getProperty("java.home") + separator + "bin" + separator + "java");
         cmd.add("-Djava.ext.dirs=dist");
+        for (String str : forkJVMOptions) {
+            cmd.add(str);
+        }
         cmd.add(Shell.class.getName());
         // now add the rest of the "in process" runtime arguments
         cmd.addAll(getRuntimeArgs());
--- a/test/src/jdk/nashorn/internal/test/framework/TestConfig.java	Fri Jul 26 09:17:54 2013 -0300
+++ b/test/src/jdk/nashorn/internal/test/framework/TestConfig.java	Fri Jul 26 20:10:47 2013 +0530
@@ -74,6 +74,8 @@
     // shared context mode or not
     static final String TEST_JS_SHARED_CONTEXT              = "test.js.shared.context";
 
+    static final String TEST_FORK_JVM_OPTIONS               = "test.fork.jvm.options";
+
     // file for storing last run's failed tests
     static final String TEST_FAILED_LIST_FILE = "test.failed.list.file";
 }