From bcb754766cdd96ec51a2769a54bd23b5f9cabc2a Mon Sep 17 00:00:00 2001 From: Greg Brail Date: Tue, 10 Dec 2024 15:06:01 -0800 Subject: [PATCH 1/4] Change optimization so that there is effectively only one level --- .../mozilla/javascript/CompilerEnvirons.java | 20 +++- .../java/org/mozilla/javascript/Context.java | 51 +++++---- .../org/mozilla/javascript/ScriptRuntime.java | 2 +- .../mozilla/javascript/optimizer/Codegen.java | 6 +- .../org/mozilla/javascript/tests/Utils.java | 28 +++-- .../tests/DoctestFeature18EnabledTest.java | 8 +- .../javascript/tests/DoctestsTest.java | 18 +-- .../javascript/tests/ReadCommentsTest.java | 2 +- .../javascript/tests/Test262SuiteTest.java | 103 +++++++----------- .../org/mozilla/javascript/tests/Utils.java | 29 +++-- 10 files changed, 141 insertions(+), 126 deletions(-) diff --git a/rhino/src/main/java/org/mozilla/javascript/CompilerEnvirons.java b/rhino/src/main/java/org/mozilla/javascript/CompilerEnvirons.java index d6bffde15f..3c01d7af49 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,23 @@ public void setXmlAvailable(boolean flag) { xmlAvailable = flag; } + @Deprecated public final int getOptimizationLevel() { - return optimizationLevel; + return interpretedMode ? -1 : 9; } + public final boolean isInterpretedMode() { + return interpretedMode; + } + + @Deprecated 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 +265,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..2bc597ba53 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,36 +1927,44 @@ 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 */ 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 */ 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; } public static boolean isValidOptimizationLevel(int optimizationLevel) { @@ -2006,9 +2011,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 +2574,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 +2723,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 2f4212dd33..f28dc0717a 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/Utils.java b/rhino/src/test/java/org/mozilla/javascript/tests/Utils.java index 558afb7a52..036aaab774 100644 --- a/rhino/src/test/java/org/mozilla/javascript/tests/Utils.java +++ b/rhino/src/test/java/org/mozilla/javascript/tests/Utils.java @@ -22,21 +22,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 */ @@ -45,6 +43,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, @@ -57,6 +60,17 @@ public static void runWithOptimizationLevel( } } + /** Runs the provided action at the given optimization level */ + 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); + } + } + /** * Execute the provided script in a fresh context as "myScript.js". * 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/ReadCommentsTest.java b/tests/src/test/java/org/mozilla/javascript/tests/ReadCommentsTest.java index d2ef198006..ae6588b998 100644 --- a/tests/src/test/java/org/mozilla/javascript/tests/ReadCommentsTest.java +++ b/tests/src/test/java/org/mozilla/javascript/tests/ReadCommentsTest.java @@ -17,7 +17,7 @@ public class ReadCommentsTest { @Test public void readComments() throws IOException { CompilerEnvirons compilerEnv = new CompilerEnvirons(); - compilerEnv.setOptimizationLevel(5); + compilerEnv.setInterpretedMode(false); compilerEnv.setRecordingComments(true); compilerEnv.setRecordingLocalJsDocComments(true); compilerEnv.setStrictMode(true); diff --git a/tests/src/test/java/org/mozilla/javascript/tests/Test262SuiteTest.java b/tests/src/test/java/org/mozilla/javascript/tests/Test262SuiteTest.java index 92304b01ad..e39ddfd50a 100644 --- a/tests/src/test/java/org/mozilla/javascript/tests/Test262SuiteTest.java +++ b/tests/src/test/java/org/mozilla/javascript/tests/Test262SuiteTest.java @@ -516,11 +516,11 @@ public String getClassName() { } } - private Scriptable buildScope(Context cx, Test262Case testCase, int optLevel) { + private Scriptable buildScope(Context cx, Test262Case testCase, boolean interpretedMode) { ScriptableObject scope = cx.initSafeStandardObjects(); for (String harnessFile : testCase.harnessFiles) { - String harnessKey = harnessFile + '-' + optLevel; + String harnessKey = harnessFile + '-' + interpretedMode; Script harnessScript = HARNESS_SCRIPT_CACHE.computeIfAbsent( harnessKey, @@ -561,19 +561,19 @@ private static String extractJSErrorName(RhinoException ex) { @MethodSource("test262SuiteValues") public void test262Case( String testFilePath, - int optLevel, + TestMode testMode, boolean useStrict, Test262Case testCase, boolean markedAsFailing) { try (Context cx = Context.enter()) { - cx.setOptimizationLevel(optLevel); + cx.setInterpretedMode(testMode == TestMode.INTERPRETED); cx.setGeneratingDebug(true); boolean failedEarly = false; try { Scriptable scope; try { - scope = buildScope(cx, testCase, optLevel); + scope = buildScope(cx, testCase, testMode == TestMode.INTERPRETED); } catch (Exception ex) { throw new RuntimeException( "Failed to build a scope with the harness files.", ex); @@ -603,7 +603,7 @@ public void test262Case( synchronized (RESULT_TRACKERS) { TestResultTracker tracker = RESULT_TRACKERS.get(testCase); if (tracker != null) { - tracker.passes(optLevel, useStrict); + tracker.passes(testMode, useStrict); } } } catch (RhinoException ex) { @@ -635,7 +635,7 @@ public void test262Case( synchronized (RESULT_TRACKERS) { TestResultTracker tracker = RESULT_TRACKERS.get(testCase); if (tracker != null) { - tracker.passes(optLevel, useStrict); + tracker.passes(testMode, useStrict); } } } catch (Exception ex) { @@ -830,7 +830,7 @@ public static Collection 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. From d15eb7a0fb5e1a5db134e8872939c08fe227bf12 Mon Sep 17 00:00:00 2001 From: Greg Brail Date: Tue, 10 Dec 2024 16:20:10 -0800 Subject: [PATCH 2/4] Deprecate optimization levels Remove them from main code and replace with "interpreted mode" flag. Disable deprecation warnings in tests because we still want to test the old stuff for now at least. --- .../javascript/engine/RhinoScriptEngine.java | 34 ++++++++++++---- .../javascript/tools/debugger/Dim.java | 8 ++-- .../mozilla/javascript/tools/jsc/Main.java | 3 +- .../mozilla/javascript/tools/shell/Main.java | 16 ++++---- .../tools/shell/ShellContextFactory.java | 9 ++--- .../tools/resources/Messages.properties | 4 +- .../java/org/mozilla/javascript/Context.java | 4 ++ tests/build.gradle | 6 +++ .../mozilla/javascript/drivers/JsDriver.java | 4 +- .../javascript/tests/MozillaSuiteTest.java | 39 ++++++++----------- 10 files changed, 75 insertions(+), 52 deletions(-) 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..069e3564e0 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,18 @@ 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. */ 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"; @@ -275,7 +279,14 @@ private void configureContext(Context cx) throws ScriptException { } Object ol = get(OPTIMIZATION_LEVEL); if (ol != null) { - cx.setOptimizationLevel(parseInteger(ol)); + int lvl = parseInteger(ol); + if (lvl < 0) { + cx.setInterpretedMode(true); + } + } + Object interpreted = get(INTERPRETED_MODE); + if (interpreted != null) { + cx.setInterpretedMode(parseBoolean(interpreted)); } } @@ -287,12 +298,22 @@ private static int parseInteger(Object v) throws ScriptException { throw new ScriptException("Invalid number " + v); } } else if (v instanceof Integer) { - return ((Integer) v).intValue(); + return (Integer) v; } else { 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); + } else if (v instanceof Boolean) { + return (Boolean) v; + } else { + throw new ScriptException("Value must be a string or boolean"); + } + } + private String getFilename() { Object fn = get(ScriptEngine.FILENAME); if (fn instanceof String) { @@ -327,7 +348,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-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..ff0300a097 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,7 @@ 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); + // This no longer has an effect, but parse it for backward compatibility 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..e7c44478f7 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,7 @@ public static String[] processOptions(String args[]) { continue; } if (arg.equals("-opt") || arg.equals("-O")) { + // This bit remains for backward compatibility if (++i == args.length) { usageError = arg; break goodUsage; @@ -296,14 +297,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")) { + shellContextFactory.setInterpretedMode(true); continue; } if (arg.equals("-encoding")) { @@ -551,7 +551,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() ? "int" : "comp"); 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..ef0a6c6d7b 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,7 @@ 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 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 +114,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/Context.java b/rhino/src/main/java/org/mozilla/javascript/Context.java index 2bc597ba53..2aff73dd7b 100644 --- a/rhino/src/main/java/org/mozilla/javascript/Context.java +++ b/rhino/src/main/java/org/mozilla/javascript/Context.java @@ -1932,6 +1932,7 @@ public final void setGeneratingSource(boolean generatingSource) { * * @since 1.3 */ + @Deprecated public final int getOptimizationLevel() { return interpretedMode ? -1 : 9; } @@ -1953,6 +1954,7 @@ public final boolean isInterpretedMode() { * @param optimizationLevel an integer indicating the level of optimization to perform * @since 1.3 */ + @Deprecated public final void setOptimizationLevel(int optimizationLevel) { setInterpretedMode(optimizationLevel < 0); } @@ -1967,10 +1969,12 @@ public final void setInterpretedMode(boolean interpretedMode) { this.interpretedMode = interpretedMode; } + @Deprecated public static boolean isValidOptimizationLevel(int optimizationLevel) { return -1 <= optimizationLevel && optimizationLevel <= 9; } + @Deprecated public static void checkOptimizationLevel(int optimizationLevel) { if (isValidOptimizationLevel(optimizationLevel)) { return; diff --git a/tests/build.gradle b/tests/build.gradle index dd1fefc86c..aafebe95fd 100644 --- a/tests/build.gradle +++ b/tests/build.gradle @@ -17,6 +17,12 @@ dependencies { testImplementation("org.slf4j:slf4j-simple:2.0.16") } +tasks.withType(JavaCompile) { + 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/MozillaSuiteTest.java b/tests/src/test/java/org/mozilla/javascript/tests/MozillaSuiteTest.java index 070e86b404..96e29377a2 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 ? "opt-1.tests" : "opt9.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) + " < Date: Tue, 10 Dec 2024 16:57:45 -0800 Subject: [PATCH 3/4] Remove deprecated functions from rhino module --- .../benchmarks/BuiltinBenchmark.java | 1 - .../javascript/benchmarks/MathBenchmark.java | 1 - .../benchmarks/ObjectBenchmark.java | 1 - .../benchmarks/PropertyBenchmark.java | 1 - .../benchmarks/SunSpiderBenchmark.java | 1 - .../javascript/benchmarks/V8Benchmark.java | 1 - .../javascript/tests/Bug482203Test.java | 4 +- .../javascript/tests/Bug685403Test.java | 2 +- .../javascript/tests/Bug708801Test.java | 3 - .../javascript/tests/Bug782363Test.java | 1 - .../mozilla/javascript/tests/CatchTest.java | 2 +- .../mozilla/javascript/tests/CodegenTest.java | 8 +-- .../tests/ContinuationsApiTest.java | 22 +++---- .../javascript/tests/DynamicScopeTest.java | 1 - .../javascript/tests/ErrorPropertiesTest.java | 9 ++- .../javascript/tests/Issue385Test.java | 2 +- .../ScriptRuntimeEquivalentValuesTest.java | 4 +- .../tests/ToNumberConversionsTest.java | 8 +-- .../tests/ToNumberLegacyConversionsTest.java | 8 +-- .../org/mozilla/javascript/tests/Utils.java | 59 +------------------ 20 files changed, 37 insertions(+), 102 deletions(-) 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/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 036aaab774..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,9 +18,6 @@ * @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, 9}; - /** Runs the action successively with all available optimization levels */ public static void runWithAllOptimizationLevels(final ContextAction action) { runWithMode(action, false); @@ -37,29 +31,11 @@ public static void runWithAllOptimizationLevels( 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( - final ContextFactory contextFactory, - final ContextAction action, - final int optimizationLevel) { - - try (final Context cx = contextFactory.enterContext()) { - cx.setOptimizationLevel(optimizationLevel); - action.run(cx); - } - } - /** Runs the provided action at the given optimization level */ public static void runWithMode( final ContextFactory contextFactory, @@ -76,25 +52,13 @@ public static void runWithMode( * * @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) { @@ -120,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; - }); - } } From e542bb67ca368f9e837f465f2fbf2597396246d5 Mon Sep 17 00:00:00 2001 From: Greg Brail Date: Thu, 12 Dec 2024 17:41:58 -0800 Subject: [PATCH 4/4] Address code review comments * Add proper deprecation warnings * Rename old "doctests" files to make them clearer --- .../javascript/engine/RhinoScriptEngine.java | 22 +- .../tests/scriptengine/ScriptEngineTest.java | 2 +- .../mozilla/javascript/tools/jsc/Main.java | 5 +- .../mozilla/javascript/tools/shell/Main.java | 7 +- .../tools/resources/Messages.properties | 3 +- .../mozilla/javascript/CompilerEnvirons.java | 7 + .../java/org/mozilla/javascript/Context.java | 8 + tests/build.gradle | 2 + .../javascript/tests/MozillaSuiteTest.java | 2 +- .../resources/{opt9.tests => compiled.tests} | 2 +- .../{opt-1.tests => interpreted.tests} | 0 tests/src/test/resources/opt0.tests | 2439 ----------------- 12 files changed, 42 insertions(+), 2457 deletions(-) rename tests/src/test/resources/{opt9.tests => compiled.tests} (99%) rename tests/src/test/resources/{opt-1.tests => interpreted.tests} (100%) delete mode 100644 tests/src/test/resources/opt0.tests 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 069e3564e0..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 @@ -56,7 +56,10 @@ public class RhinoScriptEngine extends AbstractScriptEngine implements Compilabl /** * 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"; /** @@ -272,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) { @@ -279,10 +283,8 @@ private void configureContext(Context cx) throws ScriptException { } Object ol = get(OPTIMIZATION_LEVEL); if (ol != null) { - int lvl = parseInteger(ol); - if (lvl < 0) { - cx.setInterpretedMode(true); - } + // Handle backwardly-compatible "optimization level". + cx.setOptimizationLevel(parseInteger(ol)); } Object interpreted = get(INTERPRETED_MODE); if (interpreted != null) { @@ -297,21 +299,21 @@ private static int parseInteger(Object v) throws ScriptException { } catch (NumberFormatException nfe) { throw new ScriptException("Invalid number " + v); } - } else if (v instanceof Integer) { + } + if (v instanceof Integer) { return (Integer) v; - } else { - throw new ScriptException("Value must be a string or number"); } + 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); - } else if (v instanceof Boolean) { + } + if (v instanceof Boolean) { return (Boolean) v; - } else { - throw new ScriptException("Value must be a string or boolean"); } + throw new ScriptException("Value must be a string or boolean"); } private String getFilename() { 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/jsc/Main.java b/rhino-tools/src/main/java/org/mozilla/javascript/tools/jsc/Main.java index ff0300a097..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,7 +80,10 @@ public String[] processOptions(String args[]) { continue; } if ((arg.equals("-opt") || arg.equals("-O")) && ++i < args.length) { - // This no longer has an effect, but parse it for backward compatibility + // 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 e7c44478f7..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,7 +285,8 @@ public static String[] processOptions(String args[]) { continue; } if (arg.equals("-opt") || arg.equals("-O")) { - // This bit remains for backward compatibility + // 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; @@ -302,7 +303,7 @@ public static String[] processOptions(String args[]) { } continue; } - if (arg.equals("-int")) { + if (arg.equals("-int") || arg.equals("-interpreted")) { shellContextFactory.setInterpretedMode(true); continue; } @@ -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.isInterpretedMode() ? "int" : "comp"); + 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/resources/org/mozilla/javascript/tools/resources/Messages.properties b/rhino-tools/src/main/resources/org/mozilla/javascript/tools/resources/Messages.properties index ef0a6c6d7b..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\ - \ -int Run in interpreted mode.\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\ diff --git a/rhino/src/main/java/org/mozilla/javascript/CompilerEnvirons.java b/rhino/src/main/java/org/mozilla/javascript/CompilerEnvirons.java index 3c01d7af49..fa9ecb9bf0 100644 --- a/rhino/src/main/java/org/mozilla/javascript/CompilerEnvirons.java +++ b/rhino/src/main/java/org/mozilla/javascript/CompilerEnvirons.java @@ -98,6 +98,9 @@ public void setXmlAvailable(boolean flag) { xmlAvailable = flag; } + /** + * @deprecated As of 1.8.0, use {@link #isInterpretedMode()} instead. + */ @Deprecated public final int getOptimizationLevel() { return interpretedMode ? -1 : 9; @@ -107,7 +110,11 @@ 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); interpretedMode = (level < 0); diff --git a/rhino/src/main/java/org/mozilla/javascript/Context.java b/rhino/src/main/java/org/mozilla/javascript/Context.java index 2aff73dd7b..221e607647 100644 --- a/rhino/src/main/java/org/mozilla/javascript/Context.java +++ b/rhino/src/main/java/org/mozilla/javascript/Context.java @@ -1931,6 +1931,7 @@ public final void setGeneratingSource(boolean generatingSource) { * 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() { @@ -1953,6 +1954,7 @@ public final boolean isInterpretedMode() { * * @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) { @@ -1969,11 +1971,17 @@ public final void setInterpretedMode(boolean interpretedMode) { 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)) { diff --git a/tests/build.gradle b/tests/build.gradle index aafebe95fd..fe40562d7b 100644 --- a/tests/build.gradle +++ b/tests/build.gradle @@ -18,6 +18,8 @@ dependencies { } 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' ] 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 96e29377a2..24bb50f3ab 100644 --- a/tests/src/test/java/org/mozilla/javascript/tests/MozillaSuiteTest.java +++ b/tests/src/test/java/org/mozilla/javascript/tests/MozillaSuiteTest.java @@ -82,7 +82,7 @@ public static File getTestDir() throws IOException { } public static String getTestFilename(boolean interpretedMode) { - return interpretedMode ? "opt-1.tests" : "opt9.tests"; + return interpretedMode ? "interpreted.tests" : "compiled.tests"; } public static File[] getTestFiles(boolean interpretedMode) throws IOException { 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