Skip to main content

gen_next

Function gen_next 

Source
pub(crate) fn gen_next(
    i: &mut Interp,
    this: Value,
    a: &[Value],
) -> Result<Value, Value>
Expand description

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 になっていた。