visitFunctionBody()

in lib/generator.js [3676:3700]


  visitFunctionBody(ast, level, env) {
    assert.equal(ast.type, 'functionBody');
    this.visitStmts(ast.stmts, level, env);
    const stmts = ast.stmts.stmts;
    const length = ast.stmts.stmts.length;

    if (_name(env.returnType) === 'void' && env.hasThrow && (length === 0 || (stmts[length - 1].type !== 'return' &&
      stmts[length - 1].type !== 'throw'))) {
      if(env.yieldErrDeal) {
        this.emit(`_err = <- _yieldErr\n`, level);
      }
      this.emit(`return _err\n`, level);
    }

    if (length === 0 || this.functionBodyRetrun(stmts[length - 1], env)) {
      if (_name(env.returnType) !== 'void' && env.hasThrow) {
        if(env.yieldErrDeal) {
          this.emit(`_err = <- _yieldErr\n`, level);
        }
        this.emit(`return _result, _err\n`, level);
      } else if (_name(env.returnType) !== 'void' && !env.hasThrow) {
        this.emit(`return _result\n`, level);
      }
    }
  }