resolveCallPath()

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;
  }