in lib/generator.js [1261:1292]
visitTry(ast, level, env) {
assert.equal(ast.type, 'try');
env = env || {
local: new Map(),
};
const tryBlock = ast.tryBlock;
const errCounts = this.stmtsErrCount(tryBlock.stmts);
if(errCounts > 1) {
const funcName = `${_lowerFirst(env.funcName)}_opTryFunc`;
const args = this.getStmtsVars(tryBlock.stmts);
const returnType = this.getReturnType(tryBlock.stmts, env);
this.tryFunc.push({
args,
functionBody: tryBlock,
returnType,
name: funcName,
pointerParams: env.pointerParams,
});
if (returnType !== 'void') {
this.emit(`_result, _err = ${funcName}`, level);
} else {
this.emit(`_err = ${funcName}`, level);
}
this.visitTryArgs(args, level, env);
this.emit('\n');
this.visitCatch(ast, level, env);
env.hasReturn = true;
return;
}
env.try = ast;
this.visitStmts(tryBlock, level, env);
}