visitFunctionNested()

in lib/generator.js [790:821]


  visitFunctionNested(ast, level, env) {
    var argHasThrowFunc = new Map;
    for (let i = 0; i < ast.args.length; i++) {
      if (ast.args[i].type === 'call' && ast.args[i].hasThrow) {
        let paramName;
        if (ast.args[i].left.type === 'method_call') {
          paramName = _lowerFirst(_name(ast.args[i].left.id)) + 'Tmp';
        } else {
          paramName = _lowerFirst(_name(ast.left.propertyPath[0])) + 'Tmp';
        }

        if (env.nestFuncParamName.has(paramName)) {
          let count = env.nestFuncParamNameSubscript['count'] + 1;
          paramName = paramName + count;
        }
        env.nestFuncParamName.set(paramName);
        argHasThrowFunc.set(i, paramName);
        this.emit(`${paramName}, err := `, level);
        this.visitExpr(ast.args[i], level, env, { pointer: true });
        this.emit('\n');
        this.emit(`if err != nil {\n`, level);
        this.emit(`_err = err\n`, level + 1);
        if (env.returnType && _name(env.returnType) !== 'void') {
          this.emit(`return _result, _err\n`, level + 1);
        } else {
          this.emit(`return _err\n`, level + 1);
        }
        this.emit(`}\n`, level);
      }
    }
    return argHasThrowFunc;
  }