| Index: src/parser.h
|
| diff --git a/src/parser.h b/src/parser.h
|
| index 35a6f3af20bdc7022e7ff5ac065b132533afe4c6..26a56668d8aab6373f11ca77d637606b880c0a12 100644
|
| --- a/src/parser.h
|
| +++ b/src/parser.h
|
| @@ -560,6 +560,12 @@ struct ParserFormalParameters : FormalParametersBase {
|
| };
|
|
|
|
|
| +struct MarkedAssignment {
|
| + Scope* scope;
|
| + Assignment* assignment;
|
| +};
|
| +
|
| +
|
| class ParserTraits {
|
| public:
|
| struct Type {
|
| @@ -591,6 +597,8 @@ class ParserTraits {
|
|
|
| explicit ParserTraits(Parser* parser) : parser_(parser) {}
|
|
|
| + V8_INLINE void MarkDestructuringAssignment(Assignment* assignment);
|
| +
|
| // Helper functions for recursive descent.
|
| bool IsEval(const AstRawString* identifier) const;
|
| bool IsArguments(const AstRawString* identifier) const;
|
| @@ -876,6 +884,9 @@ class ParserTraits {
|
| ZoneList<v8::internal::Expression*>* args,
|
| int pos);
|
|
|
| + V8_INLINE Expression* RewriteDestructuringAssignmentExpression(
|
| + Expression* expression);
|
| +
|
| private:
|
| Parser* parser_;
|
| };
|
| @@ -1200,6 +1211,8 @@ class Parser : public ParserBase<ParserTraits> {
|
| Expression* SpreadCallNew(Expression* function,
|
| ZoneList<v8::internal::Expression*>* args, int pos);
|
|
|
| + Expression* RewriteDestructuringAssignmentExpression(Expression* expression);
|
| +
|
| Scanner scanner_;
|
| PreParser* reusable_preparser_;
|
| Scope* original_scope_; // for ES5 function declarations in sloppy eval
|
| @@ -1216,6 +1229,9 @@ class Parser : public ParserBase<ParserTraits> {
|
| HistogramTimer* pre_parse_timer_;
|
|
|
| bool parsing_on_main_thread_;
|
| +
|
| + // Track ambiguous expressions, to be rewritten later.
|
| + Collector<MarkedAssignment> marked_assignments_collector_;
|
| };
|
|
|
|
|
| @@ -1388,6 +1404,21 @@ DoExpression* ParserTraits::ParseDoExpression(bool* ok) {
|
| }
|
|
|
|
|
| +void ParserTraits::MarkDestructuringAssignment(Assignment* assignment) {
|
| + DCHECK(assignment->IsAssignment());
|
| + MarkedAssignment mark;
|
| + mark.assignment = assignment;
|
| + mark.scope = parser_->scope_;
|
| + parser_->marked_assignments_collector_.Add(mark);
|
| +}
|
| +
|
| +
|
| +Expression* ParserTraits::RewriteDestructuringAssignmentExpression(
|
| + Expression* expression) {
|
| + return parser_->RewriteDestructuringAssignmentExpression(expression);
|
| +}
|
| +
|
| +
|
| } // namespace internal
|
| } // namespace v8
|
|
|
|
|