Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1380)

Unified Diff: src/ast.h

Issue 1309813007: [es6] implement destructuring assignment (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Cache te right scope in DeclareAndInitializeVariables() Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/ast.cc » ('j') | src/ast-expression-visitor.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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: \
« no previous file with comments | « no previous file | src/ast.cc » ('j') | src/ast-expression-visitor.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698