Skip to main contentModule timers_gen
Source - RAF_TS 🔒
- 疑似 DOMHighResTimeStamp(16ms 刻みの単調増加)。決定論的にするため実時刻は使わない。
- TIMER_ID 🔒
- attach_iterator_helpers 🔒
Iterator.from(iterable)(ES2025)。任意のイテラブル(配列/Set/Map/Generator/文字列)を
即座に展開して ObjKind::Array でラップし、Iterator helpers 一式にアクセスできるようにする。
map/filter/flatMap/forEach/some/every/find/reduce は Array.prototype の
同名メソッドが(このプロパティルックアップでは配列の組込みメソッド判定が .props より
先に評価されるため)そのまま使われ、take/drop/toArray(Array に無いメソッド)のみを
.props として追加する。Generator と同じ「その場で全展開する」簡略実装(無限イテレータ非対応)。
take/drop(ES2025 Iterator Helpers)が返す新しい配列オブジェクトへ、
同じヘルパーメソッド一式を再付与する。以前はIterator.from(...)が返す
最初のオブジェクトにしかこれらのメソッドが付与されておらず、.take(n)/
.drop(n)自身が返す新しい配列オブジェクトには引き継がれないため、
Iterator.from([...]).take(2).toArray()のような定番のチェーン呼び出しが
2段目のメソッド呼び出しで「not a function」になって失敗するバグだった。- clear_interval 🔒
- clear_timeout 🔒
- gen_next 🔒
async function* () {}(非同期 generator)の .next() が仕様上必ず Promise を
返すべきところ(AsyncGenerator.prototype.next)、is_async フラグが is_ generator のチェックに常に先を越されて完全に無視されており(call_value の
分岐順序)、普通の同期 generator と全く同じ {value,done} プレーンオブジェクトを
直接返してしまっていたバグ。await gen.next() は非 Promise 値をそのまま返す
簡略実装のおかげで見かけ上は動いていたが、gen.next() instanceof Promise 等の
型チェックは常に false になっていた。- gen_return 🔒
- gen_self_iterator 🔒
Generator.prototype[Symbol.iterator]/AsyncGenerator.prototype[Symbol.asyncIterator]
は仕様上どちらも「自分自身を返す」だけだが、丸ごと未登録だったため
for await (x of asyncGen()) が Symbol.asyncIterator を見つけられず、
常に同期の eager-drain フォールバック(iterate_values/drain_generator)に
落ちていた(値自体は一致するが、generator 内で投げた例外が for-await に
伝播せず黙って握り潰される差異があった)。- gen_self_iterator_fn
- gen_state 🔒
- gen_throw 🔒
generator.throw(err)(ES2015)が丸ごと未実装だった。next/return はあったが、
throw だけが欠落していたため、generator の中断位置に例外を注入する(協調的な
キャンセルや for await の内部実装等で使われる)標準的な操作ができなかった。- generator_method
next/return メソッド(interp の get_property から返す)。- iter_help_drain 🔒
- iter_help_drop 🔒
- iter_help_every 🔒
- iter_help_filter 🔒
- iter_help_find 🔒
- iter_help_flat_map 🔒
- iter_help_for_each 🔒
- iter_help_map 🔒
- iter_help_reduce 🔒
- iter_help_some 🔒
- iter_help_take 🔒
- iter_help_to_array 🔒
- iter_result 🔒
- iterator_from 🔒
- iterator_range 🔒
Iterator.range(start, end, step?)(ES2025 Standard)。数値の範囲シーケンスを生成する。- queue_microtask 🔒
- request_animation_frame 🔒
- requestAnimationFrame(cb): 次のイベントループでコールバックを実行(timestamp を引数に渡す)。
setTimeout と同じマクロタスク機構に乗せるため cancelAnimationFrame は clearTimeout と共通。
- set_interval 🔒
- setInterval: コールバックを最大 200 回発火(bare-metal ループ無限防止。
run_intervalsはremainingが尽きるかeval完了まで進む有限ループのため、
上限を上げても無限ループにはならない)。以前は上限8回だったため、
実サイト www.sugi-lab.net の統計カウンターアニメーション(increment = target/100を約100回積み上げて最終値へ到達する定番パターン。
.stat-numberの“10+“/“50+”/“200+“表示)が最終値の8%程度で頭打ちになり
正しい数値へ到達できないバグだった(2026-07-22発見・修正)。 - set_timeout 🔒