code: func (g *generators) call(th *starlark.Thread, ctx *genCtx) (errs errors.MultiError) {
  	if g.runningNow {
  		return errors.MultiError{
  			fmt.Errorf("can't call generators while they are already running"),
  		}
  	}
  	g.runningNow = true
  	defer func() { g.runningNow = false }()
  
  	fc := builtins.GetFailureCollector(th)
  
  	for _, cb := range g.gen {
  		if fc != nil {
  			fc.Clear()
  		}
  		if _, err := starlark.Call(th, cb, starlark.Tuple{ctx}, nil); err != nil {
  			if fc != nil && fc.LatestFailure() != nil {
  				// Prefer this error, it has custom stack trace.
  				errs = append(errs, fc.LatestFailure())
  			} else {
  				errs = append(errs, err)
  			}
  		}
  	}
  	return
  }
docs: // call calls all registered callbacks sequentially, collecting all errors.