private void YieldNext() { if (this.State != GeneratorState.Closed) { try { this.State = GeneratorState.Running; if (TryYieldNext(out EcmaValue result)) { Promise.Resolve(result, ResolveFromYield, RejectFromYield); return; } } catch (GeneratorClosedException ex) { Resolve(ex.ReturnValue, true); } catch (Exception ex) { Reject(EcmaValueUtility.GetValueFromException(ex)); } if (this.State != GeneratorState.AwaitingReturn) { Close(); } } }
private void AwaitReturn(EcmaValue value, bool resume) { this.State = GeneratorState.AwaitingReturn; Promise.Resolve(value, resume ? (PromiseCallback)ResumeFromReturn : ResolveFromReturn, RejectFromYield); }