| Index: src/ast.h | 
| =================================================================== | 
| --- src/ast.h	(revision 10686) | 
| +++ src/ast.h	(working copy) | 
| @@ -223,8 +223,6 @@ | 
| virtual IterationStatement* AsIterationStatement() { return NULL; } | 
| virtual MaterializedLiteral* AsMaterializedLiteral() { return NULL; } | 
|  | 
| -  static void ResetIds() { Isolate::Current()->set_ast_node_id(0); } | 
| - | 
| protected: | 
| static int GetNextId(Isolate* isolate) { | 
| return ReserveIdRange(isolate, 1); | 
| @@ -1905,6 +1903,16 @@ | 
| DECLARATION | 
| }; | 
|  | 
| +  enum ParameterFlag { | 
| +    kNoDuplicateParameters = 0, | 
| +    kHasDuplicateParameters = 1 | 
| +  }; | 
| + | 
| +  enum IsFunctionFlag { | 
| +    kGlobalOrEval, | 
| +    kIsFunction | 
| +  }; | 
| + | 
| DECLARE_NODE_TYPE(FunctionLiteral) | 
|  | 
| Handle<String> name() const { return name_; } | 
| @@ -1914,6 +1922,7 @@ | 
| int function_token_position() const { return function_token_position_; } | 
| int start_position() const; | 
| int end_position() const; | 
| +  int SourceSize() const { return end_position() - start_position(); } | 
| bool is_expression() const { return IsExpression::decode(bitfield_); } | 
| bool is_anonymous() const { return IsAnonymous::decode(bitfield_); } | 
| bool is_classic_mode() const { return language_mode() == CLASSIC_MODE; } | 
| @@ -1949,6 +1958,8 @@ | 
| return HasDuplicateParameters::decode(bitfield_); | 
| } | 
|  | 
| +  bool is_function() { return IsFunction::decode(bitfield_) == kIsFunction; } | 
| + | 
| int ast_node_count() { return ast_properties_.node_count(); } | 
| AstProperties::Flags* flags() { return ast_properties_.flags(); } | 
| void set_ast_properties(AstProperties* ast_properties) { | 
| @@ -1969,7 +1980,8 @@ | 
| Handle<FixedArray> this_property_assignments, | 
| int parameter_count, | 
| Type type, | 
| -                  bool has_duplicate_parameters) | 
| +                  ParameterFlag has_duplicate_parameters, | 
| +                  IsFunctionFlag is_function) | 
| : Expression(isolate), | 
| name_(name), | 
| scope_(scope), | 
| @@ -1987,7 +1999,8 @@ | 
| IsExpression::encode(type != DECLARATION) | | 
| IsAnonymous::encode(type == ANONYMOUS_EXPRESSION) | | 
| Pretenure::encode(false) | | 
| -        HasDuplicateParameters::encode(has_duplicate_parameters); | 
| +        HasDuplicateParameters::encode(has_duplicate_parameters) | | 
| +        IsFunction::encode(is_function); | 
| } | 
|  | 
| private: | 
| @@ -2009,7 +2022,8 @@ | 
| class IsExpression: public BitField<bool, 1, 1> {}; | 
| class IsAnonymous: public BitField<bool, 2, 1> {}; | 
| class Pretenure: public BitField<bool, 3, 1> {}; | 
| -  class HasDuplicateParameters: public BitField<bool, 4, 1> {}; | 
| +  class HasDuplicateParameters: public BitField<ParameterFlag, 4, 1> {}; | 
| +  class IsFunction: public BitField<IsFunctionFlag, 5, 1> {}; | 
| }; | 
|  | 
|  | 
| @@ -2778,15 +2792,16 @@ | 
| bool has_only_simple_this_property_assignments, | 
| Handle<FixedArray> this_property_assignments, | 
| int parameter_count, | 
| -      bool has_duplicate_parameters, | 
| +      FunctionLiteral::ParameterFlag has_duplicate_parameters, | 
| FunctionLiteral::Type type, | 
| -      bool visit_with_visitor) { | 
| +      FunctionLiteral::IsFunctionFlag is_function) { | 
| FunctionLiteral* lit = new(zone_) FunctionLiteral( | 
| isolate_, name, scope, body, | 
| materialized_literal_count, expected_property_count, handler_count, | 
| has_only_simple_this_property_assignments, this_property_assignments, | 
| -        parameter_count, type, has_duplicate_parameters); | 
| -    if (visit_with_visitor) { | 
| +        parameter_count, type, has_duplicate_parameters, is_function); | 
| +    // Top-level literal doesn't count for the AST's properties. | 
| +    if (is_function == FunctionLiteral::kIsFunction) { | 
| visitor_.VisitFunctionLiteral(lit); | 
| } | 
| return lit; | 
|  |