diff options
author | isaacs <i@izs.me> | 2012-02-23 16:35:46 -0800 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-02-27 12:11:09 -0800 |
commit | f4641bd4de566145e99b05c47c8f3d629b0223cd (patch) | |
tree | 2d0ccb1c338bec65881b30c49707d9e688fed154 /deps/v8/src/compiler.cc | |
parent | 82ad1f87fa99b420a97cc9bfae727fce0b1bf8a4 (diff) | |
download | node-new-f4641bd4de566145e99b05c47c8f3d629b0223cd.tar.gz |
Update v8 to 3.9.9
Diffstat (limited to 'deps/v8/src/compiler.cc')
-rw-r--r-- | deps/v8/src/compiler.cc | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/deps/v8/src/compiler.cc b/deps/v8/src/compiler.cc index aea889f8be..5d7dbd1624 100644 --- a/deps/v8/src/compiler.cc +++ b/deps/v8/src/compiler.cc @@ -61,7 +61,7 @@ CompilationInfo::CompilationInfo(Handle<Script> script) extension_(NULL), pre_parse_data_(NULL), osr_ast_id_(AstNode::kNoNumber) { - Initialize(NONOPT); + Initialize(BASE); } @@ -182,10 +182,8 @@ static void FinishOptimization(Handle<JSFunction> function, int64_t start) { static bool MakeCrankshaftCode(CompilationInfo* info) { // Test if we can optimize this function when asked to. We can only // do this after the scopes are computed. - if (!info->AllowOptimize()) { + if (!V8::UseCrankshaft()) { info->DisableOptimization(); - } else if (info->IsOptimizable()) { - info->EnableDeoptimizationSupport(); } // In case we are not optimizing simply return the code from @@ -217,8 +215,7 @@ static bool MakeCrankshaftCode(CompilationInfo* info) { FLAG_deopt_every_n_times == 0 ? Compiler::kDefaultMaxOptCount : 1000; if (info->shared_info()->opt_count() > kMaxOptCount) { info->AbortOptimization(); - Handle<JSFunction> closure = info->closure(); - info->shared_info()->DisableOptimization(*closure); + info->shared_info()->DisableOptimization(); // True indicates the compilation pipeline is still going, not // necessarily that we optimized the code. return true; @@ -238,8 +235,7 @@ static bool MakeCrankshaftCode(CompilationInfo* info) { (info->osr_ast_id() != AstNode::kNoNumber && scope->num_parameters() + 1 + scope->num_stack_slots() > locals_limit)) { info->AbortOptimization(); - Handle<JSFunction> closure = info->closure(); - info->shared_info()->DisableOptimization(*closure); + info->shared_info()->DisableOptimization(); // True indicates the compilation pipeline is still going, not // necessarily that we optimized the code. return true; @@ -317,8 +313,7 @@ static bool MakeCrankshaftCode(CompilationInfo* info) { if (!builder.inline_bailout()) { // Mark the shared code as unoptimizable unless it was an inlined // function that bailed out. - Handle<JSFunction> closure = info->closure(); - info->shared_info()->DisableOptimization(*closure); + info->shared_info()->DisableOptimization(); } // True indicates the compilation pipeline is still going, not necessarily // that we optimized the code. @@ -502,13 +497,6 @@ Handle<SharedFunctionInfo> Compiler::Compile(Handle<String> source, // for small sources, odds are that there aren't many functions // that would be compiled lazily anyway, so we skip the preparse step // in that case too. - int flags = kNoParsingFlags; - if ((natives == NATIVES_CODE) || FLAG_allow_natives_syntax) { - flags |= kAllowNativesSyntax; - } - if (natives != NATIVES_CODE && FLAG_harmony_scoping) { - flags |= EXTENDED_MODE; - } // Create a script object describing the script to be compiled. Handle<Script> script = FACTORY->NewScript(source); @@ -529,6 +517,7 @@ Handle<SharedFunctionInfo> Compiler::Compile(Handle<String> source, info.MarkAsGlobal(); info.SetExtension(extension); info.SetPreParseData(pre_data); + if (FLAG_use_strict) info.SetLanguageMode(STRICT_MODE); result = MakeFunctionInfo(&info); if (extension == NULL && !result.is_null()) { compilation_cache->PutScript(source, result); @@ -573,6 +562,10 @@ Handle<SharedFunctionInfo> Compiler::CompileEval(Handle<String> source, info.SetCallingContext(context); result = MakeFunctionInfo(&info); if (!result.is_null()) { + // Explicitly disable optimization for eval code. We're not yet prepared + // to handle eval-code in the optimizing compiler. + result->DisableOptimization(); + // If caller is strict mode, the result must be in strict mode or // extended mode as well, but not the other way around. Consider: // eval("'use strict'; ..."); @@ -664,11 +657,13 @@ bool Compiler::CompileLazy(CompilationInfo* info) { // Check the function has compiled code. ASSERT(shared->is_compiled()); shared->set_code_age(0); - shared->set_dont_crankshaft(lit->flags()->Contains(kDontOptimize)); + shared->set_dont_optimize(lit->flags()->Contains(kDontOptimize)); shared->set_dont_inline(lit->flags()->Contains(kDontInline)); shared->set_ast_node_count(lit->ast_node_count()); - if (info->AllowOptimize() && !shared->optimization_disabled()) { + if (V8::UseCrankshaft()&& + !function.is_null() && + !shared->optimization_disabled()) { // If we're asked to always optimize, we compile the optimized // version of the function right away - unless the debugger is // active as it makes no sense to compile optimized code then. @@ -766,7 +761,8 @@ void Compiler::SetFunctionInfo(Handle<SharedFunctionInfo> function_info, function_info->set_uses_arguments(lit->scope()->arguments() != NULL); function_info->set_has_duplicate_parameters(lit->has_duplicate_parameters()); function_info->set_ast_node_count(lit->ast_node_count()); - function_info->set_dont_crankshaft(lit->flags()->Contains(kDontOptimize)); + function_info->set_is_function(lit->is_function()); + function_info->set_dont_optimize(lit->flags()->Contains(kDontOptimize)); function_info->set_dont_inline(lit->flags()->Contains(kDontInline)); } |