in src/langs/cpp/combinator.js [1045:1139]
resolveCallPath(paths, params = '', gram) {
let prefix = '';
let lastPathIndex = -1;
paths.forEach((path, i) => {
let pathName = typeof path.name === 'string' ? path.name.replace('@', '_') : `${path.name}`;
pathName = _name(pathName);
if (path.type === 'parent') {
if (paths[i + 1] && _contain(paths[i + 1].type, 'static')) {
prefix += `${this.config.client.name}`;
if (path.name) {
prefix += '::' + pathName;
}
} else {
prefix += '';
if (path.name) {
prefix += `${pathName}`;
}
}
} else if (path.type === 'object' || path.type === 'object_static') {
prefix += this.resolveName(pathName);
} else if (path.type === 'call') {
let isPointer = this.isPointerPath(lastPathIndex, paths);
prefix += isPointer ? `->${pathName}(${params})` : `.${pathName}(${params})`;
} else if (path.type === 'call_static') {
if (this.config.exec && prefix === 'Client') {
if (this.useTmplMethod(gram)) {
prefix = `${pathName}<${this.emitType(gram.params[0].dataType)}>(${params})`;
} else {
prefix = `${pathName}(${params})`;
}
} else {
if (this.useTmplMethod(gram)) {
prefix += `::${pathName}<${this.emitType(gram.params[0].dataType)}>(${params})`;
} else {
prefix += `::${pathName}(${params})`;
}
}
} else if (path.type === 'prop') {
let isPointer = this.isPointerPath(lastPathIndex, paths);
prefix += isPointer ? `->${pathName}` : `.${pathName}`;
} else if (path.type === 'prop_static') {
prefix += `::${pathName}`;
} else if (path.type === 'map') {
let isPointer = this.isPointerPath(lastPathIndex, paths);
let path_name;
if (path.isVar) {
let varIsPointer = this.isPtrStatement(pathName);
if (varIsPointer) {
path_name = `*${pathName}`;
} else {
path_name = pathName;
}
} else if (path.name instanceof Grammer) {
path_name = super.resolveName(path.name);
} else {
path_name = `"${pathName}"`;
}
if (isPointer) {
prefix = `(*${prefix})[${path_name}]`;
} else {
prefix += `[${path_name}]`;
}
} else if (path.type === 'list') {
let isPointer = this.isPointerPath(lastPathIndex, paths);
let path_name = pathName;
if (path.isVar) {
let varIsPointer = this.isPtrStatement(pathName);
if (varIsPointer) {
path_name = `*${pathName}`;
} else {
path_name = pathName;
}
} else if (path.name instanceof Grammer) {
path_name = super.resolveName(path.name);
}
if (isPointer) {
prefix = `(*${prefix})[${path_name}]`;
} else {
prefix += `[${path_name}]`;
}
} else {
debug.stack(paths);
}
lastPathIndex = i;
});
if (prefix[0] === '.') {
prefix = prefix.slice(1);
} else if (prefix[0] === ':') {
prefix = prefix.slice(2);
} else if (prefix[0] === '-') {
prefix = prefix.slice(2);
}
return prefix;
}