visitMethodCall()

in lib/generator.js [1761:1795]


  visitMethodCall(ast, level, env = {}) {
    assert.equal(ast.left.type, 'method_call');
    let wrapName = _upperFirst(_name(ast.left.id));
    // builtin 方法的返回值是不为null的,所以需要排除出去
    if (wrapName.startsWith('$') && this.builtin[wrapName]) {
      const method = wrapName.replace('$', '');
      this.builtin[wrapName][method](ast, level, env);
      return;
    }
    if (env.isAsyncMode && ast.isAsync) {
      this.emit('await ');
      wrapName += 'Async';
    }
    if (ast.isStatic) {
      this.emit(`${wrapName}(`);
    } else {
      this.emit(`${wrapName}(`);
    }
    for (let i = 0; i < ast.args.length; i++) {
      const expr = ast.args[i];

      if (expr.needCast) {
        env.groupOp = true;
        this.visitExpr(expr, level, env);
        this.emit('.ToMap()');
      } else {
        env.groupOp = false;
        this.visitExpr(expr, level, env);
      }
      if (i !== ast.args.length - 1) {
        this.emit(', ');
      }
    }
    this.emit(')');
  }