Index: src/parser.h |
diff --git a/src/parser.h b/src/parser.h |
index 062150d53840e292d03bdcbc66f7e3ad281c658e..fd3fc4774b2f76e997cf091be9fe8c6246530558 100644 |
--- a/src/parser.h |
+++ b/src/parser.h |
@@ -39,7 +39,6 @@ namespace v8 { |
namespace internal { |
class CompilationInfo; |
-class FuncNameInferrer; |
class ParserLog; |
class PositionStack; |
class Target; |
@@ -420,7 +419,11 @@ class ParserTraits { |
// Return types for traversing functions. |
typedef Handle<String> Identifier; |
typedef v8::internal::Expression* Expression; |
+ typedef v8::internal::FunctionLiteral* FunctionLiteral; |
+ typedef v8::internal::Literal* Literal; |
+ typedef ObjectLiteral::Property* ObjectLiteralProperty; |
typedef ZoneList<v8::internal::Expression*>* ExpressionList; |
+ typedef ZoneList<ObjectLiteral::Property*>* PropertyList; |
}; |
explicit ParserTraits(Parser* parser) : parser_(parser) {} |
@@ -445,6 +448,27 @@ class ParserTraits { |
// Helper functions for recursive descent. |
bool IsEvalOrArguments(Handle<String> identifier) const; |
+ static bool IsBoilerplateProperty(ObjectLiteral::Property* property) { |
+ return ObjectLiteral::IsBoilerplateProperty(property); |
+ } |
+ |
+ static bool IsArrayIndex(Handle<String> string, uint32_t* index) { |
+ return !string.is_null() && string->AsArrayIndex(index); |
+ } |
+ |
+ static void PushLiteralName(FuncNameInferrer* fni, Handle<String> id) { |
+ fni->PushLiteralName(id); |
+ } |
+ |
+ static void CheckFunctionLiteralInsideTopLevelObjectLiteral( |
+ Scope* scope, Expression* value, bool* has_function) { |
+ if (scope->DeclarationScope()->is_global_scope() && |
+ value->AsFunctionLiteral() != NULL) { |
+ *has_function = true; |
+ value->AsFunctionLiteral()->set_pretenure(); |
+ } |
+ } |
+ |
// Reporting errors. |
void ReportMessageAt(Scanner::Location source_location, |
const char* message, |
@@ -461,6 +485,9 @@ class ParserTraits { |
static Expression* EmptyExpression() { |
return NULL; |
} |
+ static Literal* EmptyLiteral() { |
+ return NULL; |
+ } |
// Odd-ball literal creators. |
Literal* GetLiteralTheHole(int position, |
@@ -472,7 +499,7 @@ class ParserTraits { |
PretenureFlag tenured); |
Expression* ThisExpression(Scope* scope, |
AstNodeFactory<AstConstructionVisitor>* factory); |
- Expression* ExpressionFromLiteral( |
+ Literal* ExpressionFromLiteral( |
Token::Value token, int pos, Scanner* scanner, |
AstNodeFactory<AstConstructionVisitor>* factory); |
Expression* ExpressionFromIdentifier( |
@@ -484,11 +511,21 @@ class ParserTraits { |
ZoneList<v8::internal::Expression*>* NewExpressionList(int size, Zone* zone) { |
return new(zone) ZoneList<v8::internal::Expression*>(size, zone); |
} |
+ ZoneList<ObjectLiteral::Property*>* NewPropertyList(int size, Zone* zone) { |
+ return new(zone) ZoneList<ObjectLiteral::Property*>(size, zone); |
+ } |
// Temporary glue; these functions will move to ParserBase. |
- Expression* ParseObjectLiteral(bool* ok); |
Expression* ParseAssignmentExpression(bool accept_IN, bool* ok); |
Expression* ParseV8Intrinsic(bool* ok); |
+ FunctionLiteral* ParseFunctionLiteral( |
+ Handle<String> name, |
+ Scanner::Location function_name_location, |
+ bool name_is_strict_reserved, |
+ bool is_generator, |
+ int function_token_position, |
+ FunctionLiteral::FunctionType type, |
+ bool* ok); |
private: |
Parser* parser_; |
@@ -749,7 +786,6 @@ class Parser : public ParserBase<ParserTraits> { |
Scope* original_scope_; // for ES5 function declarations in sloppy eval |
Target* target_stack_; // for break, continue statements |
ScriptDataImpl* pre_parse_data_; |
- FuncNameInferrer* fni_; |
Mode mode_; |