OLD | NEW |
---|---|
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/ast-expression-visitor.h" | 7 #include "src/ast-expression-visitor.h" |
8 | 8 |
9 #include "src/ast.h" | 9 #include "src/ast.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 14 matching lines...) Expand all Loading... | |
25 #define RECURSE_EXPRESSION(call) \ | 25 #define RECURSE_EXPRESSION(call) \ |
26 do { \ | 26 do { \ |
27 DCHECK(!HasStackOverflow()); \ | 27 DCHECK(!HasStackOverflow()); \ |
28 ++depth_; \ | 28 ++depth_; \ |
29 call; \ | 29 call; \ |
30 --depth_; \ | 30 --depth_; \ |
31 if (HasStackOverflow()) return; \ | 31 if (HasStackOverflow()) return; \ |
32 } while (false) | 32 } while (false) |
33 | 33 |
34 | 34 |
35 #define RECURSE_EXPRESSION_RETURN_IF_VISIT_NODE(call) \ | |
36 do { \ | |
37 AstNode* node = call; \ | |
38 if (node) { \ | |
39 RECURSE_EXPRESSION(Visit(node)); \ | |
40 return; \ | |
41 } \ | |
42 } while (false) | |
43 | |
44 | |
35 AstExpressionVisitor::AstExpressionVisitor(Isolate* isolate, Expression* root) | 45 AstExpressionVisitor::AstExpressionVisitor(Isolate* isolate, Expression* root) |
36 : root_(root), depth_(0) { | 46 : root_(root), depth_(0) { |
37 InitializeAstVisitor(isolate); | 47 InitializeAstVisitor(isolate); |
38 } | 48 } |
39 | 49 |
40 | 50 |
41 AstExpressionVisitor::AstExpressionVisitor(uintptr_t stack_limit, | 51 AstExpressionVisitor::AstExpressionVisitor(uintptr_t stack_limit, |
42 Expression* root) | 52 Expression* root) |
43 : root_(root), depth_(0) { | 53 : root_(root), depth_(0) { |
44 InitializeAstVisitor(stack_limit); | 54 InitializeAstVisitor(stack_limit); |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
248 VisitExpression(expr); | 258 VisitExpression(expr); |
249 ZoneList<Expression*>* values = expr->values(); | 259 ZoneList<Expression*>* values = expr->values(); |
250 for (int i = 0; i < values->length(); ++i) { | 260 for (int i = 0; i < values->length(); ++i) { |
251 Expression* value = values->at(i); | 261 Expression* value = values->at(i); |
252 RECURSE_EXPRESSION(Visit(value)); | 262 RECURSE_EXPRESSION(Visit(value)); |
253 } | 263 } |
254 } | 264 } |
255 | 265 |
256 | 266 |
257 void AstExpressionVisitor::VisitAssignment(Assignment* expr) { | 267 void AstExpressionVisitor::VisitAssignment(Assignment* expr) { |
268 RETURN_IF_VISIT_NODE(expr->destructuring_assignment()); | |
258 VisitExpression(expr); | 269 VisitExpression(expr); |
270 RECURSE_EXPRESSION_RETURN_IF_VISIT_NODE(expr->destructuring_assignment()); | |
adamk
2015/11/25 21:05:28
Is this needed because VisitExpression could mutat
caitp (gmail)
2015/11/25 21:41:51
I suppose it can, the InitializerRewriter visitor
| |
259 RECURSE_EXPRESSION(Visit(expr->target())); | 271 RECURSE_EXPRESSION(Visit(expr->target())); |
260 RECURSE_EXPRESSION(Visit(expr->value())); | 272 RECURSE_EXPRESSION(Visit(expr->value())); |
261 } | 273 } |
262 | 274 |
263 | 275 |
264 void AstExpressionVisitor::VisitYield(Yield* expr) { | 276 void AstExpressionVisitor::VisitYield(Yield* expr) { |
265 VisitExpression(expr); | 277 VisitExpression(expr); |
266 RECURSE_EXPRESSION(Visit(expr->generator_object())); | 278 RECURSE_EXPRESSION(Visit(expr->generator_object())); |
267 RECURSE_EXPRESSION(Visit(expr->expression())); | 279 RECURSE_EXPRESSION(Visit(expr->expression())); |
268 } | 280 } |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
389 void AstExpressionVisitor::VisitSuperCallReference(SuperCallReference* expr) { | 401 void AstExpressionVisitor::VisitSuperCallReference(SuperCallReference* expr) { |
390 VisitExpression(expr); | 402 VisitExpression(expr); |
391 RECURSE_EXPRESSION(VisitVariableProxy(expr->this_var())); | 403 RECURSE_EXPRESSION(VisitVariableProxy(expr->this_var())); |
392 RECURSE_EXPRESSION(VisitVariableProxy(expr->new_target_var())); | 404 RECURSE_EXPRESSION(VisitVariableProxy(expr->new_target_var())); |
393 RECURSE_EXPRESSION(VisitVariableProxy(expr->this_function_var())); | 405 RECURSE_EXPRESSION(VisitVariableProxy(expr->this_function_var())); |
394 } | 406 } |
395 | 407 |
396 | 408 |
397 } // namespace internal | 409 } // namespace internal |
398 } // namespace v8 | 410 } // namespace v8 |
OLD | NEW |