Commit 0f40415b authored by Ross McIlroy's avatar Ross McIlroy Committed by Commit Bot

Revert "[Compiler] Remove CompileDebugCode and EnsureBytecode and replace with Compile"

This reverts commit 21da12a9.

Reason for revert: Failing on arm64 simulator

Original change's description:
> [Compiler] Remove CompileDebugCode and EnsureBytecode and replace with Compile
> 
> Removes the Compiler::CompileDebugCode and Compiler::EnsureBytecode functions
> and replaces them with a Compiler::Compile(Handle<SharedFunctionInfo> shared)
> function. The code in compiler.cc is refactored to use this function to compile
> the SharedFunctionInfo when compiling a JSFunction.
> 
> Also does some other cleanup:
>  - Removes CompileUnoptimizedFunction and inlines into new Compiler function
>  - Moves code to create top level SharedFunctionInfo into CompilerTopLevel and
>    out of FinalizeUnoptimizedCompile.
> 
> BUG=v8:6409
> 
> Change-Id: Ic54afcd8eb005c17f3ae6b2355060846e3091ca3
> Reviewed-on: https://chromium-review.googlesource.com/613760
> Commit-Queue: Ross McIlroy <rmcilroy@chromium.org>
> Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
> Reviewed-by: Leszek Swirski <leszeks@chromium.org>
> Reviewed-by: Yang Guo <yangguo@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#47394}

TBR=rmcilroy@chromium.org,yangguo@chromium.org,jarin@chromium.org,leszeks@chromium.org

Change-Id: I4ba63e82417a185f1528ff2633eb6c8872fbbfe5
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: v8:6409
Reviewed-on: https://chromium-review.googlesource.com/618687Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
Commit-Queue: Ross McIlroy <rmcilroy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#47397}
parent 89ac7fcd
...@@ -30,6 +30,7 @@ CompilationInfo::CompilationInfo(Zone* zone, Isolate* isolate, ...@@ -30,6 +30,7 @@ CompilationInfo::CompilationInfo(Zone* zone, Isolate* isolate,
literal_ = literal; literal_ = literal;
source_range_map_ = parse_info->source_range_map(); source_range_map_ = parse_info->source_range_map();
if (parse_info->is_debug()) MarkAsDebug();
if (parse_info->is_eval()) MarkAsEval(); if (parse_info->is_eval()) MarkAsEval();
if (parse_info->is_native()) MarkAsNative(); if (parse_info->is_native()) MarkAsNative();
if (parse_info->will_serialize()) MarkAsSerializing(); if (parse_info->will_serialize()) MarkAsSerializing();
......
...@@ -36,17 +36,18 @@ class V8_EXPORT_PRIVATE CompilationInfo final { ...@@ -36,17 +36,18 @@ class V8_EXPORT_PRIVATE CompilationInfo final {
// Various configuration flags for a compilation, as well as some properties // Various configuration flags for a compilation, as well as some properties
// of the compiled code produced by a compilation. // of the compiled code produced by a compilation.
enum Flag { enum Flag {
kIsEval = 1 << 0, kIsDebug = 1 << 0,
kIsNative = 1 << 1, kIsEval = 1 << 1,
kSerializing = 1 << 2, kIsNative = 1 << 2,
kAccessorInliningEnabled = 1 << 3, kSerializing = 1 << 3,
kFunctionContextSpecializing = 1 << 4, kAccessorInliningEnabled = 1 << 4,
kInliningEnabled = 1 << 5, kFunctionContextSpecializing = 1 << 5,
kDisableFutureOptimization = 1 << 6, kInliningEnabled = 1 << 6,
kSplittingEnabled = 1 << 7, kDisableFutureOptimization = 1 << 7,
kSourcePositionsEnabled = 1 << 8, kSplittingEnabled = 1 << 8,
kBailoutOnUninitialized = 1 << 9, kSourcePositionsEnabled = 1 << 9,
kLoopPeelingEnabled = 1 << 10, kBailoutOnUninitialized = 1 << 10,
kLoopPeelingEnabled = 1 << 11,
}; };
// Construct a compilation info for unoptimized compilation. // Construct a compilation info for unoptimized compilation.
...@@ -107,6 +108,11 @@ class V8_EXPORT_PRIVATE CompilationInfo final { ...@@ -107,6 +108,11 @@ class V8_EXPORT_PRIVATE CompilationInfo final {
// Flags used by unoptimized compilation. // Flags used by unoptimized compilation.
// Compiles marked as debug produce unoptimized code with debug break slots.
// Inner functions that cannot be compiled w/o context are compiled eagerly.
void MarkAsDebug() { SetFlag(kIsDebug); }
bool is_debug() const { return GetFlag(kIsDebug); }
void MarkAsSerializing() { SetFlag(kSerializing); } void MarkAsSerializing() { SetFlag(kSerializing); }
bool will_serialize() const { return GetFlag(kSerializing); } bool will_serialize() const { return GetFlag(kSerializing); }
...@@ -155,7 +161,7 @@ class V8_EXPORT_PRIVATE CompilationInfo final { ...@@ -155,7 +161,7 @@ class V8_EXPORT_PRIVATE CompilationInfo final {
// Generate a pre-aged prologue if we are optimizing for size, which // Generate a pre-aged prologue if we are optimizing for size, which
// will make code old more aggressive. Only apply to Code::FUNCTION, // will make code old more aggressive. Only apply to Code::FUNCTION,
// since only functions are aged in the compilation cache. // since only functions are aged in the compilation cache.
return FLAG_optimize_for_size && FLAG_age_code && return FLAG_optimize_for_size && FLAG_age_code && !is_debug() &&
output_code_kind() == Code::FUNCTION; output_code_kind() == Code::FUNCTION;
} }
......
This diff is collapsed.
...@@ -47,10 +47,9 @@ class V8_EXPORT_PRIVATE Compiler : public AllStatic { ...@@ -47,10 +47,9 @@ class V8_EXPORT_PRIVATE Compiler : public AllStatic {
// whereas successful compilation ensures the {is_compiled} predicate on the // whereas successful compilation ensures the {is_compiled} predicate on the
// given function holds (except for live-edit, which compiles the world). // given function holds (except for live-edit, which compiles the world).
static bool Compile(Handle<SharedFunctionInfo> shared,
ClearExceptionFlag flag);
static bool Compile(Handle<JSFunction> function, ClearExceptionFlag flag); static bool Compile(Handle<JSFunction> function, ClearExceptionFlag flag);
static bool CompileOptimized(Handle<JSFunction> function, ConcurrencyMode); static bool CompileOptimized(Handle<JSFunction> function, ConcurrencyMode);
static bool CompileDebugCode(Handle<SharedFunctionInfo> shared);
static MaybeHandle<JSArray> CompileForLiveEdit(Handle<Script> script); static MaybeHandle<JSArray> CompileForLiveEdit(Handle<Script> script);
// Prepare a compilation job for unoptimized code. Requires ParseAndAnalyse. // Prepare a compilation job for unoptimized code. Requires ParseAndAnalyse.
...@@ -76,6 +75,9 @@ class V8_EXPORT_PRIVATE Compiler : public AllStatic { ...@@ -76,6 +75,9 @@ class V8_EXPORT_PRIVATE Compiler : public AllStatic {
// is appended with inner function literals which should be eagerly compiled. // is appended with inner function literals which should be eagerly compiled.
static bool Analyze(ParseInfo* parse_info, static bool Analyze(ParseInfo* parse_info,
EagerInnerFunctionLiterals* eager_literals = nullptr); EagerInnerFunctionLiterals* eager_literals = nullptr);
// Ensures that bytecode is generated, calls ParseAndAnalyze internally.
static bool EnsureBytecode(ParseInfo* parse_info, Isolate* isolate,
Handle<SharedFunctionInfo> shared_info);
// =========================================================================== // ===========================================================================
// The following family of methods instantiates new functions for scripts or // The following family of methods instantiates new functions for scripts or
......
...@@ -504,11 +504,14 @@ Reduction JSInliner::ReduceJSCall(Node* node) { ...@@ -504,11 +504,14 @@ Reduction JSInliner::ReduceJSCall(Node* node) {
return NoChange(); return NoChange();
} }
if (!shared_info->is_compiled() && ParseInfo parse_info(shared_info);
!Compiler::Compile(shared_info, Compiler::CLEAR_EXCEPTION)) { if (!Compiler::EnsureBytecode(&parse_info, info_->isolate(), shared_info)) {
TRACE("Not inlining %s into %s because bytecode generation failed\n", TRACE("Not inlining %s into %s because bytecode generation failed\n",
shared_info->DebugName()->ToCString().get(), shared_info->DebugName()->ToCString().get(),
info_->shared_info()->DebugName()->ToCString().get()); info_->shared_info()->DebugName()->ToCString().get());
if (info_->isolate()->has_pending_exception()) {
info_->isolate()->clear_pending_exception();
}
return NoChange(); return NoChange();
} }
...@@ -540,8 +543,9 @@ Reduction JSInliner::ReduceJSCall(Node* node) { ...@@ -540,8 +543,9 @@ Reduction JSInliner::ReduceJSCall(Node* node) {
flags |= JSTypeHintLowering::kBailoutOnUninitialized; flags |= JSTypeHintLowering::kBailoutOnUninitialized;
} }
BytecodeGraphBuilder graph_builder( BytecodeGraphBuilder graph_builder(
zone(), shared_info, feedback_vector, BailoutId::None(), jsgraph(), parse_info.zone(), shared_info, feedback_vector, BailoutId::None(),
call.frequency(), source_positions_, inlining_id, flags, false); jsgraph(), call.frequency(), source_positions_, inlining_id, flags,
false);
graph_builder.CreateGraph(); graph_builder.CreateGraph();
// Extract the inlinee start/end nodes. // Extract the inlinee start/end nodes.
......
...@@ -41,7 +41,6 @@ class JSInliner final : public AdvancedReducer { ...@@ -41,7 +41,6 @@ class JSInliner final : public AdvancedReducer {
Reduction ReduceJSCall(Node* node); Reduction ReduceJSCall(Node* node);
private: private:
Zone* zone() const { return local_zone_; }
CommonOperatorBuilder* common() const; CommonOperatorBuilder* common() const;
JSOperatorBuilder* javascript() const; JSOperatorBuilder* javascript() const;
SimplifiedOperatorBuilder* simplified() const; SimplifiedOperatorBuilder* simplified() const;
......
...@@ -767,6 +767,7 @@ class RuntimeCallTimer final { ...@@ -767,6 +767,7 @@ class RuntimeCallTimer final {
V(CompileBackgroundIgnition) \ V(CompileBackgroundIgnition) \
V(CompileFunction) \ V(CompileFunction) \
V(CompileGetFromOptimizedCodeMap) \ V(CompileGetFromOptimizedCodeMap) \
V(CompileUnoptimizedFunction) \
V(CompileIgnition) \ V(CompileIgnition) \
V(CompileIgnitionFinalization) \ V(CompileIgnitionFinalization) \
V(CompileInnerFunction) \ V(CompileInnerFunction) \
......
...@@ -1190,7 +1190,7 @@ bool Debug::GetPossibleBreakpoints(Handle<Script> script, int start_position, ...@@ -1190,7 +1190,7 @@ bool Debug::GetPossibleBreakpoints(Handle<Script> script, int start_position,
// Code that cannot be compiled lazily are internal and not debuggable. // Code that cannot be compiled lazily are internal and not debuggable.
DCHECK(candidates[i]->allows_lazy_compilation()); DCHECK(candidates[i]->allows_lazy_compilation());
if (!candidates[i]->is_compiled()) { if (!candidates[i]->is_compiled()) {
if (!Compiler::Compile(candidates[i], Compiler::CLEAR_EXCEPTION)) { if (!Compiler::CompileDebugCode(candidates[i])) {
return false; return false;
} else { } else {
was_compiled = true; was_compiled = true;
...@@ -1317,7 +1317,7 @@ Handle<Object> Debug::FindSharedFunctionInfoInScript(Handle<Script> script, ...@@ -1317,7 +1317,7 @@ Handle<Object> Debug::FindSharedFunctionInfoInScript(Handle<Script> script,
HandleScope scope(isolate_); HandleScope scope(isolate_);
// Code that cannot be compiled lazily are internal and not debuggable. // Code that cannot be compiled lazily are internal and not debuggable.
DCHECK(shared->allows_lazy_compilation()); DCHECK(shared->allows_lazy_compilation());
if (!Compiler::Compile(handle(shared), Compiler::CLEAR_EXCEPTION)) break; if (!Compiler::CompileDebugCode(handle(shared))) break;
} }
return isolate_->factory()->undefined_value(); return isolate_->factory()->undefined_value();
} }
...@@ -1328,8 +1328,7 @@ bool Debug::EnsureBreakInfo(Handle<SharedFunctionInfo> shared) { ...@@ -1328,8 +1328,7 @@ bool Debug::EnsureBreakInfo(Handle<SharedFunctionInfo> shared) {
// Return if we already have the break info for shared. // Return if we already have the break info for shared.
if (shared->HasBreakInfo()) return true; if (shared->HasBreakInfo()) return true;
if (!shared->IsSubjectToDebugging()) return false; if (!shared->IsSubjectToDebugging()) return false;
if (!shared->is_compiled() && if (!shared->is_compiled() && !Compiler::CompileDebugCode(shared)) {
!Compiler::Compile(shared, Compiler::CLEAR_EXCEPTION)) {
return false; return false;
} }
CreateBreakInfo(shared); CreateBreakInfo(shared);
...@@ -2161,10 +2160,7 @@ ReturnValueScope::~ReturnValueScope() { ...@@ -2161,10 +2160,7 @@ ReturnValueScope::~ReturnValueScope() {
bool Debug::PerformSideEffectCheck(Handle<JSFunction> function) { bool Debug::PerformSideEffectCheck(Handle<JSFunction> function) {
DCHECK(isolate_->needs_side_effect_check()); DCHECK(isolate_->needs_side_effect_check());
DisallowJavascriptExecution no_js(isolate_); DisallowJavascriptExecution no_js(isolate_);
if (!function->is_compiled() && if (!Compiler::Compile(function, Compiler::KEEP_EXCEPTION)) return false;
!Compiler::Compile(function, Compiler::KEEP_EXCEPTION)) {
return false;
}
Deoptimizer::DeoptimizeFunction(*function); Deoptimizer::DeoptimizeFunction(*function);
if (!function->shared()->HasNoSideEffect()) { if (!function->shared()->HasNoSideEffect()) {
if (FLAG_trace_side_effect_free_debug_evaluate) { if (FLAG_trace_side_effect_free_debug_evaluate) {
......
...@@ -742,8 +742,7 @@ RUNTIME_FUNCTION(Runtime_DisassembleFunction) { ...@@ -742,8 +742,7 @@ RUNTIME_FUNCTION(Runtime_DisassembleFunction) {
DCHECK_EQ(1, args.length()); DCHECK_EQ(1, args.length());
// Get the function and make sure it is compiled. // Get the function and make sure it is compiled.
CONVERT_ARG_HANDLE_CHECKED(JSFunction, func, 0); CONVERT_ARG_HANDLE_CHECKED(JSFunction, func, 0);
if (!func->is_compiled() && if (!Compiler::Compile(func, Compiler::KEEP_EXCEPTION)) {
!Compiler::Compile(func, Compiler::KEEP_EXCEPTION)) {
return isolate->heap()->exception(); return isolate->heap()->exception();
} }
OFStream os(stdout); OFStream os(stdout);
......
...@@ -146,8 +146,7 @@ Handle<JSFunction> FunctionTester::Compile(Handle<JSFunction> function) { ...@@ -146,8 +146,7 @@ Handle<JSFunction> FunctionTester::Compile(Handle<JSFunction> function) {
info.MarkAsInliningEnabled(); info.MarkAsInliningEnabled();
} }
CHECK(function->is_compiled() || CHECK(Compiler::Compile(function, Compiler::CLEAR_EXCEPTION));
Compiler::Compile(function, Compiler::CLEAR_EXCEPTION));
CHECK(info.shared_info()->HasBytecodeArray()); CHECK(info.shared_info()->HasBytecodeArray());
JSFunction::EnsureLiterals(function); JSFunction::EnsureLiterals(function);
......
...@@ -3845,7 +3845,6 @@ TEST(EnsureAllocationSiteDependentCodesProcessed) { ...@@ -3845,7 +3845,6 @@ TEST(EnsureAllocationSiteDependentCodesProcessed) {
} }
TEST(AllocationSiteCreation) { TEST(AllocationSiteCreation) {
FLAG_always_opt = false;
CcTest::InitializeVM(); CcTest::InitializeVM();
Isolate* isolate = CcTest::i_isolate(); Isolate* isolate = CcTest::i_isolate();
Heap* heap = isolate->heap(); Heap* heap = isolate->heap();
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Flags: --no-always-opt --no-stress-opt
Debug = debug.Debug Debug = debug.Debug
var exception = null; var exception = null;
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Flags: --no-always-opt --no-stress-opt
Debug = debug.Debug Debug = debug.Debug
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Flags: --no-always-opt --no-stress-opt
Debug = debug.Debug Debug = debug.Debug
......
...@@ -50,20 +50,46 @@ Paused #2 ...@@ -50,20 +50,46 @@ Paused #2
- [0] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":18,"columnNumber":12} - [0] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":18,"columnNumber":12}
- [1] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0} - [1] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0}
Paused #3 Paused #3
- [0] {"functionName":"generateAsmJs","function_lineNumber":1,"function_columnNumber":24,"lineNumber":3,"columnNumber":31}
- [1] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":18,"columnNumber":12}
- [2] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0}
Paused #4
- [0] {"functionName":"generateAsmJs","function_lineNumber":1,"function_columnNumber":24,"lineNumber":10,"columnNumber":4}
- [1] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":18,"columnNumber":12}
- [2] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0}
Paused #5
- [0] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":19,"columnNumber":2} - [0] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":19,"columnNumber":2}
- [1] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0} - [1] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0}
Paused #4 Paused #6
- [0] {"functionName":"redirectFun","function_lineNumber":7,"function_columnNumber":24,"lineNumber":8,"columnNumber":6}
- [1] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":19,"columnNumber":2}
- [2] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0}
Paused #7
- [0] {"functionName":"callDebugger","function_lineNumber":4,"function_columnNumber":25,"lineNumber":5,"columnNumber":6}
- [1] {"functionName":"redirectFun","function_lineNumber":7,"function_columnNumber":24,"lineNumber":8,"columnNumber":6}
- [2] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":19,"columnNumber":2}
- [3] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0}
Paused #8
- [0] {"functionName":"call_debugger","function_lineNumber":13,"function_columnNumber":24,"lineNumber":14,"columnNumber":4} - [0] {"functionName":"call_debugger","function_lineNumber":13,"function_columnNumber":24,"lineNumber":14,"columnNumber":4}
- [1] {"functionName":"callDebugger","lineNumber":5,"columnNumber":6} - [1] {"functionName":"callDebugger","function_lineNumber":4,"function_columnNumber":25,"lineNumber":5,"columnNumber":6}
- [2] {"functionName":"redirectFun","lineNumber":8,"columnNumber":6} - [2] {"functionName":"redirectFun","function_lineNumber":7,"function_columnNumber":24,"lineNumber":8,"columnNumber":6}
- [3] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":19,"columnNumber":2} - [3] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":19,"columnNumber":2}
- [4] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0} - [4] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0}
Paused #5 Paused #9
- [0] {"functionName":"call_debugger","function_lineNumber":13,"function_columnNumber":24,"lineNumber":15,"columnNumber":2} - [0] {"functionName":"call_debugger","function_lineNumber":13,"function_columnNumber":24,"lineNumber":15,"columnNumber":2}
- [1] {"functionName":"callDebugger","lineNumber":5,"columnNumber":6} - [1] {"functionName":"callDebugger","function_lineNumber":4,"function_columnNumber":25,"lineNumber":5,"columnNumber":6}
- [2] {"functionName":"redirectFun","lineNumber":8,"columnNumber":6} - [2] {"functionName":"redirectFun","function_lineNumber":7,"function_columnNumber":24,"lineNumber":8,"columnNumber":6}
- [3] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":19,"columnNumber":2} - [3] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":19,"columnNumber":2}
- [4] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0} - [4] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0}
Paused #10
- [0] {"functionName":"callDebugger","function_lineNumber":4,"function_columnNumber":25,"lineNumber":6,"columnNumber":4}
- [1] {"functionName":"redirectFun","function_lineNumber":7,"function_columnNumber":24,"lineNumber":8,"columnNumber":6}
- [2] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":19,"columnNumber":2}
- [3] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0}
Paused #11
- [0] {"functionName":"redirectFun","function_lineNumber":7,"function_columnNumber":24,"lineNumber":9,"columnNumber":4}
- [1] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":19,"columnNumber":2}
- [2] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0}
Running test: finished Running test: finished
Finished TestSuite. Finished TestSuite.
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Flags: --no-always-opt --no-stress-opt
// Generate a function with a very large closure. // Generate a function with a very large closure.
source = "(function() {\n" source = "(function() {\n"
for (var i = 0; i < 65000; i++) { for (var i = 0; i < 65000; i++) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment