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

Unified Diff: src/ast/ast.h

Issue 1712203002: Revert of Non-pattern rewriting revisited (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 months 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/ast-expression-rewriter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast/ast.h
diff --git a/src/ast/ast.h b/src/ast/ast.h
index dcb440d7c77a66fd95db37af81410e48bc8217c5..b611d2701addfb06b91be3ef2578324f67169dcf 100644
--- a/src/ast/ast.h
+++ b/src/ast/ast.h
@@ -91,7 +91,7 @@
V(CaseClause) \
V(EmptyParentheses) \
V(DoExpression) \
- V(RewritableExpression)
+ V(RewritableAssignmentExpression)
#define AST_NODE_LIST(V) \
DECLARATION_NODE_LIST(V) \
@@ -205,9 +205,13 @@
// Type testing & conversion functions overridden by concrete subclasses.
#define DECLARE_NODE_FUNCTIONS(type) \
- V8_INLINE bool Is##type() const; \
- V8_INLINE type* As##type(); \
- V8_INLINE const type* As##type() const;
+ bool Is##type() const { return node_type() == AstNode::k##type; } \
+ type* As##type() { \
+ return Is##type() ? reinterpret_cast<type*>(this) : NULL; \
+ } \
+ const type* As##type() const { \
+ return Is##type() ? reinterpret_cast<const type*>(this) : NULL; \
+ }
AST_NODE_LIST(DECLARE_NODE_FUNCTIONS)
#undef DECLARE_NODE_FUNCTIONS
@@ -2482,32 +2486,18 @@
};
-// The RewritableExpression class is a wrapper for AST nodes that wait
-// for some potential rewriting. However, even if such nodes are indeed
-// rewritten, the RewritableExpression wrapper nodes will survive in the
-// final AST and should be just ignored, i.e., they should be treated as
-// equivalent to the wrapped nodes. For this reason and to simplify later
-// phases, RewritableExpressions are considered as exceptions of AST nodes
-// in the following sense:
-//
-// 1. IsRewritableExpression and AsRewritableExpression behave as usual.
-// 2. All other Is* and As* methods are practically delegated to the
-// wrapped node, i.e. IsArrayLiteral() will return true iff the
-// wrapped node is an array literal.
-//
-// Furthermore, an invariant that should be respected is that the wrapped
-// node is not a RewritableExpression.
-class RewritableExpression : public Expression {
- public:
- DECLARE_NODE_TYPE(RewritableExpression)
-
- Expression* expression() const { return expr_; }
+class RewritableAssignmentExpression : public Expression {
+ public:
+ DECLARE_NODE_TYPE(RewritableAssignmentExpression)
+
+ Expression* expression() { return expr_; }
bool is_rewritten() const { return is_rewritten_; }
+
+ void set_expression(Expression* e) { expr_ = e; }
void Rewrite(Expression* new_expression) {
DCHECK(!is_rewritten());
DCHECK_NOT_NULL(new_expression);
- DCHECK(!new_expression->IsRewritableExpression());
expr_ = new_expression;
is_rewritten_ = true;
}
@@ -2515,12 +2505,10 @@
static int num_ids() { return parent_num_ids(); }
protected:
- RewritableExpression(Zone* zone, Expression* expression)
+ RewritableAssignmentExpression(Zone* zone, Expression* expression)
: Expression(zone, expression->position()),
is_rewritten_(false),
- expr_(expression) {
- DCHECK(!expression->IsRewritableExpression());
- }
+ expr_(expression) {}
private:
int local_id(int n) const { return base_id() + parent_num_ids() + n; }
@@ -3377,9 +3365,12 @@
local_zone_, condition, then_expression, else_expression, position);
}
- RewritableExpression* NewRewritableExpression(Expression* expression) {
+ RewritableAssignmentExpression* NewRewritableAssignmentExpression(
+ Expression* expression) {
DCHECK_NOT_NULL(expression);
- return new (local_zone_) RewritableExpression(local_zone_, expression);
+ DCHECK(expression->IsAssignment());
+ return new (local_zone_)
+ RewritableAssignmentExpression(local_zone_, expression);
}
Assignment* NewAssignment(Token::Value op,
@@ -3517,46 +3508,6 @@
};
-// Type testing & conversion functions overridden by concrete subclasses.
-// Inline functions for AstNode.
-
-#define DECLARE_NODE_FUNCTIONS(type) \
- bool AstNode::Is##type() const { \
- NodeType mine = node_type(); \
- if (mine == AstNode::kRewritableExpression && \
- AstNode::k##type != AstNode::kRewritableExpression) \
- mine = reinterpret_cast<const RewritableExpression*>(this) \
- ->expression() \
- ->node_type(); \
- return mine == AstNode::k##type; \
- } \
- type* AstNode::As##type() { \
- NodeType mine = node_type(); \
- AstNode* result = this; \
- if (mine == AstNode::kRewritableExpression && \
- AstNode::k##type != AstNode::kRewritableExpression) { \
- result = \
- reinterpret_cast<const RewritableExpression*>(this)->expression(); \
- mine = result->node_type(); \
- } \
- return mine == AstNode::k##type ? reinterpret_cast<type*>(result) : NULL; \
- } \
- const type* AstNode::As##type() const { \
- NodeType mine = node_type(); \
- const AstNode* result = this; \
- if (mine == AstNode::kRewritableExpression && \
- AstNode::k##type != AstNode::kRewritableExpression) { \
- result = \
- reinterpret_cast<const RewritableExpression*>(this)->expression(); \
- mine = result->node_type(); \
- } \
- return mine == AstNode::k##type ? reinterpret_cast<const type*>(result) \
- : NULL; \
- }
-AST_NODE_LIST(DECLARE_NODE_FUNCTIONS)
-#undef DECLARE_NODE_FUNCTIONS
-
-
} // namespace internal
} // namespace v8
« no previous file with comments | « no previous file | src/ast/ast-expression-rewriter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698