 Chromium Code Reviews
 Chromium Code Reviews Issue 1309813007:
  [es6] implement destructuring assignment  (Closed) 
  Base URL: https://chromium.googlesource.com/v8/v8.git@master
    
  
    Issue 1309813007:
  [es6] implement destructuring assignment  (Closed) 
  Base URL: https://chromium.googlesource.com/v8/v8.git@master| Index: src/ast.h | 
| diff --git a/src/ast.h b/src/ast.h | 
| index e81c02c40a8936b36d6fb91878255a81505cfd73..1f5d72684c2a60a449f75cc49f5a4bac025e8525 100644 | 
| --- a/src/ast.h | 
| +++ b/src/ast.h | 
| @@ -2334,6 +2334,9 @@ class Assignment final : public Expression { | 
| Token::Value op() const { return TokenField::decode(bit_field_); } | 
| Expression* target() const { return target_; } | 
| Expression* value() const { return value_; } | 
| + Expression* destructuring_assignment() const { | 
| + return destructuring_assignment_; | 
| + } | 
| BinaryOperation* binary_operation() const { return binary_operation_; } | 
| // This check relies on the definition order of token in token.h. | 
| @@ -2367,6 +2370,17 @@ class Assignment final : public Expression { | 
| void set_store_mode(KeyedAccessStoreMode mode) { | 
| bit_field_ = StoreModeField::update(bit_field_, mode); | 
| } | 
| + bool is_destructuring_assignment() const { | 
| + return DestructuringAssignmentField::decode(bit_field_); | 
| + } | 
| + void set_is_destructuring_assignment() { | 
| + bit_field_ |= DestructuringAssignmentField::encode(true); | 
| + } | 
| + Expression* destructuring_assignment() { return destructuring_assignment_; } | 
| 
adamk
2015/11/25 21:05:28
Looks like this is a non-const dup of the above ac
 
caitp (gmail)
2015/11/25 21:41:51
Acknowledged.
 | 
| + | 
| + void set_destructuring_assignment(Expression* expression) { | 
| + destructuring_assignment_ = expression; | 
| + } | 
| void AssignFeedbackVectorSlots(Isolate* isolate, FeedbackVectorSpec* spec, | 
| FeedbackVectorSlotCache* cache) override; | 
| @@ -2384,12 +2398,15 @@ class Assignment final : public Expression { | 
| class KeyTypeField : public BitField16<IcCheckType, 1, 1> {}; | 
| class StoreModeField : public BitField16<KeyedAccessStoreMode, 2, 3> {}; | 
| class TokenField : public BitField16<Token::Value, 5, 8> {}; | 
| + class DestructuringAssignmentField | 
| + : public BitField16<bool, TokenField::kNext, 1> {}; | 
| 
adamk
2015/11/25 21:05:28
Can you use kNext for the above lines while you're
 
caitp (gmail)
2015/11/25 21:41:51
Acknowledged.
 | 
| // Starts with 16-bit field, which should get packed together with | 
| // Expression's trailing 16-bit field. | 
| uint16_t bit_field_; | 
| Expression* target_; | 
| Expression* value_; | 
| + Expression* destructuring_assignment_; | 
| BinaryOperation* binary_operation_; | 
| SmallMapList receiver_types_; | 
| FeedbackVectorSlot slot_; | 
| @@ -3196,6 +3213,15 @@ class AstVisitor BASE_EMBEDDED { | 
| #undef DEF_VISIT | 
| }; | 
| +// Pattern used in some AST visitors | 
| +#define RETURN_IF_VISIT_NODE(node) \ | 
| + do { \ | 
| + AstNode* tmp = node; \ | 
| + if (tmp != nullptr) { \ | 
| + Visit(tmp); \ | 
| + return; \ | 
| + } \ | 
| + } while (false) | 
| #define DEFINE_AST_VISITOR_SUBCLASS_MEMBERS() \ | 
| public: \ |