eachTryFunc()

in lib/generator.js [4052:4079]


  eachTryFunc(ast, level) {
    const env = {
      local: new Map(),
      returnType: ast.returnType,
      hasThrow: true,
      pointerParams: ast.pointerParams || [],
    };
    this.emit(`func ${ast.name} `, level);
    this.visitTryParams(ast.args, env);
    this.emit('(');
    if (_name(env.returnType) !== 'void') {
      this.emit(` _result `);
      this.visitPointerType(ast.returnType, level, env);
      this.emit(', ');
    }
    
    this.emit('_err error) {\n');

    this.visitStmts(ast.functionBody, level + 1, env);
    const stmts = ast.functionBody.stmts;
    const length = ast.functionBody.stmts.length;
    if (_name(env.returnType) === 'void') {
      this.emit(`return _err\n`, level + 1);
    } else if ((length === 0 || (stmts[length - 1].type !== 'return' && stmts[length - 1].type !== 'throw' &&
      (stmts[length - 1].type !== 'if' || !stmts[length - 1].elseStmts)))) {
      this.emit(`return _result, _err\n`, level + 1);
    }
    this.emit(`}\n`, level);