| 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 2520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2531 class Yield final : public Expression { | 2531 class Yield final : public Expression { |
| 2532 public: | 2532 public: |
| 2533 DECLARE_NODE_TYPE(Yield) | 2533 DECLARE_NODE_TYPE(Yield) |
| 2534 | 2534 |
| 2535 Expression* generator_object() const { return generator_object_; } | 2535 Expression* generator_object() const { return generator_object_; } |
| 2536 Expression* expression() const { return expression_; } | 2536 Expression* expression() const { return expression_; } |
| 2537 | 2537 |
| 2538 void set_generator_object(Expression* e) { generator_object_ = e; } | 2538 void set_generator_object(Expression* e) { generator_object_ = e; } |
| 2539 void set_expression(Expression* e) { expression_ = e; } | 2539 void set_expression(Expression* e) { expression_ = e; } |
| 2540 | 2540 |
| 2541 // AsyncFunction's first yield must suspend execution before starting, to |
| 2542 // prevent 'already executing' error. This avoids complexities of introducing |
| 2543 // an internal generator function. |
| 2544 bool is_async_function_start() const { return is_async_function_start_; } |
| 2545 |
| 2541 protected: | 2546 protected: |
| 2542 Yield(Zone* zone, Expression* generator_object, Expression* expression, | 2547 Yield(Zone* zone, Expression* generator_object, Expression* expression, |
| 2543 int pos) | 2548 bool is_async_function_start, int pos) |
| 2544 : Expression(zone, pos), | 2549 : Expression(zone, pos), |
| 2545 generator_object_(generator_object), | 2550 generator_object_(generator_object), |
| 2546 expression_(expression) {} | 2551 expression_(expression), |
| 2552 is_async_function_start_(is_async_function_start) {} |
| 2547 | 2553 |
| 2548 private: | 2554 private: |
| 2549 Expression* generator_object_; | 2555 Expression* generator_object_; |
| 2550 Expression* expression_; | 2556 Expression* expression_; |
| 2557 bool is_async_function_start_; |
| 2551 }; | 2558 }; |
| 2552 | 2559 |
| 2553 | |
| 2554 class Throw final : public Expression { | 2560 class Throw final : public Expression { |
| 2555 public: | 2561 public: |
| 2556 DECLARE_NODE_TYPE(Throw) | 2562 DECLARE_NODE_TYPE(Throw) |
| 2557 | 2563 |
| 2558 Expression* exception() const { return exception_; } | 2564 Expression* exception() const { return exception_; } |
| 2559 void set_exception(Expression* e) { exception_ = e; } | 2565 void set_exception(Expression* e) { exception_ = e; } |
| 2560 | 2566 |
| 2561 protected: | 2567 protected: |
| 2562 Throw(Zone* zone, Expression* exception, int pos) | 2568 Throw(Zone* zone, Expression* exception, int pos) |
| 2563 : Expression(zone, pos), exception_(exception) {} | 2569 : Expression(zone, pos), exception_(exception) {} |
| (...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3395 assign->binary_operation_ = | 3401 assign->binary_operation_ = |
| 3396 NewBinaryOperation(assign->binary_op(), target, value, pos + 1); | 3402 NewBinaryOperation(assign->binary_op(), target, value, pos + 1); |
| 3397 } | 3403 } |
| 3398 return assign; | 3404 return assign; |
| 3399 } | 3405 } |
| 3400 | 3406 |
| 3401 Yield* NewYield(Expression *generator_object, | 3407 Yield* NewYield(Expression *generator_object, |
| 3402 Expression* expression, | 3408 Expression* expression, |
| 3403 int pos) { | 3409 int pos) { |
| 3404 if (!expression) expression = NewUndefinedLiteral(pos); | 3410 if (!expression) expression = NewUndefinedLiteral(pos); |
| 3405 return new (local_zone_) | 3411 const bool is_async_function_start = false; |
| 3406 Yield(local_zone_, generator_object, expression, pos); | 3412 return new (local_zone_) Yield(local_zone_, generator_object, expression, |
| 3413 is_async_function_start, pos); |
| 3414 } |
| 3415 |
| 3416 Yield* NewAsyncFunctionStart(Expression* generator_object, |
| 3417 Expression* expression, int pos) { |
| 3418 DCHECK_NOT_NULL(expression); |
| 3419 // Starting an AsyncFunction emits a yield which suspends before evaluating |
| 3420 // operand. |
| 3421 const bool is_async_function_start = true; |
| 3422 return new (local_zone_) Yield(local_zone_, generator_object, expression, |
| 3423 is_async_function_start, pos); |
| 3407 } | 3424 } |
| 3408 | 3425 |
| 3409 Throw* NewThrow(Expression* exception, int pos) { | 3426 Throw* NewThrow(Expression* exception, int pos) { |
| 3410 return new (local_zone_) Throw(local_zone_, exception, pos); | 3427 return new (local_zone_) Throw(local_zone_, exception, pos); |
| 3411 } | 3428 } |
| 3412 | 3429 |
| 3413 FunctionLiteral* NewFunctionLiteral( | 3430 FunctionLiteral* NewFunctionLiteral( |
| 3414 const AstRawString* name, Scope* scope, ZoneList<Statement*>* body, | 3431 const AstRawString* name, Scope* scope, ZoneList<Statement*>* body, |
| 3415 int materialized_literal_count, int expected_property_count, | 3432 int materialized_literal_count, int expected_property_count, |
| 3416 int parameter_count, | 3433 int parameter_count, |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3554 : NULL; \ | 3571 : NULL; \ |
| 3555 } | 3572 } |
| 3556 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) | 3573 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) |
| 3557 #undef DECLARE_NODE_FUNCTIONS | 3574 #undef DECLARE_NODE_FUNCTIONS |
| 3558 | 3575 |
| 3559 | 3576 |
| 3560 } // namespace internal | 3577 } // namespace internal |
| 3561 } // namespace v8 | 3578 } // namespace v8 |
| 3562 | 3579 |
| 3563 #endif // V8_AST_AST_H_ | 3580 #endif // V8_AST_AST_H_ |
| OLD | NEW |