Reviewers: Kasper Lund, Description: Assert in debug mode that we do not try to compile a function literal more than once.
Please review this at http://codereview.chromium.org/39339 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/ast.h M src/codegen.cc Index: src/ast.h =================================================================== --- src/ast.h (revision 1452) +++ src/ast.h (working copy) @@ -1197,6 +1197,9 @@ is_expression_(is_expression), loop_nesting_(0), function_token_position_(RelocInfo::kNoPosition) { +#ifdef DEBUG + already_compiled_ = false; +#endif } virtual void Accept(AstVisitor* v); @@ -1223,6 +1226,11 @@ bool loop_nesting() const { return loop_nesting_; } void set_loop_nesting(int nesting) { loop_nesting_ = nesting; } +#ifdef DEBUG + bool already_compiled() const { return already_compiled_; } + void mark_as_compiled() { already_compiled_ = true; } +#endif + private: Handle<String> name_; Scope* scope_; @@ -1236,6 +1244,9 @@ bool is_expression_; int loop_nesting_; int function_token_position_; +#ifdef DEBUG + bool already_compiled_; +#endif }; Index: src/codegen.cc =================================================================== --- src/codegen.cc (revision 1452) +++ src/codegen.cc (working copy) @@ -237,6 +237,13 @@ Handle<JSFunction> CodeGenerator::BuildBoilerplate(FunctionLiteral* node) { +#ifdef DEBUG + // We should not try to compile the same function literal more than + // once. + ASSERT(!node->already_compiled()); + node->mark_as_compiled(); +#endif + // Determine if the function can be lazily compiled. This is // necessary to allow some of our builtin JS files to be lazily // compiled. These builtins cannot be handled lazily by the parser, --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---