5ab1ec1e06
Add suppose for compiling non-eager, non-top-level inner functions in parallel, using the compiler dispatcher. This behaviour can be enabled with --parallel-compile-tasks-for-lazy. There are a couple of consequences: * To support this we need support for off-thread ScopeInfo deserialization, so this adds that too. * The previous --parallel-compile-tasks flag is renamed to the more descriptive --parallel-compile-tasks-for-eager-toplevel. * Both parallel-compile-tasks flags are moved onto UnoptimizedCompileFlags so that they can be enabled/disabled on a per-compile basis (e.g. enabled for streaming, disabled for re-parsing). * asm.js compilations can now happen without an active Context (in the compiler dispatcher's idle finalization) so we can't get a ContextId for metric reporting; we'd need to somehow fix this if we wanted asm.js UKM but for now it's probably fine. * Took the opportunity to clean up some of the "can preparse" logic in the parser. Change-Id: I20b1ec6a6bacfe268808edc8d812b92370c5840d Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3281924 Commit-Queue: Leszek Swirski <leszeks@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Emanuel Ziegler <ecmziegler@chromium.org> Cr-Commit-Position: refs/heads/main@{#78183}
71 lines
1.4 KiB
JavaScript
71 lines
1.4 KiB
JavaScript
// Copyright 2018 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --compiler-dispatcher --parallel-compile-tasks-for-eager-toplevel --use-external-strings
|
|
|
|
(function(a) {
|
|
assertEquals(a, "IIFE");
|
|
})("IIFE");
|
|
|
|
(function(a, ...rest) {
|
|
assertEquals(a, 1);
|
|
assertEquals(rest.length, 2);
|
|
assertEquals(rest[0], 2);
|
|
assertEquals(rest[1], 3);
|
|
})(1,2,3);
|
|
|
|
var outer_var = 42;
|
|
|
|
function lazy_outer() {
|
|
return 42;
|
|
}
|
|
|
|
var eager_outer = (function() { return 42; });
|
|
|
|
(function() {
|
|
assertEquals(outer_var, 42);
|
|
assertEquals(lazy_outer(), 42);
|
|
assertEquals(eager_outer(), 42);
|
|
})();
|
|
|
|
var gen = (function*() {
|
|
yield 1;
|
|
yield 2;
|
|
})();
|
|
|
|
assertEquals(gen.next().value, 1);
|
|
assertEquals(gen.next().value, 2);
|
|
|
|
var result = (function recursive(a=0) {
|
|
if (a == 1) {
|
|
return 42;
|
|
}
|
|
return recursive(1);
|
|
})();
|
|
|
|
assertEquals(result, 42);
|
|
|
|
var a = 42;
|
|
var b;
|
|
var c = (a, b = (function z(){ return a+1; })());
|
|
assertEquals(b, 43);
|
|
assertEquals(c, 43);
|
|
var c = (a, b = (function z(){ return a+1; })()) => { return b; };
|
|
assertEquals(c(314), 315);
|
|
|
|
// http://crbug.com/898076
|
|
(function() {
|
|
class foo {};
|
|
}); // Don't call IIFE so that it is compiled during idle time
|
|
|
|
// http://crbug.com/900535
|
|
(function() {
|
|
"use asm";
|
|
function bar(i, j) {
|
|
i = i|0;
|
|
j = j|0;
|
|
}
|
|
return {bar: bar};
|
|
}); // Don't call IIFE so that it is compiled during idle time
|