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