Reviewers: Vyacheslav Egorov,
Message:
Please take a look.
Description:
Mark Code objects as not optimizable if their FunctionLiteral contains
unoptimizable AST nodes.
This ensures that we never try to optimize such functions.
Please review this at https://chromiumcodereview.appspot.com/9700062/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/ast.cc
M src/full-codegen.cc
M src/objects.cc
Index: src/ast.cc
diff --git a/src/ast.cc b/src/ast.cc
index
011ce651cd0566e30ceb9a1626b88f3642ba8347..629e4722b5cbe0e89cde4f05f5d6dbbc7570e64f
100644
--- a/src/ast.cc
+++ b/src/ast.cc
@@ -1061,8 +1061,6 @@ void
AstConstructionVisitor::VisitForStatement(ForStatement* node) {
void AstConstructionVisitor::VisitForInStatement(ForInStatement* node) {
increase_node_count();
- add_flag(kDontOptimize);
- add_flag(kDontInline);
add_flag(kDontSelfOptimize);
}
Index: src/full-codegen.cc
diff --git a/src/full-codegen.cc b/src/full-codegen.cc
index
f77c82df5129019d1f686a6c6e1ccf23491dc882..d963979ad867f0a8bc2d6c649af00383bed442da
100644
--- a/src/full-codegen.cc
+++ b/src/full-codegen.cc
@@ -313,7 +313,8 @@ bool FullCodeGenerator::MakeCode(CompilationInfo* info)
{
Code::Flags flags = Code::ComputeFlags(Code::FUNCTION);
Handle<Code> code = CodeGenerator::MakeCodeEpilogue(&masm, flags, info);
- code->set_optimizable(info->IsOptimizable());
+ code->set_optimizable(info->IsOptimizable() &&
+ !info->function()->flags()->Contains(kDontOptimize));
code->set_self_optimization_header(cgen.has_self_optimization_header_);
cgen.PopulateDeoptimizationData(code);
cgen.PopulateTypeFeedbackInfo(code);
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index
a0872c6a2492154f2320c4e9b926c0e4ebf310ec..efcff1dd9c304ff7e0f8b48c6896260f20da1bc6
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -7380,6 +7380,7 @@ void JSFunction::MarkForLazyRecompilation() {
ASSERT(is_compiled() && !IsOptimized());
ASSERT(shared()->allows_lazy_compilation() ||
code()->optimizable());
+ ASSERT(!shared()->optimization_disabled());
Builtins* builtins = GetIsolate()->builtins();
ReplaceCode(builtins->builtin(Builtins::kLazyRecompile));
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev