| Index: src/parser.h
|
| diff --git a/src/parser.h b/src/parser.h
|
| index c815a4546257ef74b0ae3bb2b94778b3c0abc648..0b8e5a86e3494d7e2313e76ddd8f0fa10825f861 100644
|
| --- a/src/parser.h
|
| +++ b/src/parser.h
|
| @@ -593,6 +593,48 @@ class ParserTraits {
|
| V8_INLINE void CheckConflictingVarDeclarations(v8::internal::Scope* scope,
|
| bool* ok);
|
|
|
| + class TemplateLiteral : public ZoneObject {
|
| + public:
|
| + TemplateLiteral(Zone* zone, int pos)
|
| + : cooked_(8, zone),
|
| + raw_(8, zone),
|
| + expressions_(8, zone),
|
| + pos_(pos) {}
|
| +
|
| + const ZoneList<Expression*>* cooked() const { return &cooked_; }
|
| + const ZoneList<Expression*>* raw() const { return &raw_; }
|
| + const ZoneList<Expression*>* expressions() const { return &expressions_; }
|
| + int position() const { return pos_; }
|
| +
|
| + void AddTemplateSpan(Literal* cooked, Literal* raw, Zone* zone) {
|
| + DCHECK_NOT_NULL(cooked);
|
| + DCHECK_NOT_NULL(raw);
|
| + cooked_.Add(cooked, zone);
|
| + raw_.Add(raw, zone);
|
| + }
|
| +
|
| + void AddExpression(Expression* expression, Zone* zone) {
|
| + DCHECK_NOT_NULL(expression);
|
| + expressions_.Add(expression, zone);
|
| + }
|
| +
|
| + private:
|
| + ZoneList<Expression*> cooked_;
|
| + ZoneList<Expression*> raw_;
|
| + ZoneList<Expression*> expressions_;
|
| + int pos_;
|
| + };
|
| +
|
| + typedef TemplateLiteral* TemplateLiteralState;
|
| +
|
| + V8_INLINE TemplateLiteralState OpenTemplateLiteral(int pos);
|
| + V8_INLINE void AddTemplateSpan(TemplateLiteralState* state);
|
| + V8_INLINE void AddTemplateExpression(TemplateLiteralState* state,
|
| + Expression* expression);
|
| + V8_INLINE Expression* CloseTemplateLiteral(TemplateLiteralState* state,
|
| + int start, Expression* tag);
|
| + V8_INLINE Expression* NoTemplateTag() { return NULL; }
|
| +
|
| private:
|
| Parser* parser_;
|
| };
|
| @@ -827,6 +869,12 @@ class Parser : public ParserBase<ParserTraits> {
|
|
|
| void ThrowPendingError();
|
|
|
| + TemplateLiteralState OpenTemplateLiteral(int pos);
|
| + void AddTemplateSpan(TemplateLiteralState* state);
|
| + void AddTemplateExpression(TemplateLiteralState* state,
|
| + Expression* expression);
|
| + Expression* CloseTemplateLiteral(TemplateLiteralState* state,
|
| + int start, Expression* tag);
|
| Scanner scanner_;
|
| PreParser* reusable_preparser_;
|
| Scope* original_scope_; // for ES5 function declarations in sloppy eval
|
| @@ -926,6 +974,21 @@ class CompileTimeValue: public AllStatic {
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue);
|
| };
|
|
|
| +ParserTraits::TemplateLiteralState ParserTraits::OpenTemplateLiteral(int pos) {
|
| + return parser_->OpenTemplateLiteral(pos);
|
| +}
|
| +
|
| +void ParserTraits::AddTemplateSpan(TemplateLiteralState* state) {
|
| + parser_->AddTemplateSpan(state);
|
| +}
|
| +void ParserTraits::AddTemplateExpression(TemplateLiteralState* state,
|
| + Expression* expression) {
|
| + parser_->AddTemplateExpression(state, expression);
|
| +}
|
| +Expression* ParserTraits::CloseTemplateLiteral(TemplateLiteralState* state,
|
| + int start, Expression* tag) {
|
| + return parser_->CloseTemplateLiteral(state, start, tag);
|
| +}
|
| } } // namespace v8::internal
|
|
|
| #endif // V8_PARSER_H_
|
|
|