visitInstanceCall()

in lib/generator.js [1684:1718]


  visitInstanceCall(ast, level, env = {}) {
    assert.equal(ast.left.type, 'instance_call');
    const method = _name(ast.left.propertyPath[0]);
    let methodName = _upperFirst(method);

    if (ast.builtinModule && this.builtin[ast.builtinModule] && this.builtin[ast.builtinModule][method]) {
      this.builtin[ast.builtinModule][method](ast, level, env);
    } else {
      if (env.isAsyncMode && ast.isAsync) {
        methodName += 'Async';
        this.emit('await ');
      }
      if (ast.left.id.tag === DSL.Tag.Tag.VID) {
        this.emit(`this.${_vid(ast.left.id)}`);
      } else {
        this.emit(`${_avoidReserveName(_name(ast.left.id))}`);
      }
      this.emit(`.${methodName}(`);

      for (let i = 0; i < ast.args.length; i++) {
        const expr = ast.args[i];
        if (expr.type === 'variable' && expr.needCast) {
          env.groupOp = true;
          this.visitExpr(expr, level, env);
          this.emit('.ToMap()');
        } else {
          this.visitExpr(expr, level, env);
        }
        if (i !== ast.args.length - 1) {
          this.emit(', ');
        }
      }
      this.emit(')');
    }
  }