| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #ifndef V8_AST_AST_H_ | 5 #ifndef V8_AST_AST_H_ |
| 6 #define V8_AST_AST_H_ | 6 #define V8_AST_AST_H_ |
| 7 | 7 |
| 8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
| 9 #include "src/ast/ast-value-factory.h" | 9 #include "src/ast/ast-value-factory.h" |
| 10 #include "src/ast/modules.h" | 10 #include "src/ast/modules.h" |
| (...skipping 2488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2499 DCHECK(!expression->IsRewritableExpression()); | 2499 DCHECK(!expression->IsRewritableExpression()); |
| 2500 } | 2500 } |
| 2501 | 2501 |
| 2502 private: | 2502 private: |
| 2503 int local_id(int n) const { return base_id() + parent_num_ids() + n; } | 2503 int local_id(int n) const { return base_id() + parent_num_ids() + n; } |
| 2504 | 2504 |
| 2505 bool is_rewritten_; | 2505 bool is_rewritten_; |
| 2506 Expression* expr_; | 2506 Expression* expr_; |
| 2507 }; | 2507 }; |
| 2508 | 2508 |
| 2509 | 2509 // Our Yield is different from the JS yield in that it "returns" its argument as |
| 2510 // is, without wrapping it in an iterator result object. Such wrapping, if |
| 2511 // desired, must be done beforehand (see the parser). |
| 2510 class Yield final : public Expression { | 2512 class Yield final : public Expression { |
| 2511 public: | 2513 public: |
| 2512 DECLARE_NODE_TYPE(Yield) | 2514 DECLARE_NODE_TYPE(Yield) |
| 2513 | 2515 |
| 2514 enum Kind { | |
| 2515 kInitial, // The initial yield that returns the unboxed generator object. | |
| 2516 kSuspend, // A normal yield: { value: EXPRESSION, done: false } | |
| 2517 kDelegating, // A yield*. | |
| 2518 kFinal // A return: { value: EXPRESSION, done: true } | |
| 2519 }; | |
| 2520 | |
| 2521 Expression* generator_object() const { return generator_object_; } | 2516 Expression* generator_object() const { return generator_object_; } |
| 2522 Expression* expression() const { return expression_; } | 2517 Expression* expression() const { return expression_; } |
| 2523 Kind yield_kind() const { return yield_kind_; } | |
| 2524 | 2518 |
| 2525 void set_generator_object(Expression* e) { generator_object_ = e; } | 2519 void set_generator_object(Expression* e) { generator_object_ = e; } |
| 2526 void set_expression(Expression* e) { expression_ = e; } | 2520 void set_expression(Expression* e) { expression_ = e; } |
| 2527 | 2521 |
| 2528 protected: | 2522 protected: |
| 2529 Yield(Zone* zone, Expression* generator_object, Expression* expression, | 2523 Yield(Zone* zone, Expression* generator_object, Expression* expression, |
| 2530 Kind yield_kind, int pos) | 2524 int pos) |
| 2531 : Expression(zone, pos), | 2525 : Expression(zone, pos), |
| 2532 generator_object_(generator_object), | 2526 generator_object_(generator_object), |
| 2533 expression_(expression), | 2527 expression_(expression) {} |
| 2534 yield_kind_(yield_kind) {} | |
| 2535 | 2528 |
| 2536 private: | 2529 private: |
| 2537 Expression* generator_object_; | 2530 Expression* generator_object_; |
| 2538 Expression* expression_; | 2531 Expression* expression_; |
| 2539 Kind yield_kind_; | |
| 2540 }; | 2532 }; |
| 2541 | 2533 |
| 2542 | 2534 |
| 2543 class Throw final : public Expression { | 2535 class Throw final : public Expression { |
| 2544 public: | 2536 public: |
| 2545 DECLARE_NODE_TYPE(Throw) | 2537 DECLARE_NODE_TYPE(Throw) |
| 2546 | 2538 |
| 2547 Expression* exception() const { return exception_; } | 2539 Expression* exception() const { return exception_; } |
| 2548 void set_exception(Expression* e) { exception_ = e; } | 2540 void set_exception(Expression* e) { exception_ = e; } |
| 2549 | 2541 |
| (...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3367 if (assign->is_compound()) { | 3359 if (assign->is_compound()) { |
| 3368 DCHECK(Token::IsAssignmentOp(op)); | 3360 DCHECK(Token::IsAssignmentOp(op)); |
| 3369 assign->binary_operation_ = | 3361 assign->binary_operation_ = |
| 3370 NewBinaryOperation(assign->binary_op(), target, value, pos + 1); | 3362 NewBinaryOperation(assign->binary_op(), target, value, pos + 1); |
| 3371 } | 3363 } |
| 3372 return assign; | 3364 return assign; |
| 3373 } | 3365 } |
| 3374 | 3366 |
| 3375 Yield* NewYield(Expression *generator_object, | 3367 Yield* NewYield(Expression *generator_object, |
| 3376 Expression* expression, | 3368 Expression* expression, |
| 3377 Yield::Kind yield_kind, | |
| 3378 int pos) { | 3369 int pos) { |
| 3379 if (!expression) expression = NewUndefinedLiteral(pos); | 3370 if (!expression) expression = NewUndefinedLiteral(pos); |
| 3380 return new (local_zone_) | 3371 return new (local_zone_) |
| 3381 Yield(local_zone_, generator_object, expression, yield_kind, pos); | 3372 Yield(local_zone_, generator_object, expression, pos); |
| 3382 } | 3373 } |
| 3383 | 3374 |
| 3384 Throw* NewThrow(Expression* exception, int pos) { | 3375 Throw* NewThrow(Expression* exception, int pos) { |
| 3385 return new (local_zone_) Throw(local_zone_, exception, pos); | 3376 return new (local_zone_) Throw(local_zone_, exception, pos); |
| 3386 } | 3377 } |
| 3387 | 3378 |
| 3388 FunctionLiteral* NewFunctionLiteral( | 3379 FunctionLiteral* NewFunctionLiteral( |
| 3389 const AstRawString* name, Scope* scope, ZoneList<Statement*>* body, | 3380 const AstRawString* name, Scope* scope, ZoneList<Statement*>* body, |
| 3390 int materialized_literal_count, int expected_property_count, | 3381 int materialized_literal_count, int expected_property_count, |
| 3391 int parameter_count, | 3382 int parameter_count, |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3529 : NULL; \ | 3520 : NULL; \ |
| 3530 } | 3521 } |
| 3531 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) | 3522 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) |
| 3532 #undef DECLARE_NODE_FUNCTIONS | 3523 #undef DECLARE_NODE_FUNCTIONS |
| 3533 | 3524 |
| 3534 | 3525 |
| 3535 } // namespace internal | 3526 } // namespace internal |
| 3536 } // namespace v8 | 3527 } // namespace v8 |
| 3537 | 3528 |
| 3538 #endif // V8_AST_AST_H_ | 3529 #endif // V8_AST_AST_H_ |
| OLD | NEW |