in lib/generator.js [3538:3588]
visitYieldReturnBody(ast, funcName, level, env) {
let args = [];
args.push({
name: '_yield chan',
type: env.returnType.valueType,
});
if(env.hasThrow) {
args.push({
name: '_yieldErr chan error',
});
}
let vars = this.getStmtsVars(ast.stmts.stmts);
this.emit(`${funcName}(_yield`, level);
if(env.hasThrow) {
this.emit(', _yieldErr, ');
}
const argsMap = {};
let params = new Set();
for (let i = 0; i < vars.length; i++) {
const arg = vars[i];
params.add(arg.name);
argsMap[arg.name] = arg.type;
}
params = [...params];
this.emit(params.join(', '));
params.map((name) => {
const variable = (env.pointerParams && env.pointerParams.includes(name)) ? false : true;
args.push({
name,
type: argsMap[name],
variable,
});
});
this.emit(')\n');
if(env.hasThrow) {
this.emit('_err = <-_yieldErr\n', level);
}
this.visitAPIErrCatch(level, env);
this.emit('return\n', level);
this.yieldFunc.push({
args,
functionBody: ast,
name: funcName,
pointerParams: env.pointerParams,
});
}