visitReturnBody()

in lib/generator.js [3590:3627]


  visitReturnBody(ast, apiName, level, env) {
    assert.equal(ast.type, 'returnBody');
    const funcName = `${_lowerFirst(apiName)}_opResponse`;
    if(_isIterator(env.returnType)) {
      this.visitYieldReturnBody(ast, funcName, level, env);
      return;
    }
    const errCounts = this.stmtsErrCount(ast.stmts.stmts);
    if(errCounts > 1) {
      const args = this.getStmtsVars(ast.stmts.stmts);
      this.tryFunc.push({
        args,
        functionBody: ast.stmts,
        returnType: env.returnType,
        name: funcName,
        pointerParams: env.pointerParams,
      });
      if (_name(env.returnType) && _name(env.returnType) !== 'void') {
        this.emit(`_result, _err = ${funcName}`, level);
      } else {
        this.emit(`_err = ${funcName}`, level);
      }
      this.visitTryArgs(args, level, env);
      this.emit('\n');
      this.visitAPIErrCatch(level, env);
      let err = '_err';
      if(!env.runtimeBody) {
        err = 'nil';
      }
      if(_name(env.returnType) === 'void' ) {
        this.emit(`return ${err}\n`, level);
      } else {
        this.emit(`return _result, ${err}\n`, level);
      }
      return;
    }
    this.visitStmts(ast.stmts, level, env);
  }