| // Copyright 2014 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_AST_AST_NUMBERING_H_ |
| #define V8_AST_AST_NUMBERING_H_ |
| |
| namespace v8 { |
| namespace internal { |
| |
| // Forward declarations. |
| class FunctionLiteral; |
| class Isolate; |
| class Zone; |
| |
| namespace AstNumbering { |
| // Assign type feedback IDs, bailout IDs, and generator yield IDs to an AST node |
| // tree. |
| bool Renumber(Isolate* isolate, Zone* zone, FunctionLiteral* function); |
| } |
| |
| // Some details on yield IDs |
| // ------------------------- |
| // |
| // In order to assist Ignition in generating bytecode for a generator function, |
| // we assign a unique number (the yield ID) to each Yield node in its AST. We |
| // also annotate loops with the number of yields they contain (loop.yield_count) |
| // and the smallest ID of those (loop.first_yield_id), and we annotate the |
| // function itself with the number of yields it contains (function.yield_count). |
| // |
| // The way in which we choose the IDs is simply by enumerating the Yield nodes. |
| // Ignition relies on the following properties: |
| // - For each loop l and each yield y of l: |
| // l.first_yield_id <= y.yield_id < l.first_yield_id + l.yield_count |
| // - For the generator function f itself and each yield y of f: |
| // 0 <= y.yield_id < f.yield_count |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_AST_AST_NUMBERING_H_ |