grammerNewObject()

in src/langs/cpp/combinator.js [1773:1812]


  grammerNewObject(emitter, gram, isAssign = true, isPtrParam = false) {
    let objectName = gram.name;
    if (!this.exprIsAssignToPtr && isAssign) {
      emitter.emit(`${this.resolveName(objectName)}(`);
    } else if (isAssign) {
      emitter.emit(`make_shared<${this.resolveName(objectName)}>(`);
    }
    let tmp = [];
    let params;
    if (Array.isArray(gram.params)) {
      params = gram.params;
    } else {
      params = [gram.params];
    }
    if (params.length) {
      params.forEach(p => {
        if (p instanceof GrammerValue && p.type === 'model_construct_params' && !p.value.length) {
          return;
        } else if (p instanceof GrammerValue && p.type === 'model_construct_params') {
          isPtrParam = false;
        }
        let emit = new Emitter(this.config);
        if (isPtrParam && !this.isPointerVar(p)) {
          emit.emit(this.emitMakeShared(p.dataType ? p.dataType : p.type, p));
        } else {
          this.grammerValue(emit, p, false, false);
        }
        tmp.push(emit.output);
      });
      // emitter.emit(tmp.join(', '));
    }
    if (isAssign) {
      emitter.emit(tmp.join(', '));
      emitter.emit(')');
    } else if (tmp.length) {
      emitter.emit('(');
      emitter.emit(tmp.join(', '));
      emitter.emit(')');
    }
  }