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; |