is_expression_(is_expression),
loop_nesting_(0),
function_token_position_(RelocInfo::kNoPosition) {
+#ifdef DEBUG
+ already_compiled_ = false;
+#endif
}
virtual void Accept(AstVisitor* v);
bool loop_nesting() const { return loop_nesting_; }
void set_loop_nesting(int nesting) { loop_nesting_ = nesting; }
+#ifdef DEBUG
+ void mark_as_compiled() {
+ ASSERT(!already_compiled_);
+ already_compiled_ = true;
+ }
+#endif
+
private:
Handle<String> name_;
Scope* scope_;
bool is_expression_;
int loop_nesting_;
int function_token_position_;
+#ifdef DEBUG
+ bool already_compiled_;
+#endif
};
Handle<JSFunction> CodeGenerator::BuildBoilerplate(FunctionLiteral* node) {
+#ifdef DEBUG
+ // We should not try to compile the same function literal more than
+ // once.
+ 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,