LGTM. You could move the !already_compiled assertion to the
mark_as_compiled function, but I guess that's a matter of taste.

On Mon, Mar 9, 2009 at 3:34 PM,  <kmilli...@chromium.org> wrote:
> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to