Index: src/ast/ast-numbering.h |
diff --git a/src/ast/ast-numbering.h b/src/ast/ast-numbering.h |
index 9c178b4c517743a218a3b4524e98bb8c99ea6a2c..a1d31373e7300dbbcc57ec949e10e5f5ba826038 100644 |
--- a/src/ast/ast-numbering.h |
+++ b/src/ast/ast-numbering.h |
@@ -14,12 +14,27 @@ class Isolate; |
class Zone; |
namespace AstNumbering { |
-// Assign type feedback IDs and bailout IDs to an AST node tree. For a |
-// generator function, also annotate the function itself and any loops therein |
-// with the number of contained yields. |
+// 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 |