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(')');
}