diff --git a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/BuiltinBenchmark.java b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/BuiltinBenchmark.java index 2e943bb443..9071d4f7bb 100644 --- a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/BuiltinBenchmark.java +++ b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/BuiltinBenchmark.java @@ -22,7 +22,6 @@ public static class AbstractClassState { public void init() throws IllegalAccessException, InvocationTargetException, InstantiationException { cx = Context.enter(); - cx.setOptimizationLevel(9); cx.setLanguageVersion(Context.VERSION_ES6); scope = cx.initStandardObjects(); diff --git a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/MathBenchmark.java b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/MathBenchmark.java index 427e5a9897..e298919eff 100644 --- a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/MathBenchmark.java +++ b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/MathBenchmark.java @@ -36,7 +36,6 @@ public static class MathState { @Setup(Level.Trial) public void setup() throws IOException { cx = Context.enter(); - cx.setOptimizationLevel(9); cx.setLanguageVersion(Context.VERSION_ES6); scope = cx.initStandardObjects(); diff --git a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/ObjectBenchmark.java b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/ObjectBenchmark.java index 53ed05195d..269469a2f1 100644 --- a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/ObjectBenchmark.java +++ b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/ObjectBenchmark.java @@ -37,7 +37,6 @@ public static class FieldTestState { @SuppressWarnings("unused") public void create() throws IOException { cx = Context.enter(); - cx.setOptimizationLevel(9); cx.setLanguageVersion(Context.VERSION_ES6); scope = new Global(cx); diff --git a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/PropertyBenchmark.java b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/PropertyBenchmark.java index 329e39a15d..402f003934 100644 --- a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/PropertyBenchmark.java +++ b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/PropertyBenchmark.java @@ -27,7 +27,6 @@ public static class PropertyState { @Setup(Level.Trial) public void setup() throws IOException { cx = Context.enter(); - cx.setOptimizationLevel(9); cx.setLanguageVersion(Context.VERSION_ES6); scope = cx.initStandardObjects(); diff --git a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/SunSpiderBenchmark.java b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/SunSpiderBenchmark.java index 55a181b75f..12555f6c0a 100644 --- a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/SunSpiderBenchmark.java +++ b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/SunSpiderBenchmark.java @@ -26,7 +26,6 @@ abstract static class AbstractState { public void setUp() { cx = Context.enter(); cx.setLanguageVersion(Context.VERSION_ES6); - cx.setOptimizationLevel(9); scope = cx.initStandardObjects(); try (FileReader rdr = new FileReader(fileName)) { diff --git a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/V8Benchmark.java b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/V8Benchmark.java index 5b7f92a483..9c38ffe717 100644 --- a/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/V8Benchmark.java +++ b/benchmarks/src/jmh/java/org/mozilla/javascript/benchmarks/V8Benchmark.java @@ -41,7 +41,6 @@ void evaluateSource(Context cx, Scriptable scope, String fileName) { void initialize() { cx = Context.enter(); cx.setLanguageVersion(Context.VERSION_ES6); - cx.setOptimizationLevel(9); scope = cx.initStandardObjects(); evaluateSource(cx, scope, "testsrc/benchmarks/framework.js"); } diff --git a/rhino-engine/src/main/java/org/mozilla/javascript/engine/RhinoScriptEngine.java b/rhino-engine/src/main/java/org/mozilla/javascript/engine/RhinoScriptEngine.java index d49dd44e9b..2058f297b2 100644 --- a/rhino-engine/src/main/java/org/mozilla/javascript/engine/RhinoScriptEngine.java +++ b/rhino-engine/src/main/java/org/mozilla/javascript/engine/RhinoScriptEngine.java @@ -54,14 +54,21 @@ public class RhinoScriptEngine extends AbstractScriptEngine implements Compilable, Invocable { /** - * Reserved key for the Rhino optimization level. Default is "9," for optimized and compiled - * code. Set this to "-1" to run Rhino in interpreted mode -- this is much much slower but the - * only option on platforms like Android that don't support class files. + * Reserved key for the Rhino optimization level. This is supported for backward compatibility + * -- any value less than zero results in using interpreted mode. + * + * @deprecated Replaced in 1.8.0; use {@link #INTERPRETED_MODE} instead. */ + @Deprecated public static final String OPTIMIZATION_LEVEL = "org.mozilla.javascript.optimization_level"; + /** + * Reserved key for interpreted mode, which is much slower than the default compiled mode but + * necessary on Android where Rhino can't generate class files. + */ + public static final String INTERPRETED_MODE = "org.mozilla.javascript.interpreted_mode"; + static final int DEFAULT_LANGUAGE_VERSION = Context.VERSION_ES6; - private static final int DEFAULT_OPT = 9; private static final boolean DEFAULT_DEBUG = true; private static final String DEFAULT_FILENAME = "eval"; @@ -268,6 +275,7 @@ public ScriptEngineFactory getFactory() { return factory; } + @SuppressWarnings("deprecation") private void configureContext(Context cx) throws ScriptException { Object lv = get(ScriptEngine.LANGUAGE_VERSION); if (lv != null) { @@ -275,8 +283,13 @@ private void configureContext(Context cx) throws ScriptException { } Object ol = get(OPTIMIZATION_LEVEL); if (ol != null) { + // Handle backwardly-compatible "optimization level". cx.setOptimizationLevel(parseInteger(ol)); } + Object interpreted = get(INTERPRETED_MODE); + if (interpreted != null) { + cx.setInterpretedMode(parseBoolean(interpreted)); + } } private static int parseInteger(Object v) throws ScriptException { @@ -286,11 +299,21 @@ private static int parseInteger(Object v) throws ScriptException { } catch (NumberFormatException nfe) { throw new ScriptException("Invalid number " + v); } - } else if (v instanceof Integer) { - return ((Integer) v).intValue(); - } else { - throw new ScriptException("Value must be a string or number"); } + if (v instanceof Integer) { + return (Integer) v; + } + throw new ScriptException("Value must be a string or number"); + } + + private static boolean parseBoolean(Object v) throws ScriptException { + if (v instanceof String) { + return Boolean.parseBoolean((String) v); + } + if (v instanceof Boolean) { + return (Boolean) v; + } + throw new ScriptException("Value must be a string or boolean"); } private String getFilename() { @@ -327,7 +350,6 @@ protected boolean hasFeature(Context cx, int featureIndex) { @Override protected void onContextCreated(Context cx) { cx.setLanguageVersion(Context.VERSION_ES6); - cx.setOptimizationLevel(DEFAULT_OPT); cx.setGeneratingDebug(DEFAULT_DEBUG); } } diff --git a/rhino-engine/src/test/java/org/mozilla/javascript/tests/scriptengine/ScriptEngineTest.java b/rhino-engine/src/test/java/org/mozilla/javascript/tests/scriptengine/ScriptEngineTest.java index 6b8e102737..33c6bc5079 100644 --- a/rhino-engine/src/test/java/org/mozilla/javascript/tests/scriptengine/ScriptEngineTest.java +++ b/rhino-engine/src/test/java/org/mozilla/javascript/tests/scriptengine/ScriptEngineTest.java @@ -47,7 +47,7 @@ public void hello() throws ScriptException { @Test public void helloInterpreted() throws ScriptException { - engine.put(RhinoScriptEngine.OPTIMIZATION_LEVEL, -1); + engine.put(RhinoScriptEngine.INTERPRETED_MODE, true); Object result = engine.eval("'Hello, World!';"); assertEquals(result, "Hello, World!"); } diff --git a/rhino-tools/src/main/java/org/mozilla/javascript/tools/debugger/Dim.java b/rhino-tools/src/main/java/org/mozilla/javascript/tools/debugger/Dim.java index 7749dd13aa..7a3fe99303 100644 --- a/rhino-tools/src/main/java/org/mozilla/javascript/tools/debugger/Dim.java +++ b/rhino-tools/src/main/java/org/mozilla/javascript/tools/debugger/Dim.java @@ -738,10 +738,10 @@ private static String do_eval(Context cx, StackFrame frame, String expr) { String resultString; Debugger saved_debugger = cx.getDebugger(); Object saved_data = cx.getDebuggerContextData(); - int saved_level = cx.getOptimizationLevel(); + boolean wasInterpreted = cx.isInterpretedMode(); cx.setDebugger(null, null); - cx.setOptimizationLevel(-1); + cx.setInterpretedMode(false); cx.setGeneratingDebug(false); try { Callable script = (Callable) cx.compileString(expr, "", 0, null); @@ -755,7 +755,7 @@ private static String do_eval(Context cx, StackFrame frame, String expr) { resultString = exc.getMessage(); } finally { cx.setGeneratingDebug(true); - cx.setOptimizationLevel(saved_level); + cx.setInterpretedMode(wasInterpreted); cx.setDebugger(saved_debugger, saved_data); } if (resultString == null) { @@ -874,7 +874,7 @@ public void contextCreated(Context cx) { Debugger debugger = new DimIProxy(dim, IPROXY_DEBUG); cx.setDebugger(debugger, contextData); cx.setGeneratingDebug(true); - cx.setOptimizationLevel(-1); + cx.setInterpretedMode(true); } /** Called when a Context is destroyed. */ diff --git a/rhino-tools/src/main/java/org/mozilla/javascript/tools/jsc/Main.java b/rhino-tools/src/main/java/org/mozilla/javascript/tools/jsc/Main.java index bd6a61a884..06101cc213 100644 --- a/rhino-tools/src/main/java/org/mozilla/javascript/tools/jsc/Main.java +++ b/rhino-tools/src/main/java/org/mozilla/javascript/tools/jsc/Main.java @@ -80,8 +80,10 @@ public String[] processOptions(String args[]) { continue; } if ((arg.equals("-opt") || arg.equals("-O")) && ++i < args.length) { - int optLevel = Integer.parseInt(args[i]); - compilerEnv.setOptimizationLevel(optLevel); + // As of 1.8.0, optimization levels no longer have an effect, but + // parse this for backward compatibility with existing scripts. + // Technically the optimization level was replaced with "interpreted + // mode, but this tool only makes sense in compiled mode. continue; } } catch (NumberFormatException e) { diff --git a/rhino-tools/src/main/java/org/mozilla/javascript/tools/shell/Main.java b/rhino-tools/src/main/java/org/mozilla/javascript/tools/shell/Main.java index 1393d17ef6..f67d0d8798 100644 --- a/rhino-tools/src/main/java/org/mozilla/javascript/tools/shell/Main.java +++ b/rhino-tools/src/main/java/org/mozilla/javascript/tools/shell/Main.java @@ -285,6 +285,8 @@ public static String[] processOptions(String args[]) { continue; } if (arg.equals("-opt") || arg.equals("-O")) { + // As of 1.8.0, this bit remains for backward compatibility, + // although it is no longer documented in the "help" message. if (++i == args.length) { usageError = arg; break goodUsage; @@ -296,14 +298,13 @@ public static String[] processOptions(String args[]) { usageError = args[i]; break goodUsage; } - if (opt == -2) { - // Compatibility with Cocoon Rhino fork - opt = -1; - } else if (!Context.isValidOptimizationLevel(opt)) { - usageError = args[i]; - break goodUsage; + if (opt < 0) { + shellContextFactory.setInterpretedMode(true); } - shellContextFactory.setOptimizationLevel(opt); + continue; + } + if (arg.equals("-int") || arg.equals("-interpreted")) { + shellContextFactory.setInterpretedMode(true); continue; } if (arg.equals("-encoding")) { @@ -551,7 +552,7 @@ static void processFileSecure(Context cx, Scriptable scope, String path, Object Object source = readFileOrUrl(path, !isClass); byte[] digest = getDigest(source); - String key = path + "_" + cx.getOptimizationLevel(); + String key = path + "_" + (cx.isInterpretedMode() ? "interpreted" : "compiled"); ScriptReference ref = scriptCache.get(key, digest); Script script = ref != null ? ref.get() : null; diff --git a/rhino-tools/src/main/java/org/mozilla/javascript/tools/shell/ShellContextFactory.java b/rhino-tools/src/main/java/org/mozilla/javascript/tools/shell/ShellContextFactory.java index 61c96fc17c..cd8ae8ae23 100644 --- a/rhino-tools/src/main/java/org/mozilla/javascript/tools/shell/ShellContextFactory.java +++ b/rhino-tools/src/main/java/org/mozilla/javascript/tools/shell/ShellContextFactory.java @@ -14,7 +14,7 @@ public class ShellContextFactory extends ContextFactory { private boolean strictMode; private boolean warningAsError; private int languageVersion = Context.VERSION_ES6; - private int optimizationLevel; + private boolean interpretedMode; private boolean generatingDebug; private boolean allowReservedKeywords = true; private ErrorReporter errorReporter; @@ -43,7 +43,7 @@ protected boolean hasFeature(Context cx, int featureIndex) { @Override protected void onContextCreated(Context cx) { cx.setLanguageVersion(languageVersion); - cx.setOptimizationLevel(optimizationLevel); + cx.setInterpretedMode(interpretedMode); if (errorReporter != null) { cx.setErrorReporter(errorReporter); } @@ -67,10 +67,9 @@ public void setLanguageVersion(int version) { this.languageVersion = version; } - public void setOptimizationLevel(int optimizationLevel) { - Context.checkOptimizationLevel(optimizationLevel); + public void setInterpretedMode(boolean interpreted) { checkNotSealed(); - this.optimizationLevel = optimizationLevel; + this.interpretedMode = interpreted; } public void setErrorReporter(ErrorReporter errorReporter) { diff --git a/rhino-tools/src/main/resources/org/mozilla/javascript/tools/resources/Messages.properties b/rhino-tools/src/main/resources/org/mozilla/javascript/tools/resources/Messages.properties index 154f1e5597..c86cf8d96e 100644 --- a/rhino-tools/src/main/resources/org/mozilla/javascript/tools/resources/Messages.properties +++ b/rhino-tools/src/main/resources/org/mozilla/javascript/tools/resources/Messages.properties @@ -34,7 +34,8 @@ msg.shell.usage =\ \ -w Enable warnings.\n\ \ -version 100|110|120|130|140|150|160|170|180|200\n\ \ Set a specific language version.\n\ - \ -opt [-1|0-9] Set optimization level.\n\ + \ -int \n\ + \ -interpreted Run in interpreted mode.\n\ \ -f script-filename Execute script file, or "-" for interactive.\n\ \ -e script-source Evaluate inline script.\n\ \ -modules [uri] Add a single path or URL element to the CommonJS\n\ @@ -114,8 +115,6 @@ Usage: java {0} [OPTION]... SOURCE...\n\ Valid options are: \n\ \ -version VERSION Use the specified language version.\n\ \ VERSION should be one of 100|110|120|130|140|150|160|170.\n\ -\ -opt LEVEL Use optimization with the specified level.\n\ -\ LEVEL should be one of 0..9.\n\ \ -debug, -g Include debug information.\n\ \ -nosource Do not include source to function objects.\n\ \ It makes f.toString() useless and violates ECMAScript\n\ diff --git a/rhino/src/main/java/org/mozilla/javascript/CompilerEnvirons.java b/rhino/src/main/java/org/mozilla/javascript/CompilerEnvirons.java index d6bffde15f..fa9ecb9bf0 100644 --- a/rhino/src/main/java/org/mozilla/javascript/CompilerEnvirons.java +++ b/rhino/src/main/java/org/mozilla/javascript/CompilerEnvirons.java @@ -17,7 +17,7 @@ public CompilerEnvirons() { reservedKeywordAsIdentifier = true; allowMemberExprAsFunctionName = false; xmlAvailable = true; - optimizationLevel = 0; + interpretedMode = false; generatingSource = true; strictMode = false; warningAsError = false; @@ -35,7 +35,7 @@ public void initFromContext(Context cx) { warningAsError = cx.hasFeature(Context.FEATURE_WARNING_AS_ERROR); xmlAvailable = cx.hasFeature(Context.FEATURE_E4X); - optimizationLevel = cx.getOptimizationLevel(); + interpretedMode = cx.isInterpretedMode(); generatingSource = cx.isGeneratingSource(); activationNames = cx.activationNames; @@ -98,13 +98,30 @@ public void setXmlAvailable(boolean flag) { xmlAvailable = flag; } + /** + * @deprecated As of 1.8.0, use {@link #isInterpretedMode()} instead. + */ + @Deprecated public final int getOptimizationLevel() { - return optimizationLevel; + return interpretedMode ? -1 : 9; + } + + public final boolean isInterpretedMode() { + return interpretedMode; } + /** + * @deprecated As of 1.8.0, use {@link #setInterpretedMode(boolean)} instead. + */ + @Deprecated + @SuppressWarnings("deprecation") public void setOptimizationLevel(int level) { Context.checkOptimizationLevel(level); - this.optimizationLevel = level; + interpretedMode = (level < 0); + } + + public void setInterpretedMode(boolean interpretedMode) { + this.interpretedMode = interpretedMode; } public final boolean isGeneratingSource() { @@ -255,7 +272,7 @@ public static CompilerEnvirons ideEnvirons() { private boolean reservedKeywordAsIdentifier; private boolean allowMemberExprAsFunctionName; private boolean xmlAvailable; - private int optimizationLevel; + private boolean interpretedMode; private boolean generatingSource; private boolean strictMode; private boolean warningAsError; diff --git a/rhino/src/main/java/org/mozilla/javascript/Context.java b/rhino/src/main/java/org/mozilla/javascript/Context.java index a28a6e75fb..221e607647 100644 --- a/rhino/src/main/java/org/mozilla/javascript/Context.java +++ b/rhino/src/main/java/org/mozilla/javascript/Context.java @@ -393,7 +393,7 @@ protected Context(ContextFactory factory) { } this.factory = factory; version = VERSION_DEFAULT; - optimizationLevel = codegenClass != null ? 0 : -1; + interpretedMode = codegenClass == null; maximumInterpreterStackDepth = Integer.MAX_VALUE; } @@ -1893,14 +1893,11 @@ public final boolean isGeneratingDebug() { /** * Specify whether or not debug information should be generated. * - *

Setting the generation of debug information on will set the optimization level to zero. - * * @since 1.3 */ public final void setGeneratingDebug(boolean generatingDebug) { if (sealed) onSealedMutation(); generatingDebugChanged = true; - if (generatingDebug && getOptimizationLevel() > 0) setOptimizationLevel(0); this.generatingDebug = generatingDebug; } @@ -1930,42 +1927,62 @@ public final void setGeneratingSource(boolean generatingSource) { /** * Get the current optimization level. * - *

The optimization level is expressed as an integer between -1 and 9. + *

The optimization level is expressed as an integer between -1 and 9. Rhino now has only one + * optimization level, and we will always return either -1 or 9 here. * * @since 1.3 + * @deprecated As of 1.8.0, use {@link #isInterpretedMode()} instead. */ + @Deprecated public final int getOptimizationLevel() { - return optimizationLevel; + return interpretedMode ? -1 : 9; + } + + /** + * Return whether Rhino is running in interpreted mode. In this mode, Rhino does not generate + * bytecode, but runs much more slowly. Some platforms, notably Android, use this mode. + */ + public final boolean isInterpretedMode() { + return interpretedMode; } /** * Set the current optimization level. * - *

The optimization level is expected to be an integer between -1 and 9. Any negative values - * will be interpreted as -1, and any values greater than 9 will be interpreted as 9. An - * optimization level of -1 indicates that interpretive mode will always be used. Levels 0 - * through 9 indicate that class files may be generated. Higher optimization levels trade off - * compile time performance for runtime performance. The optimizer level can't be set greater - * than -1 if the optimizer package doesn't exist at run time. + *

This function previously set multiple modes today. Any value less than zero sets up + * interpreted mode, and otherwise we run in compiled mode. * * @param optimizationLevel an integer indicating the level of optimization to perform * @since 1.3 + * @deprecated As of 1.8.0, use {@link #setInterpretedMode(boolean)} instead. */ + @Deprecated public final void setOptimizationLevel(int optimizationLevel) { + setInterpretedMode(optimizationLevel < 0); + } + + /** + * Set Rhino to run in interpreted mode. In this mode, Rhino does not generate bytecode, but + * runs much more slowly. Some platforms, notably Android, must use this mode because they + * cannot generate bytecode. + */ + public final void setInterpretedMode(boolean interpretedMode) { if (sealed) onSealedMutation(); - if (optimizationLevel == -2) { - // To be compatible with Cocoon fork - optimizationLevel = -1; - } - checkOptimizationLevel(optimizationLevel); - if (codegenClass == null) optimizationLevel = -1; - this.optimizationLevel = optimizationLevel; + this.interpretedMode = interpretedMode; } + /** + * @deprecated As of 1.8.0, no longer has any use. + */ + @Deprecated public static boolean isValidOptimizationLevel(int optimizationLevel) { return -1 <= optimizationLevel && optimizationLevel <= 9; } + /** + * @deprecated As of 1.8.0, no longer has any use. + */ + @Deprecated public static void checkOptimizationLevel(int optimizationLevel) { if (isValidOptimizationLevel(optimizationLevel)) { return; @@ -2006,9 +2023,9 @@ public final int getMaximumInterpreterStackDepth() { */ public final void setMaximumInterpreterStackDepth(int max) { if (sealed) onSealedMutation(); - if (optimizationLevel != -1) { + if (!interpretedMode) { throw new IllegalStateException( - "Cannot set maximumInterpreterStackDepth when optimizationLevel != -1"); + "Cannot set maximumInterpreterStackDepth outside interpreted mode"); } if (max < 1) { throw new IllegalArgumentException( @@ -2569,7 +2586,7 @@ private static void notifyDebugger_r(Context cx, DebuggableScript dscript, Strin private Evaluator createCompiler() { Evaluator result = null; - if (optimizationLevel >= 0 && codegenClass != null) { + if (!interpretedMode && codegenClass != null) { result = (Evaluator) Kit.newInstanceOrNull(codegenClass); } if (result == null) { @@ -2718,7 +2735,7 @@ public static boolean isCurrentContextStrict() { private boolean generatingDebugChanged; private boolean generatingSource = true; boolean useDynamicScope; - private int optimizationLevel; + private boolean interpretedMode; private int maximumInterpreterStackDepth; private WrapFactory wrapFactory; Debugger debugger; diff --git a/rhino/src/main/java/org/mozilla/javascript/ScriptRuntime.java b/rhino/src/main/java/org/mozilla/javascript/ScriptRuntime.java index a810d8cd13..a816f5087b 100644 --- a/rhino/src/main/java/org/mozilla/javascript/ScriptRuntime.java +++ b/rhino/src/main/java/org/mozilla/javascript/ScriptRuntime.java @@ -168,7 +168,7 @@ public static ScriptableObject initSafeStandardObjects( NativeGlobal.init(cx, scope, sealed); NativeArray.init(cx, scope, sealed); - if (cx.getOptimizationLevel() > 0) { + if (!cx.isInterpretedMode()) { // When optimizing, attempt to fulfill all requests for new Array(N) // with a higher threshold before switching to a sparse // representation diff --git a/rhino/src/main/java/org/mozilla/javascript/optimizer/Codegen.java b/rhino/src/main/java/org/mozilla/javascript/optimizer/Codegen.java index f079a071a8..08bd386616 100644 --- a/rhino/src/main/java/org/mozilla/javascript/optimizer/Codegen.java +++ b/rhino/src/main/java/org/mozilla/javascript/optimizer/Codegen.java @@ -177,10 +177,10 @@ public byte[] compileToClassFile( private void transform(ScriptNode tree) { initOptFunctions_r(tree); - int optLevel = compilerEnv.getOptimizationLevel(); + boolean optimizing = !compilerEnv.isInterpretedMode(); Map possibleDirectCalls = null; - if (optLevel > 0) { + if (optimizing) { /* * Collect all of the contained functions into a hashtable * so that the call optimizer can access the class name & parameter @@ -210,7 +210,7 @@ private void transform(ScriptNode tree) { OptTransformer ot = new OptTransformer(possibleDirectCalls, directCallTargets); ot.transform(tree, compilerEnv); - if (optLevel > 0) { + if (optimizing) { new Optimizer().optimize(tree); } } diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/Bug482203Test.java b/rhino/src/test/java/org/mozilla/javascript/tests/Bug482203Test.java index 658c09bcad..26de80223a 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/Bug482203Test.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/Bug482203Test.java @@ -19,7 +19,7 @@ public class Bug482203Test { @Test public void jsApi() throws Exception { try (Context cx = Context.enter()) { - cx.setOptimizationLevel(-1); + cx.setInterpretedMode(true); InputStreamReader in = new InputStreamReader(Bug482203Test.class.getResourceAsStream("Bug482203.js")); Script script = cx.compileReader(in, "", 1, null); @@ -42,7 +42,7 @@ public void jsApi() throws Exception { @Test public void javaApi() throws Exception { try (Context cx = Context.enter()) { - cx.setOptimizationLevel(-1); + cx.setInterpretedMode(true); InputStreamReader in = new InputStreamReader(Bug482203Test.class.getResourceAsStream("Bug482203.js")); Script script = cx.compileReader(in, "", 1, null); diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/Bug685403Test.java b/rhino/src/test/java/org/mozilla/javascript/tests/Bug685403Test.java index 1624eb201c..9c9f49748a 100755 --- a/rhino/src/test/java/org/mozilla/javascript/tests/Bug685403Test.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/Bug685403Test.java @@ -28,7 +28,7 @@ public class Bug685403Test { @Before public void setUp() { cx = Context.enter(); - cx.setOptimizationLevel(-1); + cx.setInterpretedMode(true); scope = cx.initStandardObjects(); } diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/Bug708801Test.java b/rhino/src/test/java/org/mozilla/javascript/tests/Bug708801Test.java index a8e884c373..3022e49fa9 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/Bug708801Test.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/Bug708801Test.java @@ -37,13 +37,10 @@ public class Bug708801Test { private static final ContextFactory factory = new ContextFactory() { - static final int COMPILER_MODE = 9; - @Override protected Context makeContext() { Context cx = super.makeContext(); cx.setLanguageVersion(Context.VERSION_1_8); - cx.setOptimizationLevel(COMPILER_MODE); return cx; } }; diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/Bug782363Test.java b/rhino/src/test/java/org/mozilla/javascript/tests/Bug782363Test.java index 92c72c8992..16ff9a19e9 100755 --- a/rhino/src/test/java/org/mozilla/javascript/tests/Bug782363Test.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/Bug782363Test.java @@ -41,7 +41,6 @@ public class Bug782363Test { public void setUp() { cx = Context.enter(); cx.setLanguageVersion(Context.VERSION_1_8); - cx.setOptimizationLevel(9); } @After diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/CatchTest.java b/rhino/src/test/java/org/mozilla/javascript/tests/CatchTest.java index ee086f6298..50df20797a 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/CatchTest.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/CatchTest.java @@ -50,7 +50,7 @@ public String doCatchWrappedException(final ClassShutter shutter) throws Excepti return factory.call( context -> { - context.setOptimizationLevel(-1); + context.setInterpretedMode(true); if (shutter != null) { context.setClassShutter(shutter); } diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/CodegenTest.java b/rhino/src/test/java/org/mozilla/javascript/tests/CodegenTest.java index 2f72ee02dc..ac8f64d057 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/CodegenTest.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/CodegenTest.java @@ -32,7 +32,7 @@ public void largeMethod() { _cx -> { Script script = _cx.compileString(scriptSource.toString(), "test-source", 1, null); - if (_cx.getOptimizationLevel() > -1) { + if (!_cx.isInterpretedMode()) { Assert.assertTrue( script.getClass().getName(), script.getClass() @@ -119,7 +119,7 @@ public void largeVarList() { _cx -> { Script script = _cx.compileString(scriptSource.toString(), "test-source", 1, null); - if (_cx.getOptimizationLevel() > -1) { + if (!_cx.isInterpretedMode()) { Assert.assertTrue( script.getClass().getName(), script.getClass() @@ -188,7 +188,7 @@ public void largeLocalVarList() { _cx -> { Script script = _cx.compileString(scriptSource.toString(), "test-source", 1, null); - if (_cx.getOptimizationLevel() > -1) { + if (!_cx.isInterpretedMode()) { Assert.assertTrue( script.getClass().getName(), script.getClass() @@ -259,7 +259,7 @@ public void tooManyMethods() { _cx -> { Script script = _cx.compileString(scriptSource.toString(), "test-source", 1, null); - if (_cx.getOptimizationLevel() > -1) { + if (!_cx.isInterpretedMode()) { Assert.assertTrue( script.getClass().getName(), script.getClass() diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/ContinuationsApiTest.java b/rhino/src/test/java/org/mozilla/javascript/tests/ContinuationsApiTest.java index 1ae2e5607a..0e0d0d60fb 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/ContinuationsApiTest.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/ContinuationsApiTest.java @@ -71,7 +71,7 @@ public String h() { public void setUp() { try (Context cx = Context.enter()) { globalScope = cx.initStandardObjects(); - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode globalScope.put("myObject", globalScope, Context.javaToJS(new MyClass(), globalScope)); } } @@ -80,7 +80,7 @@ public void setUp() { public void scriptWithContinuations() { try (Context cx = Context.enter()) { try { - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode Script script = cx.compileString("myObject.f(3) + 1;", "test source", 1, null); cx.executeScriptWithContinuations(script, globalScope); fail("Should throw ContinuationPending"); @@ -99,7 +99,7 @@ public void scriptWithContinuations() { public void scriptWithMultipleContinuations() { try (Context cx = Context.enter()) { try { - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode Script script = cx.compileString( "myObject.f(3) + myObject.g(3) + 2;", "test source", 1, null); @@ -129,7 +129,7 @@ public void scriptWithMultipleContinuations() { public void scriptWithNestedContinuations() { try (Context cx = Context.enter()) { try { - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode Script script = cx.compileString( "myObject.g( myObject.f(1) ) + 2;", "test source", 1, null); @@ -159,7 +159,7 @@ public void scriptWithNestedContinuations() { public void functionWithContinuations() { try (Context cx = Context.enter()) { try { - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode cx.evaluateString( globalScope, "function f(a) { return myObject.f(a); }", @@ -189,7 +189,7 @@ public void functionWithContinuations() { @Test public void errorOnEvalCall() { try (Context cx = Context.enter()) { - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode Script script = cx.compileString("eval('myObject.f(3);');", "test source", 1, null); cx.executeScriptWithContinuations(script, globalScope); fail("Should throw IllegalStateException"); @@ -204,7 +204,7 @@ public void errorOnEvalCall() { public void serializationWithContinuations() throws IOException, ClassNotFoundException { try (Context cx = Context.enter()) { try { - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode cx.evaluateString( globalScope, "function f(a) { var k = myObject.f(a); var t = []; return k; }", @@ -255,13 +255,13 @@ public void continuationsPrototypesAndSerialization() try (Context cx = Context.enter()) { globalScope = cx.initStandardObjects(); - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode globalScope.put( "myObject", globalScope, Context.javaToJS(new MyClass(), globalScope)); } try (Context cx = Context.enter()) { - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode cx.evaluateString( globalScope, "function f(a) { Number.prototype.blargh = function() {return 'foo';}; var k = myObject.f(a); var t = []; return new Number(8).blargh(); }", @@ -315,12 +315,12 @@ public void continuationsInlineFunctionsSerialization() try (Context cx = Context.enter()) { globalScope = cx.initStandardObjects(); - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode globalScope.put("myObject", globalScope, Context.javaToJS(new MyClass(), globalScope)); } try (Context cx = Context.enter()) { - cx.setOptimizationLevel(-1); // must use interpreter mode + cx.setInterpretedMode(true); // must use interpreter mode try { cx.evaluateString( diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/DynamicScopeTest.java b/rhino/src/test/java/org/mozilla/javascript/tests/DynamicScopeTest.java index f35d7d11be..8cdbc2e788 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/DynamicScopeTest.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/DynamicScopeTest.java @@ -38,7 +38,6 @@ protected boolean hasFeature(Context cx, int featureIndex) { protected Context makeContext() { Context cx = super.makeContext(); cx.setLanguageVersion(Context.VERSION_ES6); - cx.setOptimizationLevel(0); return cx; } } diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/ErrorPropertiesTest.java b/rhino/src/test/java/org/mozilla/javascript/tests/ErrorPropertiesTest.java index 636655becb..e6add2db78 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/ErrorPropertiesTest.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/ErrorPropertiesTest.java @@ -20,15 +20,14 @@ public class ErrorPropertiesTest { static final String LS = System.getProperty("line.separator"); private void testScriptStackTrace(final String script, final String expectedStackTrace) { - testScriptStackTrace(script, expectedStackTrace, -1); - testScriptStackTrace(script, expectedStackTrace, 0); - testScriptStackTrace(script, expectedStackTrace, 1); + testScriptStackTrace(script, expectedStackTrace, false); + testScriptStackTrace(script, expectedStackTrace, true); } private void testScriptStackTrace( - final String script, final String expectedStackTrace, final int optimizationLevel) { + final String script, final String expectedStackTrace, final boolean interpreted) { try { - Utils.executeScript(script, optimizationLevel); + Utils.executeScript(script, interpreted); } catch (final RhinoException e) { Assert.assertEquals(expectedStackTrace, e.getScriptStackTrace()); } diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/Issue385Test.java b/rhino/src/test/java/org/mozilla/javascript/tests/Issue385Test.java index 802be5e4aa..9e1746796b 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/Issue385Test.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/Issue385Test.java @@ -29,7 +29,7 @@ public void setUp() { cx.setLanguageVersion(Context.VERSION_1_8); // errors are reported in the parsing stage, // optimization level doesn't matter - cx.setOptimizationLevel(-1); + cx.setInterpretedMode(true); } @After diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/ScriptRuntimeEquivalentValuesTest.java b/rhino/src/test/java/org/mozilla/javascript/tests/ScriptRuntimeEquivalentValuesTest.java index 7dedbf2dad..7638cc24bd 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/ScriptRuntimeEquivalentValuesTest.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/ScriptRuntimeEquivalentValuesTest.java @@ -32,7 +32,7 @@ public void equivalentValuesUndefined() throws Exception { "test", 1, null); - assertEquals("" + cx.getOptimizationLevel(), "true true", result); + assertEquals("" + cx.isInterpretedMode(), "true true", result); return null; }); @@ -56,7 +56,7 @@ public void equivalentValuesNull() throws Exception { "test", 1, null); - assertEquals("" + cx.getOptimizationLevel(), "true true", result); + assertEquals("" + cx.isInterpretedMode(), "true true", result); return null; }); diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/ToNumberConversionsTest.java b/rhino/src/test/java/org/mozilla/javascript/tests/ToNumberConversionsTest.java index 9991962d94..1886412f36 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/ToNumberConversionsTest.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/ToNumberConversionsTest.java @@ -91,9 +91,9 @@ public class ToNumberConversionsTest { public static Collection data() { List cases = new ArrayList<>(); - for (int optLevel : Utils.DEFAULT_OPT_LEVELS) { + for (boolean interpreted : new boolean[] {false, true}) { for (Object[] test : TESTS) { - cases.add(new Object[] {test[0], test[1], optLevel}); + cases.add(new Object[] {test[0], test[1], interpreted}); } } @@ -107,7 +107,7 @@ public static Collection data() { public String source; @Parameterized.Parameter(2) - public int optLevel; + public boolean interpreted; @SuppressWarnings("ConstantConditions") private boolean execute(Context cx, Scriptable scope, String script) { @@ -120,7 +120,7 @@ private boolean execute(Context cx, Scriptable scope, String script) { @Before public void setup() { cx = Context.enter(); - cx.setOptimizationLevel(optLevel); + cx.setInterpretedMode(interpreted); cx.setLanguageVersion(Context.VERSION_ES6); scope = cx.initSafeStandardObjects(); } diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/ToNumberLegacyConversionsTest.java b/rhino/src/test/java/org/mozilla/javascript/tests/ToNumberLegacyConversionsTest.java index 427c2192da..1093b1d6bc 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/ToNumberLegacyConversionsTest.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/ToNumberLegacyConversionsTest.java @@ -97,9 +97,9 @@ public class ToNumberLegacyConversionsTest { public static Collection data() { List cases = new ArrayList<>(); - for (int optLevel : OPT_LEVELS) { + for (boolean interpreted : new boolean[] {false, true}) { for (Object[] test : TESTS) { - cases.add(new Object[] {test[0], test[1], optLevel}); + cases.add(new Object[] {test[0], test[1], interpreted}); } } @@ -113,7 +113,7 @@ public static Collection data() { public String source; @Parameterized.Parameter(2) - public int optLevel; + public boolean interpreted; @SuppressWarnings("ConstantConditions") private boolean execute(Context cx, Scriptable scope, String script) { @@ -126,7 +126,7 @@ private boolean execute(Context cx, Scriptable scope, String script) { @Before public void setup() { cx = Context.enter(); - cx.setOptimizationLevel(optLevel); + cx.setInterpretedMode(interpreted); cx.setLanguageVersion(Context.VERSION_1_8); scope = cx.initSafeStandardObjects(); } diff --git a/rhino/src/test/java/org/mozilla/javascript/tests/Utils.java b/rhino/src/test/java/org/mozilla/javascript/tests/Utils.java index 558afb7a52..87f131441b 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/Utils.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/Utils.java @@ -5,14 +5,11 @@ package org.mozilla.javascript.tests; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; import org.mozilla.javascript.Context; import org.mozilla.javascript.ContextAction; import org.mozilla.javascript.ContextFactory; -import org.mozilla.javascript.EvaluatorException; import org.mozilla.javascript.Scriptable; -import org.mozilla.javascript.ScriptableObject; /** * Misc utilities to make test code easier. @@ -21,38 +18,31 @@ * @author Ronald Brill */ public class Utils { - /** The default set of levels to run tests at. */ - public static final int[] DEFAULT_OPT_LEVELS = new int[] {-1, 0, 9}; - /** Runs the action successively with all available optimization levels */ public static void runWithAllOptimizationLevels(final ContextAction action) { - for (int level : getTestOptLevels()) { - runWithOptimizationLevel(action, level); - } + runWithMode(action, false); + runWithMode(action, true); } /** Runs the action successively with all available optimization levels */ public static void runWithAllOptimizationLevels( final ContextFactory contextFactory, final ContextAction action) { - for (int level : getTestOptLevels()) { - runWithOptimizationLevel(contextFactory, action, level); - } + runWithMode(contextFactory, action, false); + runWithMode(contextFactory, action, true); } - /** Runs the provided action at the given optimization level */ - public static void runWithOptimizationLevel( - final ContextAction action, final int optimizationLevel) { - runWithOptimizationLevel(new ContextFactory(), action, optimizationLevel); + /** Runs the provided action at the given interpretation mode */ + public static void runWithMode(final ContextAction action, final boolean interpretedMode) { + runWithMode(new ContextFactory(), action, interpretedMode); } /** Runs the provided action at the given optimization level */ - public static void runWithOptimizationLevel( + public static void runWithMode( final ContextFactory contextFactory, final ContextAction action, - final int optimizationLevel) { - + final boolean interpretedMode) { try (final Context cx = contextFactory.enterContext()) { - cx.setOptimizationLevel(optimizationLevel); + cx.setInterpretedMode(interpretedMode); action.run(cx); } } @@ -62,25 +52,13 @@ public static void runWithOptimizationLevel( * * @param script the script code */ - static void executeScript(final String script, final int optimizationLevel) { - Utils.runWithOptimizationLevel( + static void executeScript(String script, boolean interpreted) { + Utils.runWithMode( cx -> { final Scriptable scope = cx.initStandardObjects(); return cx.evaluateString(scope, script, "myScript.js", 1, null); }, - optimizationLevel); - } - - /** - * If the TEST_OPTLEVEL system property is set, then return an array containing only that one - * integer. Otherwise, return an array of the typical opt levels that we expect for testing. - */ - public static int[] getTestOptLevels() { - String overriddenLevel = System.getProperty("TEST_OPTLEVEL"); - if (overriddenLevel != null && !overriddenLevel.isEmpty()) { - return new int[] {Integer.parseInt(overriddenLevel)}; - } - return DEFAULT_OPT_LEVELS; + interpreted); } public static void assertWithAllOptimizationLevels(final Object expected, final String script) { @@ -106,21 +84,4 @@ public static void assertWithAllOptimizationLevelsES6( return null; }); } - - public static void assertEvaluatorExceptionES6(String expectedMessage, String js) { - Utils.runWithAllOptimizationLevels( - cx -> { - cx.setLanguageVersion(Context.VERSION_ES6); - ScriptableObject scope = cx.initStandardObjects(); - - try { - cx.evaluateString(scope, js, "test", 1, null); - fail("EvaluatorException expected"); - } catch (EvaluatorException e) { - assertEquals(expectedMessage, e.getMessage()); - } - - return null; - }); - } } diff --git a/tests/build.gradle b/tests/build.gradle index dd1fefc86c..fe40562d7b 100644 --- a/tests/build.gradle +++ b/tests/build.gradle @@ -17,6 +17,14 @@ dependencies { testImplementation("org.slf4j:slf4j-simple:2.0.16") } +tasks.withType(JavaCompile) { + // We have deprecated things, like "optimization level", and have + // not yet removed them from all tests, so turn this warning off. + options.compilerArgs = [ + '-Xlint:-deprecation' + ] +} + test { testLogging.showStandardStreams = true maxHeapSize = "1g" diff --git a/tests/src/test/java/org/mozilla/javascript/drivers/JsDriver.java b/tests/src/test/java/org/mozilla/javascript/drivers/JsDriver.java index d1374d309c..3c8dcad98a 100644 --- a/tests/src/test/java/org/mozilla/javascript/drivers/JsDriver.java +++ b/tests/src/test/java/org/mozilla/javascript/drivers/JsDriver.java @@ -624,7 +624,9 @@ void run(Arguments arguments) throws Throwable { } ShellContextFactory factory = new ShellContextFactory(); - factory.setOptimizationLevel(arguments.getOptimizationLevel()); + if (arguments.getOptimizationLevel() < 0) { + factory.setInterpretedMode(true); + } factory.setStrictMode(arguments.isStrict()); File path = arguments.getTestsPath(); diff --git a/tests/src/test/java/org/mozilla/javascript/tests/DoctestFeature18EnabledTest.java b/tests/src/test/java/org/mozilla/javascript/tests/DoctestFeature18EnabledTest.java index 01affcfba2..f65ce4334d 100644 --- a/tests/src/test/java/org/mozilla/javascript/tests/DoctestFeature18EnabledTest.java +++ b/tests/src/test/java/org/mozilla/javascript/tests/DoctestFeature18EnabledTest.java @@ -17,8 +17,8 @@ @RunWith(Parameterized.class) public class DoctestFeature18EnabledTest extends DoctestsTest { - public DoctestFeature18EnabledTest(String name, String source, int optimizationLevel) { - super(name, source, optimizationLevel); + public DoctestFeature18EnabledTest(String name, String source, boolean interpretedMode) { + super(name, source, interpretedMode); } @Parameters(name = "{0}") @@ -26,7 +26,7 @@ public static Collection singleDoctest() throws IOException { List result = new ArrayList(); File f = new File(DoctestsTest.baseDirectory, "feature18enabled.doctest"); String contents = DoctestsTest.loadFile(f); - result.add(new Object[] {f.getName(), contents, -1}); + result.add(new Object[] {f.getName(), contents, false}); return result; } @@ -45,7 +45,7 @@ protected boolean hasFeature(Context cx, int featureIndex) { }; try (Context context = contextFactory.enterContext()) { - context.setOptimizationLevel(optimizationLevel); + context.setInterpretedMode(interpretedMode); Global global = new Global(context); int testsPassed = global.runDoctest(context, global, source, name, 1); assertTrue(testsPassed > 0); diff --git a/tests/src/test/java/org/mozilla/javascript/tests/DoctestsTest.java b/tests/src/test/java/org/mozilla/javascript/tests/DoctestsTest.java index d2aeebca43..cc6f68c52a 100644 --- a/tests/src/test/java/org/mozilla/javascript/tests/DoctestsTest.java +++ b/tests/src/test/java/org/mozilla/javascript/tests/DoctestsTest.java @@ -36,12 +36,12 @@ public class DoctestsTest { static final String doctestsExtension = ".doctest"; String name; String source; - int optimizationLevel; + boolean interpretedMode; - public DoctestsTest(String name, String source, int optimizationLevel) { + public DoctestsTest(String name, String source, boolean interpretedMode) { this.name = name; this.source = source; - this.optimizationLevel = optimizationLevel; + this.interpretedMode = interpretedMode; } public static File[] getDoctestFiles() { @@ -64,15 +64,14 @@ public static String loadFile(File f) throws IOException { return new String(buf); } - @Parameters(name = "{0} opt:{2}") + @Parameters(name = "{0} interpreted:{2}") public static Collection doctestValues() throws IOException { File[] doctests = getDoctestFiles(); List result = new ArrayList(); for (File f : doctests) { String contents = loadFile(f); - result.add(new Object[] {f.getName(), contents, -1}); - result.add(new Object[] {f.getName(), contents, 0}); - result.add(new Object[] {f.getName(), contents, 9}); + result.add(new Object[] {f.getName(), contents, false}); + result.add(new Object[] {f.getName(), contents, true}); } return result; } @@ -90,13 +89,14 @@ public static Collection singleDoctest() throws IOException { public void runDoctest() throws Exception { ContextFactory factory = ContextFactory.getGlobal(); try (Context cx = factory.enterContext()) { - cx.setOptimizationLevel(optimizationLevel); + cx.setInterpretedMode(interpretedMode); Global global = new Global(cx); // global.runDoctest throws an exception on any failure int testsPassed = global.runDoctest(cx, global, source, name, 1); assertTrue(testsPassed > 0); } catch (Exception ex) { - System.out.println(name + "(" + optimizationLevel + "): FAILED due to " + ex); + System.out.println( + name + "(interpreted = " + interpretedMode + "): FAILED due to " + ex); throw ex; } } diff --git a/tests/src/test/java/org/mozilla/javascript/tests/MozillaSuiteTest.java b/tests/src/test/java/org/mozilla/javascript/tests/MozillaSuiteTest.java index 070e86b404..24bb50f3ab 100644 --- a/tests/src/test/java/org/mozilla/javascript/tests/MozillaSuiteTest.java +++ b/tests/src/test/java/org/mozilla/javascript/tests/MozillaSuiteTest.java @@ -44,13 +44,11 @@ @RunWith(Parameterized.class) public class MozillaSuiteTest { private final File jsFile; - private final int optimizationLevel; + private final boolean interpretedMode; - private static final int[] OPT_LEVELS = Utils.getTestOptLevels(); - - public MozillaSuiteTest(File jsFile, int optimizationLevel) { + public MozillaSuiteTest(File jsFile, boolean interpretedMode) { this.jsFile = jsFile; - this.optimizationLevel = optimizationLevel; + this.interpretedMode = interpretedMode; ShellTest.cacheFramework(); } @@ -83,14 +81,14 @@ public static File getTestDir() throws IOException { return testDir; } - public static String getTestFilename(int optimizationLevel) { - return "opt" + optimizationLevel + ".tests"; + public static String getTestFilename(boolean interpretedMode) { + return interpretedMode ? "interpreted.tests" : "compiled.tests"; } - public static File[] getTestFiles(int optimizationLevel) throws IOException { + public static File[] getTestFiles(boolean interpretedMode) throws IOException { File testDir = getTestDir(); String[] tests = - TestUtils.loadTestsFromResource("/" + getTestFilename(optimizationLevel), null); + TestUtils.loadTestsFromResource("/" + getTestFilename(interpretedMode), null); Arrays.sort(tests); File[] files = new File[tests.length]; for (int i = 0; i < files.length; i++) { @@ -115,11 +113,10 @@ public static String loadFile(File f) throws IOException { @Parameters(name = "{index}, js={0}, opt={1}") public static Collection mozillaSuiteValues() throws IOException { List result = new ArrayList(); - int[] optLevels = OPT_LEVELS; - for (int i = 0; i < optLevels.length; i++) { - File[] tests = getTestFiles(optLevels[i]); + for (boolean im : new boolean[] {false, true}) { + File[] tests = getTestFiles(im); for (File f : tests) { - result.add(new Object[] {f, optLevels[i]}); + result.add(new Object[] {f, im}); } } return result; @@ -129,12 +126,11 @@ public static Collection mozillaSuiteValues() throws IOException { // @Parameters(name = "{index}, js={0}, opt={1}") public static Collection singleDoctest() throws IOException { final String SINGLE_TEST_FILE = "..."; - final int[] SINGLE_TEST_OPTIMIZATION_LEVEL = OPT_LEVELS; List result = new ArrayList(); - for (int optLevel : SINGLE_TEST_OPTIMIZATION_LEVEL) { + for (boolean im : new boolean[] {false, true}) { File f = new File(getTestDir(), SINGLE_TEST_FILE); - result.add(new Object[] {f, optLevel}); + result.add(new Object[] {f, im}); } return result; } @@ -194,7 +190,7 @@ public void runMozillaTest() throws Exception { // System.out.println("Test \"" + jsFile + "\" running under optimization level " + // optimizationLevel); final ShellContextFactory shellContextFactory = new ShellContextFactory(); - shellContextFactory.setOptimizationLevel(optimizationLevel); + shellContextFactory.setInterpretedMode(interpretedMode); shellContextFactory.setLanguageVersion(Context.VERSION_1_8); ShellTestParameters params = new ShellTestParameters(); JunitStatus status = new JunitStatus(); @@ -208,8 +204,7 @@ public void runMozillaTest() throws Exception { public static void main(String[] args) throws IOException { try (PrintStream out = new PrintStream("fix-tests-files.sh")) { try { - for (int i = 0; i < OPT_LEVELS.length; i++) { - int optLevel = OPT_LEVELS[i]; + for (boolean im : new boolean[] {false, true}) { File testDir = getTestDir(); File[] allTests = TestUtils.recursiveListFiles( @@ -222,13 +217,13 @@ public boolean accept(File pathname) { } }); HashSet diff = new HashSet(Arrays.asList(allTests)); - File testFiles[] = getTestFiles(optLevel); + File testFiles[] = getTestFiles(im); diff.removeAll(Arrays.asList(testFiles)); ArrayList skippedPassed = new ArrayList(); int absolutePathLength = testDir.getAbsolutePath().length() + 1; for (File testFile : diff) { try { - (new MozillaSuiteTest(testFile, optLevel)).runMozillaTest(); + (new MozillaSuiteTest(testFile, im)).runMozillaTest(); // strip off testDir String canonicalized = testFile.getAbsolutePath().substring(absolutePathLength); @@ -242,7 +237,7 @@ public boolean accept(File pathname) { // skipped but now pass. Print out shell commands to update the // appropriate *.tests file. if (skippedPassed.size() > 0) { - out.println("cat >> " + getTestFilename(optLevel) + " <> " + getTestFilename(im) + " < test262SuiteValues() throws IOException { RESULT_TRACKERS.computeIfAbsent( new Test262Case(testFile, null, null, null, false, null, null), k -> new TestResultTracker(comment)); - tracker.setExpectations(-2, true, false, false, true); + tracker.setExpectations(TestMode.SKIPPED, true, false, false, true); continue; } } @@ -853,7 +853,7 @@ public static Collection test262SuiteValues() throws IOException { RESULT_TRACKERS.computeIfAbsent( testCase, k -> new TestResultTracker(comment)); tracker.setExpectations( - -2, + TestMode.SKIPPED, true, testCase.hasFlag(FLAG_ONLY_STRICT), testCase.hasFlag(FLAG_NO_STRICT), @@ -870,7 +870,7 @@ public static Collection test262SuiteValues() throws IOException { RESULT_TRACKERS.computeIfAbsent( testCase, k -> new TestResultTracker(comment)); tracker.setExpectations( - -2, + TestMode.SKIPPED, true, testCase.hasFlag(FLAG_ONLY_STRICT), testCase.hasFlag(FLAG_NO_STRICT), @@ -880,17 +880,17 @@ public static Collection test262SuiteValues() throws IOException { continue; } - for (int optLevel : OPT_LEVELS) { + for (TestMode testMode : new TestMode[] {TestMode.INTERPRETED, TestMode.COMPILED}) { if (!testCase.hasFlag(FLAG_ONLY_STRICT) || testCase.hasFlag(FLAG_RAW)) { result.add( new Object[] { - caseShortPath, optLevel, false, testCase, markedAsFailing + caseShortPath, testMode, false, testCase, markedAsFailing }); TestResultTracker tracker = RESULT_TRACKERS.computeIfAbsent( testCase, k -> new TestResultTracker(comment)); tracker.setExpectations( - optLevel, + testMode, false, testCase.hasFlag(FLAG_ONLY_STRICT), testCase.hasFlag(FLAG_NO_STRICT), @@ -900,13 +900,13 @@ public static Collection test262SuiteValues() throws IOException { if (!testCase.hasFlag(FLAG_NO_STRICT) && !testCase.hasFlag(FLAG_RAW)) { result.add( new Object[] { - caseShortPath, optLevel, true, testCase, markedAsFailing + caseShortPath, testMode, true, testCase, markedAsFailing }); TestResultTracker tracker = RESULT_TRACKERS.computeIfAbsent( testCase, k -> new TestResultTracker(comment)); tracker.setExpectations( - optLevel, + testMode, true, testCase.hasFlag(FLAG_ONLY_STRICT), testCase.hasFlag(FLAG_NO_STRICT), @@ -1014,9 +1014,14 @@ static Test262Case fromSource(File testFile) throws IOException { } } + private enum TestMode { + INTERPRETED, + COMPILED, + SKIPPED, + } + private static class TestResultTracker { - private Set strictOptLevel = new HashSet<>(); - private Set nonStrictOptLevel = new HashSet<>(); + private Set modes = new HashSet<>(); private boolean onlyStrict; private boolean noStrict; private boolean expectedFailure; @@ -1026,43 +1031,40 @@ private static class TestResultTracker { this.comment = comment; } + private static String makeKey(TestMode mode, boolean useStrict) { + return mode.name().toLowerCase() + '-' + (useStrict ? "strict" : "non-strict"); + } + public void setExpectations( - int optLevel, + TestMode mode, boolean useStrict, boolean onlyStrict, boolean noStrict, boolean expectedFailure) { - if (useStrict) { - strictOptLevel.add(optLevel); - } else { - nonStrictOptLevel.add(optLevel); - } + + modes.add(makeKey(mode, useStrict)); this.onlyStrict = onlyStrict; this.noStrict = noStrict; this.expectedFailure = expectedFailure; } public boolean expectationsMet() { - return strictOptLevel.size() + nonStrictOptLevel.size() == 0; + return modes.isEmpty(); } - public void passes(int optLevel, boolean useStrict) { - if (useStrict) { - strictOptLevel.remove(optLevel); - } else { - nonStrictOptLevel.remove(optLevel); - } + public void passes(TestMode mode, boolean useStrict) { + modes.remove(makeKey(mode, useStrict)); } public String getResult(int[] optLevels, Test262Case tc) { // success on all optLevels in both strict and non-strict mode - if (strictOptLevel.size() + nonStrictOptLevel.size() == 0) { + if (modes.isEmpty()) { return null; } // Test skipped due to dependencies on unsupported features/environment - if (strictOptLevel.contains(-2)) { - List feats = new ArrayList(); + if (modes.contains("skipped-strict")) { + List feats = new ArrayList<>(); for (String feature : tc.features) { if (UNSUPPORTED_FEATURES.contains(feature)) { @@ -1082,43 +1084,12 @@ public String getResult(int[] optLevels, Test262Case tc) { } // failure on all optLevels in both strict and non-strict mode - if (strictOptLevel.size() == optLevels.length - && nonStrictOptLevel.size() == optLevels.length) { + if (modes.size() == 4) { return ""; } - // all optLevels fail only in strict - if (strictOptLevel.size() == optLevels.length && nonStrictOptLevel.size() == 0) { - return "strict"; - } - - // all optLevels fail only in non-strict - if (nonStrictOptLevel.size() == optLevels.length && strictOptLevel.size() == 0) { - return "non-strict"; - } - - // success in interpreted optLevel, but failure in all other optLevels - if ((noStrict - || (strictOptLevel.size() == optLevels.length - 1 - && !strictOptLevel.contains(-1))) - && (onlyStrict - || (nonStrictOptLevel.size() == optLevels.length - 1 - && !nonStrictOptLevel.contains(-1)))) { - return "non-interpreted"; - } - // mix of mode and optLevel successes and failures - String result = "{"; - if (!noStrict && strictOptLevel.size() > 0) { - result += "strict: " + Arrays.toString(strictOptLevel.toArray()); - } - - if (!onlyStrict && nonStrictOptLevel.size() > 0) { - result += !noStrict && strictOptLevel.size() > 0 ? ", " : ""; - result += "non-strict: " + Arrays.toString(nonStrictOptLevel.toArray()); - } - - return result + "}"; + return '{' + String.join(",", new ArrayList<>(modes)) + '}'; } } } diff --git a/tests/src/test/java/org/mozilla/javascript/tests/Utils.java b/tests/src/test/java/org/mozilla/javascript/tests/Utils.java index 0e98321506..78eee8d1a4 100644 --- a/tests/src/test/java/org/mozilla/javascript/tests/Utils.java +++ b/tests/src/test/java/org/mozilla/javascript/tests/Utils.java @@ -23,21 +23,19 @@ */ public class Utils { /** The default set of levels to run tests at. */ - public static final int[] DEFAULT_OPT_LEVELS = new int[] {-1, 0, 9}; + public static final int[] DEFAULT_OPT_LEVELS = new int[] {-1, 9}; /** Runs the action successively with all available optimization levels */ public static void runWithAllOptimizationLevels(final ContextAction action) { - for (int level : getTestOptLevels()) { - runWithOptimizationLevel(action, level); - } + runWithMode(action, false); + runWithMode(action, true); } /** Runs the action successively with all available optimization levels */ public static void runWithAllOptimizationLevels( final ContextFactory contextFactory, final ContextAction action) { - for (int level : getTestOptLevels()) { - runWithOptimizationLevel(contextFactory, action, level); - } + runWithMode(contextFactory, action, false); + runWithMode(contextFactory, action, true); } /** Runs the provided action at the given optimization level */ @@ -46,6 +44,11 @@ public static void runWithOptimizationLevel( runWithOptimizationLevel(new ContextFactory(), action, optimizationLevel); } + /** Runs the provided action at the given interpretation mode */ + public static void runWithMode(final ContextAction action, final boolean interpretedMode) { + runWithMode(new ContextFactory(), action, interpretedMode); + } + /** Runs the provided action at the given optimization level */ public static void runWithOptimizationLevel( final ContextFactory contextFactory, @@ -58,6 +61,18 @@ public static void runWithOptimizationLevel( } } + /** Runs the provided action at the given interpretation mode */ + public static void runWithMode( + final ContextFactory contextFactory, + final ContextAction action, + final boolean interpretedMode) { + + try (final Context cx = contextFactory.enterContext()) { + cx.setInterpretedMode(interpretedMode); + action.run(cx); + } + } + /** * If the TEST_OPTLEVEL system property is set, then return an array containing only that one * integer. Otherwise, return an array of the typical opt levels that we expect for testing. diff --git a/tests/src/test/resources/opt9.tests b/tests/src/test/resources/compiled.tests similarity index 99% rename from tests/src/test/resources/opt9.tests rename to tests/src/test/resources/compiled.tests index c40e448668..131859277a 100644 --- a/tests/src/test/resources/opt9.tests +++ b/tests/src/test/resources/compiled.tests @@ -1,3 +1,4 @@ +bigo-test.js e4x/Expressions/11.1.1.js e4x/Expressions/11.1.2.js e4x/Expressions/11.1.3.js @@ -1661,7 +1662,6 @@ js1_5/Regress/regress-71107.js js1_5/Regress/regress-76054.js js1_5/Regress/regress-80981.js js1_5/Regress/regress-82306.js -js1_5/Regress/regress-89443.js js1_5/Regress/regress-89474.js js1_5/Regress/regress-90445.js js1_5/Regress/regress-96526-001.js diff --git a/tests/src/test/resources/opt-1.tests b/tests/src/test/resources/interpreted.tests similarity index 100% rename from tests/src/test/resources/opt-1.tests rename to tests/src/test/resources/interpreted.tests diff --git a/tests/src/test/resources/opt0.tests b/tests/src/test/resources/opt0.tests deleted file mode 100644 index e24e326ef3..0000000000 --- a/tests/src/test/resources/opt0.tests +++ /dev/null @@ -1,2439 +0,0 @@ -bigo-test.js -e4x/Expressions/11.1.1.js -e4x/Expressions/11.1.2.js -e4x/Expressions/11.1.3.js -e4x/Expressions/11.1.4-05.js -e4x/Expressions/11.1.4-06.js -e4x/Expressions/11.1.4-07.js -e4x/Expressions/11.1.5.js -e4x/Expressions/11.2.1.js -e4x/Expressions/11.2.2.js -e4x/Expressions/11.2.3.js -e4x/Expressions/11.2.4.js -e4x/Expressions/11.3.1.js -e4x/Expressions/11.3.2.js -e4x/Expressions/11.4.1.js -e4x/Expressions/11.5.1.js -e4x/Expressions/11.6.2.js -e4x/Expressions/11.6.3.js -e4x/Expressions/regress-301545.js -e4x/Expressions/regress-302531.js -e4x/Expressions/regress-340024.js -e4x/Expressions/regress-496113.js -e4x/GC/regress-280844-2.js -e4x/GC/regress-292455.js -e4x/GC/regress-313952-01.js -e4x/GC/regress-324117.js -e4x/Namespace/13.2.1.js -e4x/Namespace/13.2.2.js -e4x/Namespace/13.2.5.js -e4x/Namespace/regress-283972.js -e4x/Namespace/regress-292863.js -e4x/Namespace/regress-350442.js -e4x/Namespace/regress-444608-02.js -e4x/Namespace/regress-444608.js -e4x/QName/13.3.1.js -e4x/QName/13.3.2.js -e4x/QName/13.3.5.js -e4x/QName/regress-373595-01.js -e4x/QName/regress-373595-02.js -e4x/QName/regress-373595-03.js -e4x/QName/regress-444608.js -e4x/Regress/regress-263934.js -e4x/Regress/regress-263935.js -e4x/Regress/regress-263936.js -e4x/Regress/regress-264369.js -e4x/Regress/regress-271545.js -e4x/Regress/regress-277650.js -e4x/Regress/regress-277664.js -e4x/Regress/regress-277683.js -e4x/Regress/regress-277779.js -e4x/Regress/regress-277935.js -e4x/Regress/regress-283349.js -e4x/Regress/regress-290056.js -e4x/Regress/regress-290499.js -e4x/Regress/regress-301553.js -e4x/Regress/regress-301573.js -e4x/Regress/regress-301596.js -e4x/Regress/regress-301692.js -e4x/Regress/regress-308111.js -e4x/Regress/regress-313799.js -e4x/Regress/regress-318922.js -e4x/Regress/regress-325425.js -e4x/Regress/regress-327691-01.js -e4x/Regress/regress-327691-02.js -e4x/Regress/regress-327697.js -e4x/Regress/regress-328249.js -e4x/Regress/regress-329257.js -e4x/Regress/regress-331664.js -e4x/Regress/regress-350206-1.js -e4x/Regress/regress-350206.js -e4x/Regress/regress-352103.js -e4x/Regress/regress-354145-01.js -e4x/Regress/regress-354145-02.js -e4x/Regress/regress-354145-03.js -e4x/Regress/regress-354145-04.js -e4x/Regress/regress-354145-05.js -e4x/Regress/regress-354145-07.js -e4x/Regress/regress-354998.js -e4x/Regress/regress-355474-02.js -e4x/Regress/regress-356238-01.js -e4x/Regress/regress-369032.js -e4x/Regress/regress-369536.js -e4x/Regress/regress-372564.js -e4x/Regress/regress-374106.js -e4x/Regress/regress-374112.js -e4x/Regress/regress-374116.js -e4x/Regress/regress-374160.js -e4x/Regress/regress-375406.js -e4x/Regress/regress-378492.js -e4x/Regress/regress-407323.js -e4x/Regress/regress-426520.js -e4x/Regress/regress-453915.js -e4x/Regress/regress-460180.js -e4x/Regress/regress-465063.js -e4x/Regress/regress-470619.js -e4x/Regress/regress-473709.js -e4x/Regress/regress-474319.js -e4x/Regress/regress-477053.js -e4x/Statements/12.1.js -e4x/Statements/12.2.js -e4x/Statements/12.3-01.js -e4x/TypeConversion/10.1.1.js -e4x/TypeConversion/10.1.2.js -e4x/TypeConversion/10.3.1.js -e4x/TypeConversion/10.3.js -e4x/TypeConversion/10.4.1.js -e4x/TypeConversion/10.4.js -e4x/Types/9.1.1.1.js -e4x/Types/9.1.1.2.js -e4x/Types/9.1.1.3.js -e4x/Types/9.1.1.6.js -e4x/Types/9.2.1.1.js -e4x/Types/9.2.1.2.js -e4x/Types/9.2.1.8.js -e4x/XML/13.4.1.js -e4x/XML/13.4.2.js -e4x/XML/13.4.3.10.js -e4x/XML/13.4.4.11.js -e4x/XML/13.4.4.12-1.js -e4x/XML/13.4.4.12.js -e4x/XML/13.4.4.13.js -e4x/XML/13.4.4.14.js -e4x/XML/13.4.4.15.js -e4x/XML/13.4.4.16.js -e4x/XML/13.4.4.18.js -e4x/XML/13.4.4.19.js -e4x/XML/13.4.4.2.js -e4x/XML/13.4.4.20.js -e4x/XML/13.4.4.21.js -e4x/XML/13.4.4.22.js -e4x/XML/13.4.4.23.js -e4x/XML/13.4.4.24.js -e4x/XML/13.4.4.25.js -e4x/XML/13.4.4.27.js -e4x/XML/13.4.4.29.js -e4x/XML/13.4.4.3.js -e4x/XML/13.4.4.30.js -e4x/XML/13.4.4.31.js -e4x/XML/13.4.4.32-01.js -e4x/XML/13.4.4.32.js -e4x/XML/13.4.4.33.js -e4x/XML/13.4.4.34.js -e4x/XML/13.4.4.35.js -e4x/XML/13.4.4.36.js -e4x/XML/13.4.4.37.js -e4x/XML/13.4.4.38.js -e4x/XML/13.4.4.39.js -e4x/XML/13.4.4.4.js -e4x/XML/13.4.4.40.js -e4x/XML/13.4.4.5.js -e4x/XML/13.4.4.6.js -e4x/XML/13.4.4.7.js -e4x/XML/13.4.4.8.js -e4x/XML/13.4.4.9.js -e4x/XML/regress-291930.js -e4x/XML/regress-324688.js -e4x/XML/regress-336921.js -e4x/XMLList/13.5.1.js -e4x/XMLList/13.5.2.js -e4x/XMLList/13.5.4.10.js -e4x/XMLList/13.5.4.11.js -e4x/XMLList/13.5.4.12.js -e4x/XMLList/13.5.4.13.js -e4x/XMLList/13.5.4.14.js -e4x/XMLList/13.5.4.15.js -e4x/XMLList/13.5.4.16.js -e4x/XMLList/13.5.4.17.js -e4x/XMLList/13.5.4.18.js -e4x/XMLList/13.5.4.19.js -e4x/XMLList/13.5.4.2.js -e4x/XMLList/13.5.4.20.js -e4x/XMLList/13.5.4.21.js -e4x/XMLList/13.5.4.22.js -e4x/XMLList/13.5.4.3.js -e4x/XMLList/13.5.4.4.js -e4x/XMLList/13.5.4.5.js -e4x/XMLList/13.5.4.6.js -e4x/XMLList/13.5.4.7.js -e4x/XMLList/13.5.4.8.js -e4x/XMLList/13.5.4.9.js -e4x/decompilation/regress-349814.js -e4x/decompilation/regress-349815.js -e4x/decompilation/regress-349822.js -e4x/decompilation/regress-349956.js -e4x/decompilation/regress-355101.js -e4x/decompilation/regress-355474-01.js -e4x/decompilation/regress-373678.js -e4x/decompilation/regress-429249.js -e4x/extensions/regress-305335.js -e4x/extensions/regress-321547.js -e4x/extensions/regress-327534.js -e4x/extensions/regress-327897.js -e4x/extensions/regress-354145-06.js -e4x/extensions/regress-354151-01.js -e4x/extensions/regress-354151-02.js -e4x/extensions/regress-374025.js -e4x/extensions/regress-450871-01.js -e4x/extensions/regress-450871-02.js -e4x/extensions/regress-462734-01.js -ecma/Array/15.4-1.js -ecma/Array/15.4-2.js -ecma/Array/15.4.1.1.js -ecma/Array/15.4.1.2.js -ecma/Array/15.4.1.3.js -ecma/Array/15.4.1.js -ecma/Array/15.4.2.1-1.js -ecma/Array/15.4.2.1-2.js -ecma/Array/15.4.2.1-3.js -ecma/Array/15.4.2.2-1.js -ecma/Array/15.4.2.2-2.js -ecma/Array/15.4.2.3.js -ecma/Array/15.4.3.1-2.js -ecma/Array/15.4.3.2.js -ecma/Array/15.4.4.1.js -ecma/Array/15.4.4.2.js -ecma/Array/15.4.4.3-1.js -ecma/Array/15.4.4.4-1.js -ecma/Array/15.4.4.4-2.js -ecma/Array/15.4.4.5-1.js -ecma/Array/15.4.4.5-2.js -ecma/Array/15.4.4.5-3.js -ecma/Array/15.4.4.js -ecma/Array/15.4.5.1-2.js -ecma/Array/15.4.5.2-1.js -ecma/Array/15.4.5.2-2.js -ecma/Boolean/15.6.1.js -ecma/Boolean/15.6.2.js -ecma/Boolean/15.6.3.1-1.js -ecma/Boolean/15.6.3.1-2.js -ecma/Boolean/15.6.3.1-3.js -ecma/Boolean/15.6.3.1-4.js -ecma/Boolean/15.6.3.1.js -ecma/Boolean/15.6.4-1.js -ecma/Boolean/15.6.4.1.js -ecma/Boolean/15.6.4.2-1.js -ecma/Boolean/15.6.4.2-2.js -ecma/Boolean/15.6.4.2-3.js -ecma/Boolean/15.6.4.2-4-n.js -ecma/Boolean/15.6.4.3-1.js -ecma/Boolean/15.6.4.3-2.js -ecma/Boolean/15.6.4.3-3.js -ecma/Boolean/15.6.4.3-4-n.js -ecma/Boolean/15.6.4.3.js -ecma/Boolean/15.6.4.js -ecma/Date/15.9.1.1-1.js -ecma/Date/15.9.1.1-2.js -ecma/Date/15.9.1.13-1.js -ecma/Date/15.9.2.1.js -ecma/Date/15.9.2.2-1.js -ecma/Date/15.9.2.2-2.js -ecma/Date/15.9.2.2-3.js -ecma/Date/15.9.2.2-4.js -ecma/Date/15.9.2.2-5.js -ecma/Date/15.9.2.2-6.js -ecma/Date/15.9.3.1-1.js -ecma/Date/15.9.3.1-2.js -ecma/Date/15.9.3.1-3.js -ecma/Date/15.9.3.1-4.js -ecma/Date/15.9.3.1-5.js -ecma/Date/15.9.3.2-1.js -ecma/Date/15.9.3.2-2.js -ecma/Date/15.9.3.2-3.js -ecma/Date/15.9.3.2-4.js -ecma/Date/15.9.3.2-5.js -ecma/Date/15.9.3.8-1.js -ecma/Date/15.9.3.8-2.js -ecma/Date/15.9.3.8-3.js -ecma/Date/15.9.3.8-4.js -ecma/Date/15.9.3.8-5.js -ecma/Date/15.9.4.2-1.js -ecma/Date/15.9.4.2.js -ecma/Date/15.9.4.3.js -ecma/Date/15.9.5.1.js -ecma/Date/15.9.5.10-10.js -ecma/Date/15.9.5.10-11.js -ecma/Date/15.9.5.10-12.js -ecma/Date/15.9.5.10-13.js -ecma/Date/15.9.5.10-3.js -ecma/Date/15.9.5.10-5.js -ecma/Date/15.9.5.10-6.js -ecma/Date/15.9.5.10-7.js -ecma/Date/15.9.5.10-8.js -ecma/Date/15.9.5.10-9.js -ecma/Date/15.9.5.11-1.js -ecma/Date/15.9.5.11-3.js -ecma/Date/15.9.5.11-4.js -ecma/Date/15.9.5.11-5.js -ecma/Date/15.9.5.11-6.js -ecma/Date/15.9.5.11-7.js -ecma/Date/15.9.5.12-1.js -ecma/Date/15.9.5.12-3.js -ecma/Date/15.9.5.12-4.js -ecma/Date/15.9.5.12-5.js -ecma/Date/15.9.5.12-6.js -ecma/Date/15.9.5.12-7.js -ecma/Date/15.9.5.12-8.js -ecma/Date/15.9.5.13-1.js -ecma/Date/15.9.5.13-2.js -ecma/Date/15.9.5.13-3.js -ecma/Date/15.9.5.13-4.js -ecma/Date/15.9.5.13-5.js -ecma/Date/15.9.5.13-6.js -ecma/Date/15.9.5.13-7.js -ecma/Date/15.9.5.13-8.js -ecma/Date/15.9.5.14.js -ecma/Date/15.9.5.15.js -ecma/Date/15.9.5.16.js -ecma/Date/15.9.5.17.js -ecma/Date/15.9.5.18.js -ecma/Date/15.9.5.19.js -ecma/Date/15.9.5.2-1.js -ecma/Date/15.9.5.2-2-n.js -ecma/Date/15.9.5.2.js -ecma/Date/15.9.5.20.js -ecma/Date/15.9.5.21-1.js -ecma/Date/15.9.5.21-2.js -ecma/Date/15.9.5.21-3.js -ecma/Date/15.9.5.21-4.js -ecma/Date/15.9.5.21-5.js -ecma/Date/15.9.5.21-6.js -ecma/Date/15.9.5.21-7.js -ecma/Date/15.9.5.21-8.js -ecma/Date/15.9.5.22-1.js -ecma/Date/15.9.5.22-2.js -ecma/Date/15.9.5.22-3.js -ecma/Date/15.9.5.22-4.js -ecma/Date/15.9.5.22-5.js -ecma/Date/15.9.5.22-6.js -ecma/Date/15.9.5.22-7.js -ecma/Date/15.9.5.22-8.js -ecma/Date/15.9.5.23-1.js -ecma/Date/15.9.5.23-10.js -ecma/Date/15.9.5.23-11.js -ecma/Date/15.9.5.23-12.js -ecma/Date/15.9.5.23-13.js -ecma/Date/15.9.5.23-14.js -ecma/Date/15.9.5.23-15.js -ecma/Date/15.9.5.23-16.js -ecma/Date/15.9.5.23-17.js -ecma/Date/15.9.5.23-18.js -ecma/Date/15.9.5.23-2.js -ecma/Date/15.9.5.23-3-n.js -ecma/Date/15.9.5.23-4.js -ecma/Date/15.9.5.23-5.js -ecma/Date/15.9.5.23-6.js -ecma/Date/15.9.5.23-7.js -ecma/Date/15.9.5.23-8.js -ecma/Date/15.9.5.23-9.js -ecma/Date/15.9.5.24-1.js -ecma/Date/15.9.5.24-2.js -ecma/Date/15.9.5.24-3.js -ecma/Date/15.9.5.24-4.js -ecma/Date/15.9.5.24-5.js -ecma/Date/15.9.5.24-6.js -ecma/Date/15.9.5.24-7.js -ecma/Date/15.9.5.24-8.js -ecma/Date/15.9.5.25-1.js -ecma/Date/15.9.5.26-1.js -ecma/Date/15.9.5.27-1.js -ecma/Date/15.9.5.28-1.js -ecma/Date/15.9.5.29-1.js -ecma/Date/15.9.5.3-1-n.js -ecma/Date/15.9.5.3-2.js -ecma/Date/15.9.5.30-1.js -ecma/Date/15.9.5.31-1.js -ecma/Date/15.9.5.32-1.js -ecma/Date/15.9.5.33-1.js -ecma/Date/15.9.5.34-1.js -ecma/Date/15.9.5.35-1.js -ecma/Date/15.9.5.36-1.js -ecma/Date/15.9.5.36-2.js -ecma/Date/15.9.5.36-3.js -ecma/Date/15.9.5.36-4.js -ecma/Date/15.9.5.36-5.js -ecma/Date/15.9.5.36-6.js -ecma/Date/15.9.5.36-7.js -ecma/Date/15.9.5.37-1.js -ecma/Date/15.9.5.37-2.js -ecma/Date/15.9.5.37-3.js -ecma/Date/15.9.5.37-4.js -ecma/Date/15.9.5.37-5.js -ecma/Date/15.9.5.4-1.js -ecma/Date/15.9.5.4-2-n.js -ecma/Date/15.9.5.5.js -ecma/Date/15.9.5.6.js -ecma/Date/15.9.5.7.js -ecma/Date/15.9.5.8.js -ecma/Date/15.9.5.9.js -ecma/Date/15.9.5.js -ecma/ExecutionContexts/10.1.3-1.js -ecma/ExecutionContexts/10.1.3-2.js -ecma/ExecutionContexts/10.1.3.js -ecma/ExecutionContexts/10.1.4-1.js -ecma/ExecutionContexts/10.1.4-10.js -ecma/ExecutionContexts/10.1.4-2.js -ecma/ExecutionContexts/10.1.4-3.js -ecma/ExecutionContexts/10.1.4-4.js -ecma/ExecutionContexts/10.1.4-5.js -ecma/ExecutionContexts/10.1.4-6.js -ecma/ExecutionContexts/10.1.4-7.js -ecma/ExecutionContexts/10.1.4-8.js -ecma/ExecutionContexts/10.1.5-1.js -ecma/ExecutionContexts/10.1.5-2.js -ecma/ExecutionContexts/10.1.5-3.js -ecma/ExecutionContexts/10.1.5-4.js -ecma/ExecutionContexts/10.1.8-2.js -ecma/ExecutionContexts/10.1.8-3.js -ecma/ExecutionContexts/10.2.1.js -ecma/ExecutionContexts/10.2.2-1.js -ecma/ExecutionContexts/10.2.2-2.js -ecma/ExecutionContexts/10.2.3-1.js -ecma/ExecutionContexts/10.2.3-2.js -ecma/Expressions/11.1.1.js -ecma/Expressions/11.10-1.js -ecma/Expressions/11.10-2.js -ecma/Expressions/11.10-3.js -ecma/Expressions/11.12-1.js -ecma/Expressions/11.12-2-n.js -ecma/Expressions/11.12-3.js -ecma/Expressions/11.12-4.js -ecma/Expressions/11.13.1.js -ecma/Expressions/11.13.2-1.js -ecma/Expressions/11.13.2-2.js -ecma/Expressions/11.13.2-3.js -ecma/Expressions/11.13.2-4.js -ecma/Expressions/11.13.2-5.js -ecma/Expressions/11.13.js -ecma/Expressions/11.14-1.js -ecma/Expressions/11.2.1-1.js -ecma/Expressions/11.2.1-2.js -ecma/Expressions/11.2.1-3-n.js -ecma/Expressions/11.2.1-4-n.js -ecma/Expressions/11.2.1-5.js -ecma/Expressions/11.2.2-1-n.js -ecma/Expressions/11.2.2-1.js -ecma/Expressions/11.2.2-10-n.js -ecma/Expressions/11.2.2-11.js -ecma/Expressions/11.2.2-2-n.js -ecma/Expressions/11.2.2-3-n.js -ecma/Expressions/11.2.2-4-n.js -ecma/Expressions/11.2.2-5-n.js -ecma/Expressions/11.2.2-6-n.js -ecma/Expressions/11.2.2-7-n.js -ecma/Expressions/11.2.2-8-n.js -ecma/Expressions/11.2.2-9-n.js -ecma/Expressions/11.2.3-1.js -ecma/Expressions/11.2.3-2-n.js -ecma/Expressions/11.2.3-3-n.js -ecma/Expressions/11.2.3-4-n.js -ecma/Expressions/11.2.3-5.js -ecma/Expressions/11.3.1.js -ecma/Expressions/11.3.2.js -ecma/Expressions/11.4.1.js -ecma/Expressions/11.4.2.js -ecma/Expressions/11.4.3.js -ecma/Expressions/11.4.4.js -ecma/Expressions/11.4.5.js -ecma/Expressions/11.4.6.js -ecma/Expressions/11.4.7-01.js -ecma/Expressions/11.4.7-02.js -ecma/Expressions/11.4.8.js -ecma/Expressions/11.4.9.js -ecma/Expressions/11.5.1.js -ecma/Expressions/11.5.2.js -ecma/Expressions/11.5.3.js -ecma/Expressions/11.6.1-1.js -ecma/Expressions/11.6.1-2.js -ecma/Expressions/11.6.1-3.js -ecma/Expressions/11.6.2-1.js -ecma/Expressions/11.6.3.js -ecma/Expressions/11.7.1.js -ecma/Expressions/11.7.2.js -ecma/Expressions/11.7.3.js -ecma/Expressions/11.8.1.js -ecma/Expressions/11.8.2.js -ecma/Expressions/11.8.3.js -ecma/Expressions/11.8.4.js -ecma/Expressions/11.9.1.js -ecma/Expressions/11.9.2.js -ecma/Expressions/11.9.3.js -ecma/FunctionObjects/15.3.1.1-1.js -ecma/FunctionObjects/15.3.1.1-2.js -ecma/FunctionObjects/15.3.1.1-3.js -ecma/FunctionObjects/15.3.2.1-1.js -ecma/FunctionObjects/15.3.2.1-2.js -ecma/FunctionObjects/15.3.2.1-3.js -ecma/FunctionObjects/15.3.3.1-2.js -ecma/FunctionObjects/15.3.3.1-3.js -ecma/FunctionObjects/15.3.3.1-4.js -ecma/FunctionObjects/15.3.3.2.js -ecma/FunctionObjects/15.3.4-1.js -ecma/FunctionObjects/15.3.4.1.js -ecma/FunctionObjects/15.3.4.js -ecma/FunctionObjects/15.3.5-1.js -ecma/FunctionObjects/15.3.5-2.js -ecma/FunctionObjects/15.3.5.1.js -ecma/FunctionObjects/15.3.5.3.js -ecma/GlobalObject/15.1-1-n.js -ecma/GlobalObject/15.1-2-n.js -ecma/GlobalObject/15.1.1.1.js -ecma/GlobalObject/15.1.1.2.js -ecma/GlobalObject/15.1.2.1-2.js -ecma/GlobalObject/15.1.2.2-2.js -ecma/GlobalObject/15.1.2.3-2.js -ecma/GlobalObject/15.1.2.5-2.js -ecma/GlobalObject/15.1.2.5-3.js -ecma/LexicalConventions/7.1-1.js -ecma/LexicalConventions/7.1-2.js -ecma/LexicalConventions/7.1-3.js -ecma/LexicalConventions/7.2-1.js -ecma/LexicalConventions/7.2-2-n.js -ecma/LexicalConventions/7.2-3-n.js -ecma/LexicalConventions/7.2-4-n.js -ecma/LexicalConventions/7.2-5-n.js -ecma/LexicalConventions/7.2-6.js -ecma/LexicalConventions/7.3-1.js -ecma/LexicalConventions/7.3-10.js -ecma/LexicalConventions/7.3-11.js -ecma/LexicalConventions/7.3-12.js -ecma/LexicalConventions/7.3-13-n.js -ecma/LexicalConventions/7.3-2.js -ecma/LexicalConventions/7.3-3.js -ecma/LexicalConventions/7.3-4.js -ecma/LexicalConventions/7.3-5.js -ecma/LexicalConventions/7.3-6.js -ecma/LexicalConventions/7.3-7.js -ecma/LexicalConventions/7.3-8.js -ecma/LexicalConventions/7.3-9.js -ecma/LexicalConventions/7.4.1-1-n.js -ecma/LexicalConventions/7.4.1-2-n.js -ecma/LexicalConventions/7.4.1-3-n.js -ecma/LexicalConventions/7.4.2-1-n.js -ecma/LexicalConventions/7.4.2-10-n.js -ecma/LexicalConventions/7.4.2-11-n.js -ecma/LexicalConventions/7.4.2-12-n.js -ecma/LexicalConventions/7.4.2-13-n.js -ecma/LexicalConventions/7.4.2-14-n.js -ecma/LexicalConventions/7.4.2-15-n.js -ecma/LexicalConventions/7.4.2-16-n.js -ecma/LexicalConventions/7.4.2-2-n.js -ecma/LexicalConventions/7.4.2-3-n.js -ecma/LexicalConventions/7.4.2-4-n.js -ecma/LexicalConventions/7.4.2-5-n.js -ecma/LexicalConventions/7.4.2-6-n.js -ecma/LexicalConventions/7.4.2-7-n.js -ecma/LexicalConventions/7.4.2-8-n.js -ecma/LexicalConventions/7.4.2-9-n.js -ecma/LexicalConventions/7.4.3-1-n.js -ecma/LexicalConventions/7.4.3-10-n.js -ecma/LexicalConventions/7.4.3-11-n.js -ecma/LexicalConventions/7.4.3-12-n.js -ecma/LexicalConventions/7.4.3-13-n.js -ecma/LexicalConventions/7.4.3-14-n.js -ecma/LexicalConventions/7.4.3-15-n.js -ecma/LexicalConventions/7.4.3-16-n.js -ecma/LexicalConventions/7.4.3-2-n.js -ecma/LexicalConventions/7.4.3-3-n.js -ecma/LexicalConventions/7.4.3-4-n.js -ecma/LexicalConventions/7.4.3-5-n.js -ecma/LexicalConventions/7.4.3-6-n.js -ecma/LexicalConventions/7.4.3-7-n.js -ecma/LexicalConventions/7.4.3-8-n.js -ecma/LexicalConventions/7.4.3-9-n.js -ecma/LexicalConventions/7.5-1.js -ecma/LexicalConventions/7.5-10-n.js -ecma/LexicalConventions/7.5-2-n.js -ecma/LexicalConventions/7.5-3-n.js -ecma/LexicalConventions/7.5-4-n.js -ecma/LexicalConventions/7.5-5-n.js -ecma/LexicalConventions/7.5-6.js -ecma/LexicalConventions/7.5-7.js -ecma/LexicalConventions/7.5-8-n.js -ecma/LexicalConventions/7.5-9-n.js -ecma/LexicalConventions/7.6.js -ecma/LexicalConventions/7.7.1.js -ecma/LexicalConventions/7.7.2.js -ecma/LexicalConventions/7.7.3-1.js -ecma/LexicalConventions/7.7.3-2.js -ecma/LexicalConventions/7.7.3.js -ecma/LexicalConventions/7.7.4.js -ecma/LexicalConventions/7.8.2-n.js -ecma/Math/15.8-2-n.js -ecma/Math/15.8-3-n.js -ecma/Math/15.8.1.1-1.js -ecma/Math/15.8.1.1-2.js -ecma/Math/15.8.1.2-1.js -ecma/Math/15.8.1.2-2.js -ecma/Math/15.8.1.3-1.js -ecma/Math/15.8.1.3-2.js -ecma/Math/15.8.1.4-1.js -ecma/Math/15.8.1.4-2.js -ecma/Math/15.8.1.5-1.js -ecma/Math/15.8.1.5-2.js -ecma/Math/15.8.1.6-1.js -ecma/Math/15.8.1.6-2.js -ecma/Math/15.8.1.7-1.js -ecma/Math/15.8.1.7-2.js -ecma/Math/15.8.1.8-1.js -ecma/Math/15.8.1.8-2.js -ecma/Math/15.8.1.8-3.js -ecma/Math/15.8.1.js -ecma/Math/15.8.2.1.js -ecma/Math/15.8.2.10.js -ecma/Math/15.8.2.11.js -ecma/Math/15.8.2.12.js -ecma/Math/15.8.2.13.js -ecma/Math/15.8.2.14.js -ecma/Math/15.8.2.15.js -ecma/Math/15.8.2.16.js -ecma/Math/15.8.2.17.js -ecma/Math/15.8.2.18.js -ecma/Math/15.8.2.2.js -ecma/Math/15.8.2.3.js -ecma/Math/15.8.2.4.js -ecma/Math/15.8.2.5.js -ecma/Math/15.8.2.6.js -ecma/Math/15.8.2.7.js -ecma/Math/15.8.2.8.js -ecma/Math/15.8.2.9.js -ecma/Number/15.7.1.js -ecma/Number/15.7.2.js -ecma/Number/15.7.3.1-1.js -ecma/Number/15.7.3.1-2.js -ecma/Number/15.7.3.1-3.js -ecma/Number/15.7.3.2-1.js -ecma/Number/15.7.3.2-2.js -ecma/Number/15.7.3.2-3.js -ecma/Number/15.7.3.2-4.js -ecma/Number/15.7.3.3-1.js -ecma/Number/15.7.3.3-2.js -ecma/Number/15.7.3.3-3.js -ecma/Number/15.7.3.3-4.js -ecma/Number/15.7.3.4-1.js -ecma/Number/15.7.3.4-2.js -ecma/Number/15.7.3.4-3.js -ecma/Number/15.7.3.4-4.js -ecma/Number/15.7.3.5-1.js -ecma/Number/15.7.3.5-2.js -ecma/Number/15.7.3.5-3.js -ecma/Number/15.7.3.5-4.js -ecma/Number/15.7.3.6-1.js -ecma/Number/15.7.3.6-2.js -ecma/Number/15.7.3.6-3.js -ecma/Number/15.7.3.6-4.js -ecma/Number/15.7.3.js -ecma/Number/15.7.4-1.js -ecma/Number/15.7.4.1.js -ecma/Number/15.7.4.2-1.js -ecma/Number/15.7.4.2-2-n.js -ecma/Number/15.7.4.2-3-n.js -ecma/Number/15.7.4.2-4.js -ecma/Number/15.7.4.3-1.js -ecma/Number/15.7.4.3-2.js -ecma/Number/15.7.4.3-3-n.js -ecma/ObjectObjects/15.2.1.1.js -ecma/ObjectObjects/15.2.1.2.js -ecma/ObjectObjects/15.2.2.1.js -ecma/ObjectObjects/15.2.2.2.js -ecma/ObjectObjects/15.2.3-1.js -ecma/ObjectObjects/15.2.3.1-1.js -ecma/ObjectObjects/15.2.3.1-2.js -ecma/ObjectObjects/15.2.3.1-3.js -ecma/ObjectObjects/15.2.3.1-4.js -ecma/ObjectObjects/15.2.3.js -ecma/ObjectObjects/15.2.4.1.js -ecma/ObjectObjects/15.2.4.2.js -ecma/ObjectObjects/15.2.4.3.js -ecma/SourceText/6-1.js -ecma/SourceText/6-2.js -ecma/Statements/12.10-1.js -ecma/Statements/12.10.js -ecma/Statements/12.2-1.js -ecma/Statements/12.5-1.js -ecma/Statements/12.5-2.js -ecma/Statements/12.6.1-1.js -ecma/Statements/12.6.2-1.js -ecma/Statements/12.6.2-2.js -ecma/Statements/12.6.2-3.js -ecma/Statements/12.6.2-4.js -ecma/Statements/12.6.2-5.js -ecma/Statements/12.6.2-6.js -ecma/Statements/12.6.2-7.js -ecma/Statements/12.6.2-8.js -ecma/Statements/12.6.2-9-n.js -ecma/Statements/12.6.3-1.js -ecma/Statements/12.6.3-10.js -ecma/Statements/12.6.3-11.js -ecma/Statements/12.6.3-12.js -ecma/Statements/12.6.3-19.js -ecma/Statements/12.6.3-2.js -ecma/Statements/12.6.3-3.js -ecma/Statements/12.6.3-4.js -ecma/Statements/12.6.3-5-n.js -ecma/Statements/12.6.3-6-n.js -ecma/Statements/12.6.3-7-n.js -ecma/Statements/12.6.3-8-n.js -ecma/Statements/12.6.3-9-n.js -ecma/Statements/12.7-1-n.js -ecma/Statements/12.8-1-n.js -ecma/Statements/12.9-1-n.js -ecma/String/15.5.1.js -ecma/String/15.5.2.js -ecma/String/15.5.3.1-1.js -ecma/String/15.5.3.1-2.js -ecma/String/15.5.3.1-3.js -ecma/String/15.5.3.1-4.js -ecma/String/15.5.3.2-1.js -ecma/String/15.5.3.2-2.js -ecma/String/15.5.3.2-3.js -ecma/String/15.5.3.js -ecma/String/15.5.4.1.js -ecma/String/15.5.4.10-1.js -ecma/String/15.5.4.11-1.js -ecma/String/15.5.4.11-3.js -ecma/String/15.5.4.11-4.js -ecma/String/15.5.4.11-6.js -ecma/String/15.5.4.12-2.js -ecma/String/15.5.4.12-3.js -ecma/String/15.5.4.2-1.js -ecma/String/15.5.4.2-2-n.js -ecma/String/15.5.4.2-3.js -ecma/String/15.5.4.2.js -ecma/String/15.5.4.3-1.js -ecma/String/15.5.4.3-2.js -ecma/String/15.5.4.3-3-n.js -ecma/String/15.5.4.4-1.js -ecma/String/15.5.4.4-2.js -ecma/String/15.5.4.4-3.js -ecma/String/15.5.4.4-4.js -ecma/String/15.5.4.5-1.js -ecma/String/15.5.4.5-2.js -ecma/String/15.5.4.5-3.js -ecma/String/15.5.4.5-4.js -ecma/String/15.5.4.5-5.js -ecma/String/15.5.4.6-1.js -ecma/String/15.5.4.6-2.js -ecma/String/15.5.4.7-1.js -ecma/String/15.5.4.7-2.js -ecma/String/15.5.4.8-1.js -ecma/String/15.5.4.8-3.js -ecma/String/15.5.4.9-1.js -ecma/String/15.5.4.js -ecma/String/15.5.5.1.js -ecma/TypeConversion/9.2.js -ecma/TypeConversion/9.3-1.js -ecma/TypeConversion/9.3.1-1.js -ecma/TypeConversion/9.3.1-2.js -ecma/TypeConversion/9.3.1-3.js -ecma/TypeConversion/9.3.js -ecma/TypeConversion/9.4-1.js -ecma/TypeConversion/9.4-2.js -ecma/TypeConversion/9.5-2.js -ecma/TypeConversion/9.6.js -ecma/TypeConversion/9.7.js -ecma/TypeConversion/9.8.1.js -ecma/TypeConversion/9.9-1.js -ecma/Types/8.1.js -ecma/Types/8.4.js -ecma/Types/8.6.2.1-1.js -ecma/extensions/10.1.4-9.js -ecma/extensions/10.1.6.js -ecma/extensions/10.1.8-1.js -ecma/extensions/11.6.1-1.js -ecma/extensions/11.6.1-2.js -ecma/extensions/11.6.1-3.js -ecma/extensions/11.6.2-1.js -ecma/extensions/15-1.js -ecma/extensions/15-2.js -ecma/extensions/15.2.1.1.js -ecma/extensions/15.2.3-1.js -ecma/extensions/15.2.4.js -ecma/extensions/15.3.1.1-1.js -ecma/extensions/15.3.1.1-2.js -ecma/extensions/15.3.2.1-1.js -ecma/extensions/15.3.2.1-2.js -ecma/extensions/15.3.3.1-1.js -ecma/extensions/15.4.3.js -ecma/extensions/15.5.3.js -ecma/extensions/15.5.4.2.js -ecma/extensions/15.5.4.4-4.js -ecma/extensions/15.5.4.5-6.js -ecma/extensions/15.5.4.7-3.js -ecma/extensions/15.6.3.1-5.js -ecma/extensions/15.6.3.js -ecma/extensions/15.6.4-2.js -ecma/extensions/15.7.3.js -ecma/extensions/15.7.4.js -ecma/extensions/15.8-1.js -ecma/extensions/15.9.5.js -ecma/extensions/8.6.2.1-1.js -ecma/extensions/9.9-1.js -ecma/jsref.js -ecma_2/Exceptions/boolean-001.js -ecma_2/Exceptions/boolean-002.js -ecma_2/Exceptions/date-001.js -ecma_2/Exceptions/date-002.js -ecma_2/Exceptions/date-003.js -ecma_2/Exceptions/date-004.js -ecma_2/Exceptions/exception-001.js -ecma_2/Exceptions/exception-002.js -ecma_2/Exceptions/exception-003.js -ecma_2/Exceptions/exception-004.js -ecma_2/Exceptions/exception-005.js -ecma_2/Exceptions/exception-006.js -ecma_2/Exceptions/exception-007.js -ecma_2/Exceptions/exception-008.js -ecma_2/Exceptions/exception-009.js -ecma_2/Exceptions/exception-010-n.js -ecma_2/Exceptions/exception-011-n.js -ecma_2/Exceptions/expression-001.js -ecma_2/Exceptions/expression-002.js -ecma_2/Exceptions/expression-003.js -ecma_2/Exceptions/expression-004.js -ecma_2/Exceptions/expression-005.js -ecma_2/Exceptions/expression-006.js -ecma_2/Exceptions/expression-007.js -ecma_2/Exceptions/expression-008.js -ecma_2/Exceptions/expression-009.js -ecma_2/Exceptions/expression-010.js -ecma_2/Exceptions/expression-011.js -ecma_2/Exceptions/expression-012.js -ecma_2/Exceptions/expression-013.js -ecma_2/Exceptions/expression-014.js -ecma_2/Exceptions/expression-015.js -ecma_2/Exceptions/expression-016.js -ecma_2/Exceptions/expression-017.js -ecma_2/Exceptions/expression-019.js -ecma_2/Exceptions/function-001.js -ecma_2/Exceptions/global-001.js -ecma_2/Exceptions/global-002.js -ecma_2/Exceptions/lexical-001.js -ecma_2/Exceptions/lexical-002.js -ecma_2/Exceptions/lexical-003.js -ecma_2/Exceptions/lexical-004.js -ecma_2/Exceptions/lexical-005.js -ecma_2/Exceptions/lexical-006.js -ecma_2/Exceptions/lexical-007.js -ecma_2/Exceptions/lexical-008.js -ecma_2/Exceptions/lexical-009.js -ecma_2/Exceptions/lexical-010.js -ecma_2/Exceptions/lexical-011.js -ecma_2/Exceptions/lexical-012.js -ecma_2/Exceptions/lexical-013.js -ecma_2/Exceptions/lexical-014.js -ecma_2/Exceptions/lexical-015.js -ecma_2/Exceptions/lexical-016.js -ecma_2/Exceptions/lexical-017.js -ecma_2/Exceptions/lexical-018.js -ecma_2/Exceptions/lexical-019.js -ecma_2/Exceptions/lexical-020.js -ecma_2/Exceptions/lexical-021.js -ecma_2/Exceptions/lexical-022.js -ecma_2/Exceptions/lexical-023.js -ecma_2/Exceptions/lexical-024.js -ecma_2/Exceptions/lexical-025.js -ecma_2/Exceptions/lexical-026.js -ecma_2/Exceptions/lexical-027.js -ecma_2/Exceptions/lexical-028.js -ecma_2/Exceptions/lexical-029.js -ecma_2/Exceptions/lexical-030.js -ecma_2/Exceptions/lexical-031.js -ecma_2/Exceptions/lexical-032.js -ecma_2/Exceptions/lexical-033.js -ecma_2/Exceptions/lexical-034.js -ecma_2/Exceptions/lexical-035.js -ecma_2/Exceptions/lexical-036.js -ecma_2/Exceptions/lexical-037.js -ecma_2/Exceptions/lexical-038.js -ecma_2/Exceptions/lexical-039.js -ecma_2/Exceptions/lexical-040.js -ecma_2/Exceptions/lexical-041.js -ecma_2/Exceptions/lexical-042.js -ecma_2/Exceptions/lexical-047.js -ecma_2/Exceptions/lexical-048.js -ecma_2/Exceptions/lexical-049.js -ecma_2/Exceptions/lexical-050.js -ecma_2/Exceptions/lexical-051.js -ecma_2/Exceptions/lexical-052.js -ecma_2/Exceptions/lexical-053.js -ecma_2/Exceptions/lexical-054.js -ecma_2/Exceptions/number-001.js -ecma_2/Exceptions/number-002.js -ecma_2/Exceptions/number-003.js -ecma_2/Exceptions/statement-001.js -ecma_2/Exceptions/statement-002.js -ecma_2/Exceptions/statement-003.js -ecma_2/Exceptions/statement-004.js -ecma_2/Exceptions/statement-005.js -ecma_2/Exceptions/statement-006.js -ecma_2/Exceptions/statement-007.js -ecma_2/Exceptions/statement-008.js -ecma_2/Exceptions/statement-009.js -ecma_2/Exceptions/string-001.js -ecma_2/Exceptions/string-002.js -ecma_2/Expressions/StrictEquality-001.js -ecma_2/FunctionObjects/apply-001-n.js -ecma_2/FunctionObjects/call-1.js -ecma_2/LexicalConventions/keywords-001.js -ecma_2/LexicalConventions/regexp-literals-001.js -ecma_2/LexicalConventions/regexp-literals-002.js -ecma_2/RegExp/constructor-001.js -ecma_2/RegExp/exec-002.js -ecma_2/RegExp/function-001.js -ecma_2/RegExp/hex-001.js -ecma_2/RegExp/multiline-001.js -ecma_2/RegExp/octal-001.js -ecma_2/RegExp/octal-002.js -ecma_2/RegExp/octal-003.js -ecma_2/RegExp/properties-001.js -ecma_2/RegExp/properties-002.js -ecma_2/RegExp/regexp-enumerate-001.js -ecma_2/RegExp/regress-001.js -ecma_2/RegExp/unicode-001.js -ecma_2/Statements/dowhile-001.js -ecma_2/Statements/dowhile-002.js -ecma_2/Statements/dowhile-003.js -ecma_2/Statements/dowhile-004.js -ecma_2/Statements/dowhile-005.js -ecma_2/Statements/dowhile-006.js -ecma_2/Statements/dowhile-007.js -ecma_2/Statements/forin-001.js -ecma_2/Statements/forin-002.js -ecma_2/Statements/if-001.js -ecma_2/Statements/label-001.js -ecma_2/Statements/label-002.js -ecma_2/Statements/switch-001.js -ecma_2/Statements/switch-002.js -ecma_2/Statements/switch-003.js -ecma_2/Statements/switch-004.js -ecma_2/Statements/try-001.js -ecma_2/Statements/try-003.js -ecma_2/Statements/try-004.js -ecma_2/Statements/try-005.js -ecma_2/Statements/try-006.js -ecma_2/Statements/try-007.js -ecma_2/Statements/try-008.js -ecma_2/Statements/try-009.js -ecma_2/Statements/try-010.js -ecma_2/Statements/try-012.js -ecma_2/Statements/while-001.js -ecma_2/Statements/while-002.js -ecma_2/Statements/while-003.js -ecma_2/Statements/while-004.js -ecma_2/String/match-001.js -ecma_2/String/match-002.js -ecma_2/String/match-003.js -ecma_2/String/match-004.js -ecma_2/String/split-001.js -ecma_2/String/split-002.js -ecma_2/String/split-003.js -ecma_2/extensions/constructor-001.js -ecma_2/extensions/function-001.js -ecma_2/extensions/instanceof-001.js -ecma_2/extensions/instanceof-002.js -ecma_2/extensions/instanceof-003-n.js -ecma_2/extensions/instanceof-004-n.js -ecma_2/extensions/instanceof-005-n.js -ecma_2/extensions/instanceof-006.js -ecma_2/instanceof/instanceof-001.js -ecma_2/instanceof/instanceof-002.js -ecma_2/instanceof/regress-7635.js -ecma_2/jsref.js -ecma_3/Array/15.4.4.11-01.js -ecma_3/Array/15.4.4.3-1.js -ecma_3/Array/15.4.4.4-001.js -ecma_3/Array/15.5.4.8-01.js -ecma_3/Array/regress-101488.js -ecma_3/Array/regress-130451.js -ecma_3/Array/regress-322135-01.js -ecma_3/Array/regress-390598.js -ecma_3/Array/regress-421325.js -ecma_3/Array/regress-430717.js -ecma_3/Array/regress-488989.js -ecma_3/Date/15.9.1.2-01.js -ecma_3/Date/15.9.4.3.js -ecma_3/Date/15.9.5.3.js -ecma_3/Date/15.9.5.4.js -ecma_3/Date/15.9.5.5.js -ecma_3/Date/15.9.5.6.js -ecma_3/Date/15.9.5.7.js -ecma_3/Date/regress-452786.js -ecma_3/Exceptions/15.11.1.1.js -ecma_3/Exceptions/15.11.4.4-1.js -ecma_3/Exceptions/15.11.7.6-001.js -ecma_3/Exceptions/15.11.7.6-002.js -ecma_3/Exceptions/15.11.7.6-003.js -ecma_3/Exceptions/binding-001.js -ecma_3/Exceptions/regress-181654.js -ecma_3/Exceptions/regress-181914.js -ecma_3/Exceptions/regress-58946.js -ecma_3/Exceptions/regress-95101.js -ecma_3/ExecutionContexts/10.1.3-1.js -ecma_3/ExecutionContexts/10.1.3-2.js -ecma_3/ExecutionContexts/10.1.3.js -ecma_3/ExecutionContexts/10.1.4-1.js -ecma_3/ExecutionContexts/10.6.1-01.js -ecma_3/ExecutionContexts/regress-23346.js -ecma_3/ExecutionContexts/regress-448595-01.js -ecma_3/Expressions/11.10-01.js -ecma_3/Expressions/11.10-02.js -ecma_3/Expressions/11.10-03.js -ecma_3/Expressions/11.6.1-1.js -ecma_3/Expressions/11.7.1-01.js -ecma_3/Expressions/11.7.2-01.js -ecma_3/Expressions/11.7.3-01.js -ecma_3/Expressions/11.9.6-1.js -ecma_3/FunExpr/fe-001-n.js -ecma_3/FunExpr/fe-001.js -ecma_3/FunExpr/fe-002.js -ecma_3/Function/15.3.4.3-1.js -ecma_3/Function/15.3.4.4-1.js -ecma_3/Function/arguments-001.js -ecma_3/Function/arguments-002.js -ecma_3/Function/call-001.js -ecma_3/Function/regress-131964.js -ecma_3/Function/regress-137181.js -ecma_3/Function/regress-193555.js -ecma_3/Function/regress-313570.js -ecma_3/Function/regress-49286.js -ecma_3/Function/regress-58274.js -ecma_3/Function/regress-85880.js -ecma_3/Function/regress-94506.js -ecma_3/Function/regress-97921.js -ecma_3/Function/scope-001.js -ecma_3/Function/scope-002.js -ecma_3/Number/15.7.4.2-01.js -ecma_3/Number/15.7.4.3-02.js -ecma_3/Number/15.7.4.5-1.js -ecma_3/Number/15.7.4.5-2.js -ecma_3/Number/15.7.4.6-1.js -ecma_3/Number/15.7.4.7-1.js -ecma_3/Number/15.7.4.7-2.js -ecma_3/Number/regress-442242-01.js -ecma_3/NumberFormatting/tostring-001.js -ecma_3/Object/8.6.2.6-001.js -ecma_3/Object/8.6.2.6-002.js -ecma_3/Object/class-001.js -ecma_3/Object/class-002.js -ecma_3/Object/class-003.js -ecma_3/Object/class-004.js -ecma_3/Object/class-005.js -ecma_3/Object/regress-361274.js -ecma_3/Object/regress-385393-07.js -ecma_3/Object/regress-459405.js -ecma_3/Object/regress-72773.js -ecma_3/Object/regress-79129-001.js -ecma_3/Operators/11.13.1-001.js -ecma_3/Operators/11.13.1-002.js -ecma_3/Operators/11.4.1-001.js -ecma_3/Operators/11.4.1-002.js -ecma_3/RegExp/15.10.2-1.js -ecma_3/RegExp/15.10.2.12.js -ecma_3/RegExp/15.10.3.1-1.js -ecma_3/RegExp/15.10.3.1-2.js -ecma_3/RegExp/15.10.4.1-1.js -ecma_3/RegExp/15.10.4.1-2.js -ecma_3/RegExp/15.10.4.1-3.js -ecma_3/RegExp/15.10.4.1-4.js -ecma_3/RegExp/15.10.4.1-5-n.js -ecma_3/RegExp/15.10.6.2-1.js -ecma_3/RegExp/15.10.6.2-2.js -ecma_3/RegExp/octal-001.js -ecma_3/RegExp/octal-002.js -ecma_3/RegExp/perlstress-001.js -ecma_3/RegExp/perlstress-002.js -ecma_3/RegExp/regress-100199.js -ecma_3/RegExp/regress-105972.js -ecma_3/RegExp/regress-119909.js -ecma_3/RegExp/regress-122076.js -ecma_3/RegExp/regress-123437.js -ecma_3/RegExp/regress-165353.js -ecma_3/RegExp/regress-169497.js -ecma_3/RegExp/regress-169534.js -ecma_3/RegExp/regress-187133.js -ecma_3/RegExp/regress-191479.js -ecma_3/RegExp/regress-202564.js -ecma_3/RegExp/regress-209067.js -ecma_3/RegExp/regress-209919.js -ecma_3/RegExp/regress-216591.js -ecma_3/RegExp/regress-220367-001.js -ecma_3/RegExp/regress-223273.js -ecma_3/RegExp/regress-223535.js -ecma_3/RegExp/regress-224676.js -ecma_3/RegExp/regress-225289.js -ecma_3/RegExp/regress-225343.js -ecma_3/RegExp/regress-24712.js -ecma_3/RegExp/regress-285219.js -ecma_3/RegExp/regress-28686.js -ecma_3/RegExp/regress-309840.js -ecma_3/RegExp/regress-312351.js -ecma_3/RegExp/regress-31316.js -ecma_3/RegExp/regress-334158.js -ecma_3/RegExp/regress-346090.js -ecma_3/RegExp/regress-367888.js -ecma_3/RegExp/regress-375642.js -ecma_3/RegExp/regress-375651.js -ecma_3/RegExp/regress-375715-02.js -ecma_3/RegExp/regress-375715-03.js -ecma_3/RegExp/regress-465862.js -ecma_3/RegExp/regress-57572.js -ecma_3/RegExp/regress-57631.js -ecma_3/RegExp/regress-67773.js -ecma_3/RegExp/regress-72964.js -ecma_3/RegExp/regress-76683.js -ecma_3/RegExp/regress-78156.js -ecma_3/RegExp/regress-85721.js -ecma_3/RegExp/regress-87231.js -ecma_3/RegExp/regress-98306.js -ecma_3/Regress/regress-385393-04.js -ecma_3/Regress/regress-419152.js -ecma_3/Regress/regress-420087.js -ecma_3/Regress/regress-420610.js -ecma_3/Regress/regress-441477-01.js -ecma_3/Regress/regress-469937.js -ecma_3/Statements/12.10-01.js -ecma_3/Statements/12.6.3.js -ecma_3/Statements/regress-131348.js -ecma_3/Statements/regress-157509.js -ecma_3/Statements/regress-194364.js -ecma_3/Statements/regress-226517.js -ecma_3/Statements/regress-302439.js -ecma_3/Statements/regress-324650.js -ecma_3/Statements/regress-444979.js -ecma_3/Statements/regress-74474-001.js -ecma_3/Statements/regress-74474-002.js -ecma_3/Statements/regress-74474-003.js -ecma_3/Statements/regress-83532-001.js -ecma_3/Statements/regress-83532-002.js -ecma_3/Statements/switch-001.js -ecma_3/String/regress-104375.js -ecma_3/String/regress-189898.js -ecma_3/String/regress-304376.js -ecma_3/String/regress-313567.js -ecma_3/String/regress-392378.js -ecma_3/String/regress-83293.js -ecma_3/Unicode/regress-352044-02-n.js -ecma_3/Unicode/uc-001-n.js -ecma_3/Unicode/uc-002-n.js -ecma_3/Unicode/uc-002.js -ecma_3/Unicode/uc-003.js -ecma_3/Unicode/uc-004.js -ecma_3/Unicode/uc-005.js -ecma_3/extensions/10.1.3-2.js -ecma_3/extensions/regress-103087.js -ecma_3/extensions/regress-188206-01.js -ecma_3/extensions/regress-188206-02.js -ecma_3/extensions/regress-220367-002.js -ecma_3/extensions/regress-228087.js -ecma_3/extensions/regress-320854.js -ecma_3/extensions/regress-327170.js -ecma_3/extensions/regress-385393-03.js -ecma_3/extensions/regress-429248.js -js-test-driver-begin.js -js-test-driver-end.js -js1_1/jsref.js -js1_2/Array/array_split_1.js -js1_2/Array/general1.js -js1_2/Array/general2.js -js1_2/Array/slice.js -js1_2/Array/splice1.js -js1_2/Array/splice2.js -js1_2/Array/tostring_1.js -js1_2/Array/tostring_2.js -js1_2/Objects/toString-001.js -js1_2/String/charCodeAt.js -js1_2/String/concat.js -js1_2/String/match.js -js1_2/String/slice.js -js1_2/function/Number.js -js1_2/function/String.js -js1_2/function/definition-1.js -js1_2/function/length.js -js1_2/function/nesting-1.js -js1_2/function/nesting.js -js1_2/function/regexparg-1.js -js1_2/jsref.js -js1_2/operator/strictEquality.js -js1_2/regexp/RegExp_dollar_number.js -js1_2/regexp/RegExp_input.js -js1_2/regexp/RegExp_input_as_array.js -js1_2/regexp/RegExp_lastIndex.js -js1_2/regexp/RegExp_lastMatch.js -js1_2/regexp/RegExp_lastMatch_as_array.js -js1_2/regexp/RegExp_lastParen.js -js1_2/regexp/RegExp_lastParen_as_array.js -js1_2/regexp/RegExp_leftContext.js -js1_2/regexp/RegExp_leftContext_as_array.js -js1_2/regexp/RegExp_multiline.js -js1_2/regexp/RegExp_multiline_as_array.js -js1_2/regexp/RegExp_object.js -js1_2/regexp/RegExp_rightContext.js -js1_2/regexp/RegExp_rightContext_as_array.js -js1_2/regexp/alphanumeric.js -js1_2/regexp/asterisk.js -js1_2/regexp/backslash.js -js1_2/regexp/backspace.js -js1_2/regexp/beginLine.js -js1_2/regexp/character_class.js -js1_2/regexp/compile.js -js1_2/regexp/control_characters.js -js1_2/regexp/digit.js -js1_2/regexp/dot.js -js1_2/regexp/endLine.js -js1_2/regexp/everything.js -js1_2/regexp/exec.js -js1_2/regexp/flags.js -js1_2/regexp/global.js -js1_2/regexp/hexadecimal.js -js1_2/regexp/ignoreCase.js -js1_2/regexp/interval.js -js1_2/regexp/octal.js -js1_2/regexp/parentheses.js -js1_2/regexp/plus.js -js1_2/regexp/question_mark.js -js1_2/regexp/regress-6359.js -js1_2/regexp/regress-9141.js -js1_2/regexp/simple_form.js -js1_2/regexp/source.js -js1_2/regexp/special_characters.js -js1_2/regexp/string_replace.js -js1_2/regexp/string_search.js -js1_2/regexp/string_split.js -js1_2/regexp/test.js -js1_2/regexp/toString.js -js1_2/regexp/vertical_bar.js -js1_2/regexp/whitespace.js -js1_2/regexp/word_boundary.js -js1_2/regress/regress-144834.js -js1_2/regress/regress-7703.js -js1_2/statements/break.js -js1_2/statements/continue.js -js1_2/statements/do_while.js -js1_2/statements/switch.js -js1_2/statements/switch2.js -js1_2/version120/boolean-001.js -js1_3/Boolean/boolean-001.js -js1_3/Script/delete-001.js -js1_3/Script/function-002.js -js1_3/Script/in-001.js -js1_3/Script/new-001.js -js1_3/Script/switch-001.js -js1_3/extensions/proto_10.js -js1_3/extensions/proto_2.js -js1_3/extensions/proto_5.js -js1_3/extensions/script-001.js -js1_3/inherit/proto_1.js -js1_3/inherit/proto_10.js -js1_3/inherit/proto_11.js -js1_3/inherit/proto_12.js -js1_3/inherit/proto_3.js -js1_3/inherit/proto_4.js -js1_3/inherit/proto_6.js -js1_3/inherit/proto_7.js -js1_3/inherit/proto_8.js -js1_3/inherit/proto_9.js -js1_3/jsref.js -js1_3/regress/delete-001.js -js1_3/regress/function-002.js -js1_3/regress/in-001.js -js1_3/regress/new-001.js -js1_3/regress/switch-001.js -js1_4/Eval/eval-001.js -js1_4/Eval/eval-002.js -js1_4/Eval/eval-003.js -js1_4/Functions/function-001.js -js1_4/Regress/date-001-n.js -js1_4/Regress/function-001.js -js1_4/Regress/function-002.js -js1_4/Regress/function-003.js -js1_4/Regress/function-004-n.js -js1_4/Regress/regress-7224.js -js1_4/Regress/toString-001-n.js -js1_4/jsref.js -js1_5/Array/11.1.4.js -js1_5/Array/array-001.js -js1_5/Array/regress-101964.js -js1_5/Array/regress-107138.js -js1_5/Array/regress-108440.js -js1_5/Array/regress-154338.js -js1_5/Array/regress-178722.js -js1_5/Array/regress-255555.js -js1_5/Array/regress-299644.js -js1_5/Array/regress-300858.js -js1_5/Array/regress-310351.js -js1_5/Array/regress-311515.js -js1_5/Array/regress-313153.js -js1_5/Array/regress-315509-01.js -js1_5/Array/regress-345961.js -js1_5/Array/regress-348810.js -js1_5/Array/regress-350256-01.js -js1_5/Array/regress-350256-02.js -js1_5/Array/regress-350256-03.js -js1_5/Array/regress-360681-01.js -js1_5/Array/regress-360681-02.js -js1_5/Array/regress-364104.js -js1_5/Array/regress-422286.js -js1_5/Array/regress-424954.js -js1_5/Array/regress-451483.js -js1_5/Array/regress-451906.js -js1_5/Array/regress-456845.js -js1_5/Array/regress-465980-01.js -js1_5/Array/regress-474529.js -js1_5/Array/regress-94257.js -js1_5/Date/regress-188211.js -js1_5/Date/regress-301738-01.js -js1_5/Date/regress-309925-01.js -js1_5/Date/regress-346027.js -js1_5/Date/regress-346363.js -js1_5/Error/regress-354246.js -js1_5/Error/regress-412324.js -js1_5/Error/regress-465377.js -js1_5/Exceptions/catchguard-002-n.js -js1_5/Exceptions/catchguard-003-n.js -js1_5/Exceptions/regress-123002.js -js1_5/Exceptions/regress-232182.js -js1_5/Exceptions/regress-273931.js -js1_5/Exceptions/regress-342359.js -js1_5/Exceptions/regress-347674.js -js1_5/Exceptions/regress-350837.js -js1_5/Expressions/regress-192288.js -js1_5/Expressions/regress-96526-argsub.js -js1_5/Expressions/regress-96526-noargsub.js -js1_5/Function/10.1.6.js -js1_5/Function/15.3.4.4.js -js1_5/Function/regress-123371.js -js1_5/Function/regress-178389.js -js1_5/Function/regress-292215.js -js1_5/Function/regress-344052.js -js1_5/Function/regress-364023.js -js1_5/GC/regress-104584.js -js1_5/GC/regress-203278-3.js -js1_5/GC/regress-278725.js -js1_5/GC/regress-306788.js -js1_5/GC/regress-311497.js -js1_5/GC/regress-313276.js -js1_5/GC/regress-313479.js -js1_5/GC/regress-316885-02.js -js1_5/GC/regress-316885-03.js -js1_5/GC/regress-319980-01.js -js1_5/GC/regress-331719.js -js1_5/GC/regress-338653.js -js1_5/GC/regress-341877-01.js -js1_5/GC/regress-341877-02.js -js1_5/GC/regress-352606.js -js1_5/GC/regress-383269-01.js -js1_5/GC/regress-383269-02.js -js1_5/GC/regress-390078.js -js1_5/GC/regress-418128.js -js1_5/GC/regress-440558.js -js1_5/GetSet/regress-375976.js -js1_5/LexicalConventions/lexical-001.js -js1_5/LexicalConventions/regress-177314.js -js1_5/LexicalConventions/regress-469940.js -js1_5/Object/regress-137000.js -js1_5/Object/regress-192105.js -js1_5/Object/regress-308806-01.js -js1_5/Object/regress-338709.js -js1_5/Object/regress-382503.js -js1_5/Object/regress-382532.js -js1_5/Object/regress-465476.js -js1_5/Object/regress-90596-003.js -js1_5/Regress/regress-102725.js -js1_5/Regress/regress-10278.js -js1_5/Regress/regress-103602.js -js1_5/Regress/regress-104077.js -js1_5/Regress/regress-110286.js -js1_5/Regress/regress-111557.js -js1_5/Regress/regress-114491.js -js1_5/Regress/regress-114493.js -js1_5/Regress/regress-115436.js -js1_5/Regress/regress-116228.js -js1_5/Regress/regress-118849.js -js1_5/Regress/regress-127243.js -js1_5/Regress/regress-127557.js -js1_5/Regress/regress-131510-001.js -js1_5/Regress/regress-139316.js -js1_5/Regress/regress-140852.js -js1_5/Regress/regress-140974.js -js1_5/Regress/regress-146596.js -js1_5/Regress/regress-152646.js -js1_5/Regress/regress-155081-2.js -js1_5/Regress/regress-155081.js -js1_5/Regress/regress-156354.js -js1_5/Regress/regress-159334.js -js1_5/Regress/regress-162392.js -js1_5/Regress/regress-165201.js -js1_5/Regress/regress-167658.js -js1_5/Regress/regress-168347.js -js1_5/Regress/regress-170193.js -js1_5/Regress/regress-174709.js -js1_5/Regress/regress-176125.js -js1_5/Regress/regress-179524.js -js1_5/Regress/regress-185165.js -js1_5/Regress/regress-191633.js -js1_5/Regress/regress-191668.js -js1_5/Regress/regress-192414.js -js1_5/Regress/regress-193418.js -js1_5/Regress/regress-203278-1.js -js1_5/Regress/regress-203402.js -js1_5/Regress/regress-203841.js -js1_5/Regress/regress-204210.js -js1_5/Regress/regress-210682.js -js1_5/Regress/regress-211590.js -js1_5/Regress/regress-214761.js -js1_5/Regress/regress-216320.js -js1_5/Regress/regress-224956.js -js1_5/Regress/regress-229006.js -js1_5/Regress/regress-230216-1.js -js1_5/Regress/regress-230216-2.js -js1_5/Regress/regress-230216-3.js -js1_5/Regress/regress-233483-2.js -js1_5/Regress/regress-233483.js -js1_5/Regress/regress-238881.js -js1_5/Regress/regress-238945.js -js1_5/Regress/regress-243174.js -js1_5/Regress/regress-243389-n.js -js1_5/Regress/regress-243869.js -js1_5/Regress/regress-244470.js -js1_5/Regress/regress-244619.js -js1_5/Regress/regress-245113.js -js1_5/Regress/regress-245308.js -js1_5/Regress/regress-246911.js -js1_5/Regress/regress-246964.js -js1_5/Regress/regress-247179.js -js1_5/Regress/regress-248444.js -js1_5/Regress/regress-253150.js -js1_5/Regress/regress-254296.js -js1_5/Regress/regress-254974.js -js1_5/Regress/regress-256501.js -js1_5/Regress/regress-256617.js -js1_5/Regress/regress-256798.js -js1_5/Regress/regress-259935.js -js1_5/Regress/regress-260541.js -js1_5/Regress/regress-261886.js -js1_5/Regress/regress-261887.js -js1_5/Regress/regress-274035.js -js1_5/Regress/regress-274888.js -js1_5/Regress/regress-275378.js -js1_5/Regress/regress-276103.js -js1_5/Regress/regress-278873.js -js1_5/Regress/regress-280769-3.js -js1_5/Regress/regress-280769-4.js -js1_5/Regress/regress-281487.js -js1_5/Regress/regress-281930.js -js1_5/Regress/regress-283477.js -js1_5/Regress/regress-286216.js -js1_5/Regress/regress-288688.js -js1_5/Regress/regress-289094.js -js1_5/Regress/regress-290656.js -js1_5/Regress/regress-294191.js -js1_5/Regress/regress-294195-01.js -js1_5/Regress/regress-294195-02.js -js1_5/Regress/regress-294302.js -js1_5/Regress/regress-295052.js -js1_5/Regress/regress-295666.js -js1_5/Regress/regress-299209.js -js1_5/Regress/regress-299641.js -js1_5/Regress/regress-306633.js -js1_5/Regress/regress-306727.js -js1_5/Regress/regress-306794.js -js1_5/Regress/regress-308085.js -js1_5/Regress/regress-308566.js -js1_5/Regress/regress-310295.js -js1_5/Regress/regress-310607.js -js1_5/Regress/regress-310993.js -js1_5/Regress/regress-311071.js -js1_5/Regress/regress-311629.js -js1_5/Regress/regress-312260.js -js1_5/Regress/regress-31255.js -js1_5/Regress/regress-314401.js -js1_5/Regress/regress-315990.js -js1_5/Regress/regress-317476.js -js1_5/Regress/regress-317714-01.js -js1_5/Regress/regress-317714-02.js -js1_5/Regress/regress-319384.js -js1_5/Regress/regress-319391.js -js1_5/Regress/regress-320032.js -js1_5/Regress/regress-321757.js -js1_5/Regress/regress-321874.js -js1_5/Regress/regress-321971.js -js1_5/Regress/regress-322430.js -js1_5/Regress/regress-325925.js -js1_5/Regress/regress-326453.js -js1_5/Regress/regress-326467.js -js1_5/Regress/regress-328012.js -js1_5/Regress/regress-328897.js -js1_5/Regress/regress-329383.js -js1_5/Regress/regress-330951.js -js1_5/Regress/regress-334807-01.js -js1_5/Regress/regress-334807-02.js -js1_5/Regress/regress-334807-03.js -js1_5/Regress/regress-334807-04.js -js1_5/Regress/regress-334807-05.js -js1_5/Regress/regress-334807-06.js -js1_5/Regress/regress-338307.js -js1_5/Regress/regress-340369.js -js1_5/Regress/regress-341360.js -js1_5/Regress/regress-343713.js -js1_5/Regress/regress-343966.js -js1_5/Regress/regress-344711-n.js -js1_5/Regress/regress-344804.js -js1_5/Regress/regress-344959.js -js1_5/Regress/regress-346237.js -js1_5/Regress/regress-346801.js -js1_5/Regress/regress-349482-01.js -js1_5/Regress/regress-349482-02.js -js1_5/Regress/regress-349592.js -js1_5/Regress/regress-350253.js -js1_5/Regress/regress-350312.js -js1_5/Regress/regress-350415.js -js1_5/Regress/regress-350529.js -js1_5/Regress/regress-351116.js -js1_5/Regress/regress-351515.js -js1_5/Regress/regress-352009.js -js1_5/Regress/regress-352208.js -js1_5/Regress/regress-355829-01.js -js1_5/Regress/regress-355829-02.js -js1_5/Regress/regress-355829-03.js -js1_5/Regress/regress-356250.js -js1_5/Regress/regress-360969-01.js -js1_5/Regress/regress-360969-02.js -js1_5/Regress/regress-360969-03.js -js1_5/Regress/regress-360969-04.js -js1_5/Regress/regress-360969-05.js -js1_5/Regress/regress-360969-06.js -js1_5/Regress/regress-366122.js -js1_5/Regress/regress-366468.js -js1_5/Regress/regress-366601.js -js1_5/Regress/regress-367561-01.js -js1_5/Regress/regress-367561-03.js -js1_5/Regress/regress-379245.js -js1_5/Regress/regress-383674.js -js1_5/Regress/regress-387951-01.js -js1_5/Regress/regress-387951-02.js -js1_5/Regress/regress-387951-03.js -js1_5/Regress/regress-39309.js -js1_5/Regress/regress-396684.js -js1_5/Regress/regress-398085-01.js -js1_5/Regress/regress-398085-02.js -js1_5/Regress/regress-398609.js -js1_5/Regress/regress-404755.js -js1_5/Regress/regress-406769.js -js1_5/Regress/regress-407024.js -js1_5/Regress/regress-407323.js -js1_5/Regress/regress-407957.js -js1_5/Regress/regress-416737-01.js -js1_5/Regress/regress-416737-02.js -js1_5/Regress/regress-417893.js -js1_5/Regress/regress-418504.js -js1_5/Regress/regress-418540.js -js1_5/Regress/regress-419018.js -js1_5/Regress/regress-419803.js -js1_5/Regress/regress-424311.js -js1_5/Regress/regress-425360.js -js1_5/Regress/regress-426827.js -js1_5/Regress/regress-428366.js -js1_5/Regress/regress-438415-01.js -js1_5/Regress/regress-438415-02.js -js1_5/Regress/regress-449627.js -js1_5/Regress/regress-449666.js -js1_5/Regress/regress-450369.js -js1_5/Regress/regress-450833.js -js1_5/Regress/regress-451884.js -js1_5/Regress/regress-451946.js -js1_5/Regress/regress-452008.js -js1_5/Regress/regress-452170.js -js1_5/Regress/regress-452333.js -js1_5/Regress/regress-452336.js -js1_5/Regress/regress-452346.js -js1_5/Regress/regress-452495.js -js1_5/Regress/regress-452573-01.js -js1_5/Regress/regress-452573-02.js -js1_5/Regress/regress-452713.js -js1_5/Regress/regress-452724-01.js -js1_5/Regress/regress-452724-02.js -js1_5/Regress/regress-452742-01.js -js1_5/Regress/regress-452742-02.js -js1_5/Regress/regress-452853.js -js1_5/Regress/regress-452884-01.js -js1_5/Regress/regress-452884-02.js -js1_5/Regress/regress-453024.js -js1_5/Regress/regress-453173.js -js1_5/Regress/regress-453397.js -js1_5/Regress/regress-453701.js -js1_5/Regress/regress-453747.js -js1_5/Regress/regress-454682.js -js1_5/Regress/regress-454981.js -js1_5/Regress/regress-455605.js -js1_5/Regress/regress-455748.js -js1_5/Regress/regress-455758-01.js -js1_5/Regress/regress-455758-02.js -js1_5/Regress/regress-455775.js -js1_5/Regress/regress-456470.js -js1_5/Regress/regress-456477-01.js -js1_5/Regress/regress-456477-02.js -js1_5/Regress/regress-456494.js -js1_5/Regress/regress-456540-01.js -js1_5/Regress/regress-456540-02.js -js1_5/Regress/regress-457065-03.js -js1_5/Regress/regress-457456.js -js1_5/Regress/regress-457778.js -js1_5/Regress/regress-458851.js -js1_5/Regress/regress-459085.js -js1_5/Regress/regress-459628.js -js1_5/Regress/regress-459990.js -js1_5/Regress/regress-460024.js -js1_5/Regress/regress-460117.js -js1_5/Regress/regress-460886-01.js -js1_5/Regress/regress-460886-02.js -js1_5/Regress/regress-461307.js -js1_5/Regress/regress-461723.js -js1_5/Regress/regress-462292.js -js1_5/Regress/regress-462879.js -js1_5/Regress/regress-462989.js -js1_5/Regress/regress-463259.js -js1_5/Regress/regress-463782.js -js1_5/Regress/regress-464334.js -js1_5/Regress/regress-464862.js -js1_5/Regress/regress-465013.js -js1_5/Regress/regress-465132.js -js1_5/Regress/regress-465133.js -js1_5/Regress/regress-465135.js -js1_5/Regress/regress-465136.js -js1_5/Regress/regress-465137.js -js1_5/Regress/regress-465262.js -js1_5/Regress/regress-465272.js -js1_5/Regress/regress-465347.js -js1_5/Regress/regress-465366.js -js1_5/Regress/regress-466262.js -js1_5/Regress/regress-466747.js -js1_5/Regress/regress-469044.js -js1_5/Regress/regress-470061.js -js1_5/Regress/regress-470187-01.js -js1_5/Regress/regress-470187-02.js -js1_5/Regress/regress-470758-01.js -js1_5/Regress/regress-470758-02.js -js1_5/Regress/regress-472533.js -js1_5/Regress/regress-475645-01.js -js1_5/Regress/regress-475645-02.js -js1_5/Regress/regress-476049.js -js1_5/Regress/regress-476192.js -js1_5/Regress/regress-477733.js -js1_5/Regress/regress-477758.js -js1_5/Regress/regress-478314.js -js1_5/Regress/regress-479353.js -js1_5/Regress/regress-480147.js -js1_5/Regress/regress-480244.js -js1_5/Regress/regress-481436.js -js1_5/Regress/regress-482421.js -js1_5/Regress/regress-482783.js -js1_5/Regress/regress-483103.js -js1_5/Regress/regress-501124.js -js1_5/Regress/regress-504078.js -js1_5/Regress/regress-57043.js -js1_5/Regress/regress-58116.js -js1_5/Regress/regress-68498-001.js -js1_5/Regress/regress-68498-002.js -js1_5/Regress/regress-68498-004.js -js1_5/Regress/regress-69607.js -js1_5/Regress/regress-71107.js -js1_5/Regress/regress-76054.js -js1_5/Regress/regress-80981.js -js1_5/Regress/regress-82306.js -js1_5/Regress/regress-89443.js -js1_5/Regress/regress-89474.js -js1_5/Regress/regress-90445.js -js1_5/Regress/regress-96526-001.js -js1_5/Regress/regress-96526-003.js -js1_5/Scope/regress-154693.js -js1_5/Scope/regress-184107.js -js1_5/Scope/regress-185485.js -js1_5/Scope/regress-191276.js -js1_5/Scope/regress-192226.js -js1_5/Scope/regress-202678-001.js -js1_5/Scope/regress-202678-002.js -js1_5/Scope/regress-208496-001.js -js1_5/Scope/regress-208496-002.js -js1_5/Scope/regress-220362.js -js1_5/Scope/regress-446026-02.js -js1_5/Scope/regress-77578-001.js -js1_5/Scope/scope-002.js -js1_5/Scope/scope-003.js -js1_5/Scope/scope-004.js -js1_5/String/regress-107771.js -js1_5/String/regress-112626.js -js1_5/String/regress-179068.js -js1_5/decompilation/regress-344120.js -js1_5/decompilation/regress-349489.js -js1_5/decompilation/regress-349663.js -js1_5/decompilation/regress-350670.js -js1_5/decompilation/regress-351336.js -js1_5/decompilation/regress-351625.js -js1_5/decompilation/regress-351626.js -js1_5/decompilation/regress-352022.js -js1_5/decompilation/regress-352360.js -js1_5/decompilation/regress-352873-01.js -js1_5/decompilation/regress-352873-02.js -js1_5/decompilation/regress-353120.js -js1_5/decompilation/regress-354878.js -js1_5/decompilation/regress-354910.js -js1_5/decompilation/regress-371692.js -js1_5/decompilation/regress-373678.js -js1_5/decompilation/regress-375639.js -js1_5/decompilation/regress-383721.js -js1_5/decompilation/regress-406555.js -js1_5/decompilation/regress-437288-02.js -js1_5/decompilation/regress-443071-01.js -js1_5/decompilation/regress-456964-01.js -js1_5/decompilation/regress-457093-01.js -js1_5/decompilation/regress-460116-01.js -js1_5/decompilation/regress-460116-02.js -js1_5/decompilation/regress-460116-03.js -js1_5/decompilation/regress-461108.js -js1_5/decompilation/regress-461110.js -js1_5/decompilation/regress-461111.js -js1_5/extensions/catchguard-001-n.js -js1_5/extensions/catchguard-001.js -js1_5/extensions/catchguard-002.js -js1_5/extensions/catchguard-003.js -js1_5/extensions/getset-004.js -js1_5/extensions/getset-005.js -js1_5/extensions/getset-006.js -js1_5/extensions/no-such-method.js -js1_5/extensions/regress-104077.js -js1_5/extensions/regress-178722.js -js1_5/extensions/regress-220584.js -js1_5/extensions/regress-225831.js -js1_5/extensions/regress-226078.js -js1_5/extensions/regress-231518.js -js1_5/extensions/regress-237461.js -js1_5/extensions/regress-245148.js -js1_5/extensions/regress-245795.js -js1_5/extensions/regress-255245.js -js1_5/extensions/regress-291213.js -js1_5/extensions/regress-300079.js -js1_5/extensions/regress-304897.js -js1_5/extensions/regress-311161.js -js1_5/extensions/regress-311583.js -js1_5/extensions/regress-311792-01.js -js1_5/extensions/regress-311792-02.js -js1_5/extensions/regress-312278.js -js1_5/extensions/regress-313500.js -js1_5/extensions/regress-313630.js -js1_5/extensions/regress-313763.js -js1_5/extensions/regress-313803.js -js1_5/extensions/regress-313938.js -js1_5/extensions/regress-314874.js -js1_5/extensions/regress-315509-02.js -js1_5/extensions/regress-319683.js -js1_5/extensions/regress-322957.js -js1_5/extensions/regress-325269.js -js1_5/extensions/regress-327608.js -js1_5/extensions/regress-328443.js -js1_5/extensions/regress-328556.js -js1_5/extensions/regress-338804-01.js -js1_5/extensions/regress-338804-02.js -js1_5/extensions/regress-338804-03.js -js1_5/extensions/regress-339685.js -js1_5/extensions/regress-340199.js -js1_5/extensions/regress-341956-01.js -js1_5/extensions/regress-341956-02.js -js1_5/extensions/regress-341956-03.js -js1_5/extensions/regress-346494-01.js -js1_5/extensions/regress-350312-01.js -js1_5/extensions/regress-350312-02.js -js1_5/extensions/regress-350312-03.js -js1_5/extensions/regress-351102-01.js -js1_5/extensions/regress-351102-02.js -js1_5/extensions/regress-351102-06.js -js1_5/extensions/regress-351973.js -js1_5/extensions/regress-352261.js -js1_5/extensions/regress-352281.js -js1_5/extensions/regress-352291.js -js1_5/extensions/regress-354297.js -js1_5/extensions/regress-354541-01.js -js1_5/extensions/regress-354541-02.js -js1_5/extensions/regress-354541-03.js -js1_5/extensions/regress-354541-04.js -js1_5/extensions/regress-355982.js -js1_5/extensions/regress-356402.js -js1_5/extensions/regress-363988.js -js1_5/extensions/regress-365527.js -js1_5/extensions/regress-365692.js -js1_5/extensions/regress-366288.js -js1_5/extensions/regress-366292.js -js1_5/extensions/regress-366396.js -js1_5/extensions/regress-367118-01.js -js1_5/extensions/regress-367118-02.js -js1_5/extensions/regress-367120-01.js -js1_5/extensions/regress-367120-02.js -js1_5/extensions/regress-367121.js -js1_5/extensions/regress-367501-01.js -js1_5/extensions/regress-367501-02.js -js1_5/extensions/regress-367501-03.js -js1_5/extensions/regress-367501-04.js -js1_5/extensions/regress-367589.js -js1_5/extensions/regress-369404.js -js1_5/extensions/regress-369696-01.js -js1_5/extensions/regress-369696-03.js -js1_5/extensions/regress-372309.js -js1_5/extensions/regress-374589.js -js1_5/extensions/regress-375183.js -js1_5/extensions/regress-375344.js -js1_5/extensions/regress-380889.js -js1_5/extensions/regress-385134.js -js1_5/extensions/regress-385393-02.js -js1_5/extensions/regress-390597.js -js1_5/extensions/regress-390598.js -js1_5/extensions/regress-394967.js -js1_5/extensions/regress-396326.js -js1_5/extensions/regress-406572.js -js1_5/extensions/regress-407019.js -js1_5/extensions/regress-407501.js -js1_5/extensions/regress-407720.js -js1_5/extensions/regress-412926.js -js1_5/extensions/regress-414755.js -js1_5/extensions/regress-416354.js -js1_5/extensions/regress-416460.js -js1_5/extensions/regress-416834.js -js1_5/extensions/regress-422137.js -js1_5/extensions/regress-422592.js -js1_5/extensions/regress-426711.js -js1_5/extensions/regress-427196-01.js -js1_5/extensions/regress-427196-02.js -js1_5/extensions/regress-427196-03.js -js1_5/extensions/regress-429264.js -js1_5/extensions/regress-431428.js -js1_5/extensions/regress-434837-01.js -js1_5/extensions/regress-435497-01.js -js1_5/extensions/regress-435497-02.js -js1_5/extensions/regress-435497-03.js -js1_5/extensions/regress-436741.js -js1_5/extensions/regress-437288-01.js -js1_5/extensions/regress-44009.js -js1_5/extensions/regress-443569.js -js1_5/extensions/regress-446386.js -js1_5/extensions/regress-452168.js -js1_5/extensions/regress-452329.js -js1_5/extensions/regress-452338.js -js1_5/extensions/regress-452372.js -js1_5/extensions/regress-452565.js -js1_5/extensions/regress-453249.js -js1_5/extensions/regress-454040.js -js1_5/extensions/regress-454704.js -js1_5/extensions/regress-455380.js -js1_5/extensions/regress-455408.js -js1_5/extensions/regress-459606.js -js1_5/extensions/regress-465276.js -js1_5/extensions/regress-469625.js -js1_5/extensions/regress-469761.js -js1_5/extensions/regress-472599.js -js1_5/extensions/regress-476447.js -js1_5/extensions/regress-479487.js -js1_5/extensions/regress-479551.js -js1_5/extensions/regress-480579.js -js1_5/extensions/regress-481516.js -js1_5/extensions/regress-488995.js -js1_5/extensions/regress-90596-001.js -js1_5/extensions/regress-90596-002.js -js1_5/extensions/regress-96284-001.js -js1_5/extensions/regress-96284-002.js -js1_5/extensions/scope-001.js -js1_6/Array/filter.js -js1_6/Array/regress-290592.js -js1_6/Array/regress-304828.js -js1_6/Array/regress-305002.js -js1_6/Array/regress-310425-01.js -js1_6/Array/regress-310425-02.js -js1_6/Array/regress-320887.js -js1_6/Array/regress-352742-01.js -js1_6/Array/regress-352742-02.js -js1_6/Array/regress-386030.js -js1_6/Array/regress-415451.js -js1_6/Array/regress-415540.js -js1_6/Regress/regress-301574.js -js1_6/Regress/regress-311157-01.js -js1_6/Regress/regress-311157-02.js -js1_6/Regress/regress-314887.js -js1_6/Regress/regress-320172.js -js1_6/Regress/regress-351795.js -js1_6/Regress/regress-352271.js -js1_6/Regress/regress-353078.js -js1_6/Regress/regress-372565.js -js1_6/Regress/regress-378492.js -js1_6/Regress/regress-475469.js -js1_6/Regress/regress-476655.js -js1_6/decompilation/regress-352084.js -js1_6/extensions/regress-385393-08.js -js1_6/extensions/regress-455464-01.js -js1_6/extensions/regress-455464-02.js -js1_6/extensions/regress-455464-03.js -js1_6/extensions/regress-455464-04.js -js1_6/extensions/regress-457521.js -js1_6/extensions/regress-472508.js -js1_6/extensions/regress-475144.js -js1_6/extensions/regress-479567.js -js1_7/GC/regress-341675.js -js1_7/block/order-of-operation.js -js1_7/block/regress-341939.js -js1_7/block/regress-343765.js -js1_7/block/regress-344139.js -js1_7/block/regress-344262.js -js1_7/block/regress-344370.js -js1_7/block/regress-345542.js -js1_7/block/regress-348685.js -js1_7/block/regress-349283.js -js1_7/block/regress-349298.js -js1_7/block/regress-349507.js -js1_7/block/regress-349653.js -js1_7/block/regress-349962.js -js1_7/block/regress-350279.js -js1_7/block/regress-350730.js -js1_7/block/regress-350793-01.js -js1_7/block/regress-351497.js -js1_7/block/regress-351606.js -js1_7/block/regress-352092.js -js1_7/block/regress-352185.js -js1_7/block/regress-352212.js -js1_7/block/regress-352267.js -js1_7/block/regress-352616.js -js1_7/block/regress-352624.js -js1_7/block/regress-352907.js -js1_7/block/regress-357754.js -js1_7/block/regress-358508.js -js1_7/block/regress-376410.js -js1_7/block/regress-396900.js -js1_7/block/regress-411279.js -js1_7/decompilation/regress-349633.js -js1_7/decompilation/regress-350810.js -js1_7/decompilation/regress-352015.js -js1_7/decompilation/regress-352025.js -js1_7/decompilation/regress-352198.js -js1_7/decompilation/regress-352269.js -js1_7/decompilation/regress-352272.js -js1_7/decompilation/regress-352283.js -js1_7/decompilation/regress-352402.js -js1_7/decompilation/regress-352732.js -js1_7/decompilation/regress-355635.js -js1_7/decompilation/regress-355786.js -js1_7/decompilation/regress-375794.js -js1_7/decompilation/regress-380506.js -js1_7/decompilation/regress-410649.js -js1_7/expressions/destructuring-scope.js -js1_7/expressions/regress-346203.js -js1_7/expressions/regress-346645-01.js -js1_7/expressions/regress-346645-02.js -js1_7/expressions/regress-346645-03.js -js1_7/expressions/regress-349624.js -js1_7/expressions/regress-349818.js -js1_7/expressions/regress-418051.js -js1_7/expressions/regress-421806.js -js1_7/expressions/regress-451340.js -js1_7/extensions/basic-Iterator.js -js1_7/extensions/basic-for-each.js -js1_7/extensions/basic-for-in.js -js1_7/extensions/destructuring-order.js -js1_7/extensions/iterator-ctor.js -js1_7/extensions/regress-346021.js -js1_7/extensions/regress-346642-02.js -js1_7/extensions/regress-346773.js -js1_7/extensions/regress-349619.js -js1_7/extensions/regress-350312.js -js1_7/extensions/regress-351070-02.js -js1_7/extensions/regress-352797-01.js -js1_7/extensions/regress-352885-01.js -js1_7/extensions/regress-352885-02.js -js1_7/extensions/regress-353214-02.js -js1_7/extensions/regress-354499-01.js -js1_7/extensions/regress-354499-02.js -js1_7/extensions/regress-354945-01.js -js1_7/extensions/regress-355052-01.js -js1_7/extensions/regress-355052-02.js -js1_7/extensions/regress-355052-03.js -js1_7/extensions/regress-355410.js -js1_7/extensions/regress-355512.js -js1_7/extensions/regress-355578.js -js1_7/extensions/regress-355583.js -js1_7/extensions/regress-363040-01.js -js1_7/extensions/regress-363040-02.js -js1_7/extensions/regress-366668-01.js -js1_7/extensions/regress-366668-02.js -js1_7/extensions/regress-372364.js -js1_7/extensions/regress-387955-01.js -js1_7/extensions/regress-387955-02.js -js1_7/extensions/regress-392308.js -js1_7/extensions/regress-396326.js -js1_7/extensions/regress-429266.js -js1_7/extensions/regress-455982-01.js -js1_7/extensions/regress-455982-02.js -js1_7/extensions/regress-458679.js -js1_7/extensions/regress-469234.js -js1_7/extensions/regress-469405-01.js -js1_7/extensions/regress-469405-02.js -js1_7/extensions/regress-470176.js -js1_7/extensions/regress-470300-01.js -js1_7/extensions/regress-470300-02.js -js1_7/extensions/regress-474771-01.js -js1_7/extensions/regress-474771-02.js -js1_7/extensions/regress-477048.js -js1_7/geniter/326466-01.js -js1_7/geniter/builtin-Iterator-function.js -js1_7/geniter/evens.js -js1_7/geniter/fibonacci-matrix-generator.js -js1_7/geniter/iterator-toString.js -js1_7/geniter/message-value-passing.js -js1_7/geniter/multiple-close.js -js1_7/geniter/nested-yield.js -js1_7/geniter/pi-generator.js -js1_7/geniter/regress-345736.js -js1_7/geniter/regress-345855.js -js1_7/geniter/regress-345879-01.js -js1_7/geniter/regress-345879-02.js -js1_7/geniter/regress-347593.js -js1_7/geniter/regress-349012-02.js -js1_7/geniter/regress-349012-03.js -js1_7/geniter/regress-349012-04.js -js1_7/geniter/regress-349012-05.js -js1_7/geniter/regress-349023-01.js -js1_7/geniter/regress-349023-02.js -js1_7/geniter/regress-349023-03.js -js1_7/geniter/regress-349362.js -js1_7/geniter/regress-349851.js -js1_7/geniter/regress-350621.js -js1_7/geniter/regress-350809.js -js1_7/geniter/regress-351120.js -js1_7/geniter/regress-351514.js -js1_7/geniter/regress-352197.js -js1_7/geniter/regress-352605.js -js1_7/geniter/regress-352876.js -js1_7/geniter/regress-355834.js -js1_7/geniter/regress-359062.js -js1_7/geniter/regress-366941.js -js1_7/geniter/regress-382335.js -js1_7/geniter/regress-387871.js -js1_7/geniter/regress-390918.js -js1_7/geniter/regress-392310.js -js1_7/geniter/regress-466206.js -js1_7/geniter/send-no-rhs.js -js1_7/geniter/sequential-yields.js -js1_7/geniter/simple-fib.js -js1_7/geniter/throw-after-close.js -js1_7/geniter/throw-forever.js -js1_7/geniter/unreachable-yield.js -js1_7/geniter/yield-undefined.js -js1_7/iterable/regress-340526-01.js -js1_7/iterable/regress-341496.js -js1_7/iterable/regress-341499.js -js1_7/iterable/regress-341510.js -js1_7/iterable/regress-341815.js -js1_7/iterable/regress-341821.js -js1_7/iterable/regress-354750-01.js -js1_7/iterable/regress-355025.js -js1_7/iterable/regress-355075-01.js -js1_7/iterable/regress-355075-02.js -js1_7/iterable/regress-355090.js -js1_7/iterable/regress-412467.js -js1_7/iterable/regress-415922.js -js1_7/lexical/regress-346642-04.js -js1_7/regress/regress-352640-01.js -js1_7/regress/regress-352640-02.js -js1_7/regress/regress-352640-03.js -js1_7/regress/regress-352640-04.js -js1_7/regress/regress-352797-02.js -js1_7/regress/regress-352870-03.js -js1_7/regress/regress-353079.js -js1_7/regress/regress-355023.js -js1_7/regress/regress-355832-01.js -js1_7/regress/regress-355832-02.js -js1_7/regress/regress-361566.js -js1_7/regress/regress-363040-02.js -js1_7/regress/regress-369666-01.js -js1_7/regress/regress-369666-02.js -js1_7/regress/regress-372331.js -js1_7/regress/regress-373827-01.js -js1_7/regress/regress-373827-02.js -js1_7/regress/regress-373828.js -js1_7/regress/regress-379442.js -js1_7/regress/regress-385393-05.js -js1_7/regress/regress-387951.js -js1_7/regress/regress-407727-01.js -js1_7/regress/regress-407727-02.js -js1_7/regress/regress-407957.js -js1_7/regress/regress-414553.js -js1_7/regress/regress-416601.js -js1_7/regress/regress-416705.js -js1_7/regress/regress-418641.js -js1_7/regress/regress-419803.js -js1_7/regress/regress-428706.js -js1_7/regress/regress-428708.js -js1_7/regress/regress-452703.js -js1_7/regress/regress-452960.js -js1_7/regress/regress-453049.js -js1_7/regress/regress-453051.js -js1_7/regress/regress-453411.js -js1_7/regress/regress-461235.js -js1_7/regress/regress-461945.js -js1_7/regress/regress-462071.js -js1_7/regress/regress-462282.js -js1_7/regress/regress-462388.js -js1_7/regress/regress-462407.js -js1_7/regress/regress-464403.js -js1_7/regress/regress-465236.js -js1_7/regress/regress-465424.js -js1_7/regress/regress-465484.js -js1_7/regress/regress-465686.js -js1_7/regress/regress-469239-01.js -js1_7/regress/regress-469239-02.js -js1_7/regress/regress-470223.js -js1_7/regress/regress-470388-01.js -js1_7/regress/regress-470388-02.js -js1_7/regress/regress-470388-03.js -js1_7/regress/regress-474771.js -js1_8/decompilation/regress-260106.js -js1_8/decompilation/regress-381504.js -js1_8/decompilation/regress-461233.js -js1_8/decompilation/regress-469625-01.js -js1_8/extensions/dekker.js -js1_8/extensions/for-in.js -js1_8/extensions/lamport.js -js1_8/extensions/peterson.js -js1_8/extensions/regress-378789.js -js1_8/extensions/regress-385393-01.js -js1_8/extensions/regress-385393-10.js -js1_8/extensions/regress-385393-11.js -js1_8/extensions/regress-415721.js -js1_8/extensions/regress-417131.js -js1_8/extensions/regress-417817.js -js1_8/extensions/regress-419091.js -js1_8/extensions/regress-422269.js -js1_8/extensions/regress-445818.js -js1_8/extensions/regress-446169-01.js -js1_8/extensions/regress-446169-02.js -js1_8/extensions/regress-452476.js -js1_8/extensions/regress-452913.js -js1_8/extensions/regress-454744.js -js1_8/extensions/regress-455973.js -js1_8/extensions/regress-465337.js -js1_8/extensions/regress-471197.js -js1_8/extensions/regress-475971.js -js1_8/extensions/regress-476427.js -js1_8/extensions/regress-476653.js -js1_8/extensions/regress-476871-02.js -js1_8/extensions/regress-479252.js -js1_8/extensions/regress-479381.js -js1_8/extensions/simple-tree.js -js1_8/genexps/regress-347739.js -js1_8/genexps/regress-380237-01.js -js1_8/regress/regress-404734.js -js1_8/regress/regress-427798.js -js1_8/regress/regress-433279-01.js -js1_8/regress/regress-433279-02.js -js1_8/regress/regress-433279-03.js -js1_8/regress/regress-452491.js -js1_8/regress/regress-457065-01.js -js1_8/regress/regress-457065-02.js -js1_8/regress/regress-458076.js -js1_8/regress/regress-459389.js -js1_8/regress/regress-461930.js -js1_8/regress/regress-461932.js -js1_8/regress/regress-463334-01.js -js1_8/regress/regress-463334-02.js -js1_8/regress/regress-463783.js -js1_8/regress/regress-464092-01.js -js1_8/regress/regress-464092-02.js -js1_8/regress/regress-464096.js -js1_8/regress/regress-464418.js -js1_8/regress/regress-464978.js -js1_8/regress/regress-465220.js -js1_8/regress/regress-465234.js -js1_8/regress/regress-465239.js -js1_8/regress/regress-465241.js -js1_8/regress/regress-465249.js -js1_8/regress/regress-465261.js -js1_8/regress/regress-465308.js -js1_8/regress/regress-465454.js -js1_8/regress/regress-465460-02.js -js1_8/regress/regress-465460-03.js -js1_8/regress/regress-465460-04.js -js1_8/regress/regress-465460-05.js -js1_8/regress/regress-465460-06.js -js1_8/regress/regress-465460-07.js -js1_8/regress/regress-465460-08.js -js1_8/regress/regress-465460-09.js -js1_8/regress/regress-465460-10.js -js1_8/regress/regress-465460-11.js -js1_8/regress/regress-465460-12.js -js1_8/regress/regress-465483.js -js1_8/regress/regress-465567-01.js -js1_8/regress/regress-465567-02.js -js1_8/regress/regress-465688.js -js1_8/regress/regress-466128.js -js1_8/regress/regress-466787.js -js1_8/regress/regress-467495-01.js -js1_8/regress/regress-467495-02.js -js1_8/regress/regress-467495-04.js -js1_8/regress/regress-467495-06.js -js1_8/regress/regress-468711.js -js1_8/regress/regress-469547.js -js1_8/regress/regress-469625-02.js -js1_8/regress/regress-471660.js -js1_8/regress/regress-472450-01.js -js1_8/regress/regress-472450-02.js -js1_8/regress/regress-472528-01.js -js1_8/regress/regress-472528-02.js -js1_8/regress/regress-472703.js -js1_8/regress/regress-474769.js -js1_8/regress/regress-474771.js -js1_8/regress/regress-474935.js -js1_8/regress/regress-476655.js -js1_8/regress/regress-477581.js -js1_8/regress/regress-478205.js -js1_8/regress/regress-479353.js -js1_8/regress/regress-479740.js -js1_8/regress/regress-481800.js -js1_8/regress/regress-483749.js -js1_8_1/JSON/regress-458959.js -js1_8_1/JSON/regress-459293.js -js1_8_1/decompilation/regress-371802.js -js1_8_1/extensions/regress-466905-04.js -js1_8_1/extensions/regress-466905-05.js -js1_8_1/extensions/regress-477158.js -js1_8_1/extensions/regress-477187.js -js1_8_1/regress/regress-452498-006.js -js1_8_1/regress/regress-452498-027.js -js1_8_1/regress/regress-452498-030.js -js1_8_1/regress/regress-452498-038.js -js1_8_1/regress/regress-452498-039.js -js1_8_1/regress/regress-452498-040.js -js1_8_1/regress/regress-452498-050.js -js1_8_1/regress/regress-452498-051.js -js1_8_1/regress/regress-452498-052-a.js -js1_8_1/regress/regress-452498-058.js -js1_8_1/regress/regress-452498-062.js -js1_8_1/regress/regress-452498-063.js -js1_8_1/regress/regress-452498-071.js -js1_8_1/regress/regress-452498-072.js -js1_8_1/regress/regress-452498-073.js -js1_8_1/regress/regress-452498-074.js -js1_8_1/regress/regress-452498-075.js -js1_8_1/regress/regress-452498-076.js -js1_8_1/regress/regress-452498-077.js -js1_8_1/regress/regress-452498-079.js -js1_8_1/regress/regress-452498-101.js -js1_8_1/regress/regress-452498-102.js -js1_8_1/regress/regress-452498-103.js -js1_8_1/regress/regress-452498-104.js -js1_8_1/regress/regress-452498-108.js -js1_8_1/regress/regress-452498-111.js -js1_8_1/regress/regress-452498-114-a.js -js1_8_1/regress/regress-452498-114.js -js1_8_1/regress/regress-452498-116.js -js1_8_1/regress/regress-452498-118.js -js1_8_1/regress/regress-452498-121.js -js1_8_1/regress/regress-452498-123.js -js1_8_1/regress/regress-452498-129.js -js1_8_1/regress/regress-452498-130.js -js1_8_1/regress/regress-452498-131.js -js1_8_1/regress/regress-452498-135-a.js -js1_8_1/regress/regress-452498-155.js -js1_8_1/regress/regress-452498-168-1.js -js1_8_1/regress/regress-452498-176.js -js1_8_1/regress/regress-452498-181.js -js1_8_1/regress/regress-452498-184.js -js1_8_1/regress/regress-452498-192.js -js1_8_1/regress/regress-466905-01.js -js1_8_1/regress/regress-466905-02.js -js1_8_1/regress/regress-479430-01.js -js1_8_1/regress/regress-479430-02.js -js1_8_1/regress/regress-479430-03.js -js1_8_1/regress/regress-479430-04.js -js1_8_1/regress/regress-479430-05.js -js1_8_1/regress/regress-495907.js -js1_8_1/trace/math-trace-tests.js -js1_8_1/trace/regress-458838.js -js1_8_1/trace/regress-462459-01.js -js1_8_1/trace/regress-462459-02.js -js1_8_1/trace/regress-462459-03.js -js1_8_1/trace/regress-462459-04.js -js1_8_1/trace/regress-462459-05.js -js1_8_1/trace/regress-462459-06.js -js1_8_1/trace/regress-462459-07.js -js1_8_1/trace/regress-462459-08.js -js1_8_1/trace/regress-462459-09.js -js1_8_1/trace/regress-462459-10.js -js1_8_1/trace/regress-462459-11.js -js1_8_1/trace/regress-462459-12.js -js1_8_1/trace/regress-471635.js -js1_8_1/trace/regress-489682.js -lc2/Arrays/array-001.js -lc2/Arrays/array-002.js -lc2/Arrays/array-003.js -lc2/Arrays/array-004.js -lc2/Arrays/array-005.js -lc2/Arrays/array-006-n.js -lc2/Arrays/array-007-n.js -lc2/Arrays/array-008-n.js -lc2/Classes/class-001.js -lc2/Classes/class-002.js -lc2/JSToJava/character-001.js -lc2/JSToJava/double-001.js -lc2/JSToJava/double-002.js -lc2/JSToJava/float-001.js -lc2/JSToJava/float-002.js -lc2/JSToJava/integer-001.js -lc2/JSToJava/integer-002.js -lc2/JSToJava/long-001.js -lc2/JSToJava/long-002.js -lc2/JSToJava/long-003-n.js -lc2/JSToJava/short-001.js -lc2/JSToJava/short-002.js -lc2/JSToJava/short-003-n.js -lc2/JavaToJS/String-001.js -lc2/JavaToJS/boolean-001.js -lc2/JavaToJS/boolean-003.js -lc2/JavaToJS/boolean-004.js -lc2/JavaToJS/boolean-005.js -lc2/JavaToJS/char-001.js -lc2/JavaToJS/char-002.js -lc2/JavaToJS/enum-001.js -lc2/JavaToJS/enum-002.js -lc2/JavaToJS/null-001.js -lc2/JavaToJS/number-001.js -lc2/JavaToJS/number-002.js -lc2/Methods/method-001.js -lc2/Methods/method-002.js -lc2/Methods/method-003.js -lc2/Methods/method-004-n.js -lc2/Methods/method-005.js -lc2/Methods/method-006.js -lc2/Methods/println-001.js -lc2/Objects/object-001.js -lc2/Objects/object-002.js -lc2/Objects/object-003.js -lc2/Objects/object-004.js -lc2/Objects/object-005.js -lc2/Objects/object-006.js -lc2/Packages/package-001.js -lc2/Packages/package-002.js -lc2/Packages/package-003.js -lc2/Packages/package-004.js -lc2/Packages/package-005.js -lc2/Packages/package-006.js -lc2/Packages/package-007-n.js -lc2/Packages/package-008-n.js -lc2/jsref.js -lc2/misc/constructor.js -lc2/misc/wrapUnwrap.js -lc3/ArrayMethods/byte-001.js -lc3/ArrayMethods/byte-002.js -lc3/ConvertBoolean/boolean-005-n.js -lc3/ConvertBoolean/boolean-006-n.js -lc3/ConvertBoolean/boolean-007-n.js -lc3/ConvertBoolean/boolean-008-n.js -lc3/ConvertBoolean/boolean-009-n.js -lc3/ConvertBoolean/boolean-010-n.js -lc3/ConvertBoolean/boolean-011-n.js -lc3/ConvertBoolean/boolean-012-n.js -lc3/ConvertBoolean/boolean-013-n.js -lc3/ConvertNull/null-002.js -lc3/ConvertNull/null-003-n.js -lc3/ConvertNull/null-004-n.js -lc3/ConvertNull/null-006-n.js -lc3/ConvertString/string-004-n.js -lc3/ConvertString/string-005-n.js -lc3/ConvertString/string-007-n.js -lc3/ConvertUndefined/undefined-001-n.js -lc3/JSBoolean/boolean-002-n.js -lc3/JSBoolean/boolean-003-n.js -lc3/JSBoolean/boolean-004-n.js -lc3/JSBoolean/boolean-005-n.js -lc3/JSBoolean/boolean-006-n.js -lc3/JSBoolean/boolean-007-n.js -lc3/JSBoolean/boolean-008-n.js -lc3/JSNull/ToBoolean-001-n.js -lc3/JSNull/ToFloat-001-n.js -lc3/JSNull/ToLong-001-n.js -lc3/JSNull/ToNumber-001-n.js -lc3/JSNumber/ToByte-002-n.js -lc3/JSNumber/ToByte-003-n.js -lc3/JSNumber/ToByte-005-n.js -lc3/JSNumber/ToChar-002-n.js -lc3/JSNumber/ToChar-003-n.js -lc3/JSNumber/ToChar-005-n.js -lc3/JSNumber/ToChar-006-n.js -lc3/JSNumber/ToInt-002-n.js -lc3/JSNumber/ToInt-003-n.js -lc3/JSNumber/ToInt-005-n.js -lc3/JSNumber/ToLong-002-n.js -lc3/JSNumber/ToLong-003-n.js -lc3/JSNumber/ToLong-004-n.js -lc3/JSNumber/ToLong-005-n.js -lc3/JSNumber/ToLong-006-n.js -lc3/JSNumber/ToLong-007-n.js -lc3/JSNumber/ToLong-008-n.js -lc3/JSNumber/ToLong-009-n.js -lc3/JSNumber/ToLong-010-n.js -lc3/JSNumber/ToLong-011-n.js -lc3/JSNumber/ToShort-002-n.js -lc3/JSNumber/ToShort-003-n.js -lc3/JSNumber/ToShort-005-n.js -lc3/JSObject/ToDouble-002-n.js -lc3/JSObject/ToDouble-003-n.js -lc3/JSObject/ToFloat-002-n.js -lc3/JSObject/ToFloat-003-n.js -lc3/JSUndefined/undefined-002-n.js -lc3/JSUndefined/undefined-003-n.js -lc3/JSUndefined/undefined-004-n.js -lc3/JSUndefined/undefined-005-n.js -lc3/JSUndefined/undefined-006-n.js -lc3/JSUndefined/undefined-007-n.js -lc3/JSUndefined/undefined-008-n.js -lc3/JSUndefined/undefined-009-n.js -lc3/JSUndefined/undefined-010-n.js -lc3/JavaArray/ToArray-002-n.js -lc3/JavaArray/ToBoolean-001-n.js -lc3/JavaObject/JavaObjectToBoolean-001-n.js -lc3/JavaObject/JavaObjectToBoolean-002-n.js -lc3/JavaObject/JavaObjectToByte-002-n.js -lc3/JavaObject/JavaObjectToByte-003-n.js -lc3/JavaObject/JavaObjectToByte-004-n.js -lc3/JavaObject/JavaObjectToByte-007-n.js -lc3/JavaObject/JavaObjectToByte-008-n.js -lc3/JavaObject/JavaObjectToChar-003-n.js -lc3/JavaObject/JavaObjectToChar-005-n.js -lc3/JavaObject/JavaObjectToChar-006-n.js -lc3/JavaObject/JavaObjectToInt-002-n.js -lc3/JavaObject/JavaObjectToInt-003-n.js -lc3/JavaObject/JavaObjectToInt-004-n.js -lc3/JavaObject/JavaObjectToLong-002-n.js -lc3/JavaObject/JavaObjectToLong-003-n.js -lc3/JavaObject/JavaObjectToLong-004-n.js -lc3/JavaObject/JavaObjectToLong-006-n.js -lc3/JavaObject/JavaObjectToShort-002-n.js -lc3/JavaObject/JavaObjectToShort-003-n.js -lc3/JavaObject/JavaObjectToShort-004-n.js -lc3/StringMethods/string-001.js -lc3/instanceof/instanceof-001.js -lc3/jsref.js -menuhead.js