Chromium Code Reviews| Index: src/parser.h |
| diff --git a/src/parser.h b/src/parser.h |
| index c815a4546257ef74b0ae3bb2b94778b3c0abc648..a1be9ce368d3596487262497f338491f3688156b 100644 |
| --- a/src/parser.h |
| +++ b/src/parser.h |
| @@ -593,6 +593,47 @@ 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), |
| + lengths_(8, zone), |
| + expressions_(8, zone), |
| + pos_(pos) {} |
| + |
| + const ZoneList<Expression*>* cooked() const { return &cooked_; } |
| + const ZoneList<int>* lengths() const { return &lengths_; } |
| + const ZoneList<Expression*>* expressions() const { return &expressions_; } |
| + int position() const { return pos_; } |
| + |
| + void AddTemplateSpan(Literal* cooked, int end, Zone* zone) { |
| + DCHECK_NOT_NULL(cooked); |
| + cooked_.Add(cooked, zone); |
| + lengths_.Add(end - cooked->position(), zone); |
| + } |
| + |
| + void AddExpression(Expression* expression, Zone* zone) { |
| + DCHECK_NOT_NULL(expression); |
| + expressions_.Add(expression, zone); |
| + } |
| + |
| + private: |
| + ZoneList<Expression*> cooked_; |
| + ZoneList<int> lengths_; |
| + ZoneList<Expression*> expressions_; |
| + int pos_; |
| + }; |
| + |
| + typedef TemplateLiteral* TemplateLiteralState; |
| + |
| + V8_INLINE TemplateLiteralState OpenTemplateLiteral(int pos); |
| + V8_INLINE void AddTemplateSpan(TemplateLiteralState* state, bool tail); |
| + 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 +868,12 @@ class Parser : public ParserBase<ParserTraits> { |
| void ThrowPendingError(); |
| + TemplateLiteralState OpenTemplateLiteral(int pos); |
| + void AddTemplateSpan(TemplateLiteralState* state, bool tail); |
| + 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 +973,21 @@ class CompileTimeValue: public AllStatic { |
| DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue); |
| }; |
| +ParserTraits::TemplateLiteralState ParserTraits::OpenTemplateLiteral(int pos) { |
|
arv (Not doing code reviews)
2014/11/11 17:15:15
nit: 2 empty lines between functions
|
| + return parser_->OpenTemplateLiteral(pos); |
| +} |
| + |
| +void ParserTraits::AddTemplateSpan(TemplateLiteralState* state, bool tail) { |
| + parser_->AddTemplateSpan(state, tail); |
| +} |
| +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_ |