void Watch::decompilStrutUpdate(QTreeWidgetItem *parentItem, QString val) { QString memberBlock; int index=0; QStringList memberList = extractMember(val); for(int i=0; i<memberList.count();i++) { memberBlock = memberList.at(i); while(memberBlock.startsWith(" ")) memberBlock.remove(0,1); QTreeWidgetItem *child; child = parentItem->child(index); // quelques fois Gdb ajout un nouveau membre et comme il n'est // pas initialisé on plante d'iou le test suivant if(child == NULL ) return; switch(memberType(memberBlock)) { case 0: child->setText(3, "$ = " + memberBlock); decompilStrutUpdate(child, memberBlock); break; case 1 : isVariableChangedValue(child,"$ = " + formatMember(memberBlock).at(1)); child->setText(3, "$ = " + formatMember(memberBlock).at(1)); break; case 2: isVariableChangedValue(child,"$ = " + memberList.at(i).right(memberList.at(i).length() - memberList.at(i).indexOf(" = {") - 3)); child->setText(3, "$ = " + memberList.at(i).right(memberList.at(i).length() - memberList.at(i).indexOf(" = {") - 3)); decompilStrutUpdate(child, memberBlock); } // end switch index++; }// end for }
// recursive function void Watch::decompilStrut(QTreeWidgetItem *parentItem, QString val) { QString memberBlock; int indexTab=0; QStringList memberList = extractMember(val); for(int i=0; i<memberList.count();i++) { memberBlock = memberList.at(i); while(memberBlock.startsWith(" ")) memberBlock.remove(0,1); QTreeWidgetItem *child; child = new QTreeWidgetItem(parentItem); switch(memberType(memberBlock)) { case 0: child->setText(0, "[0x" + QString::number(indexTab++,16) +"]"); child->setText(3, "$ = " + memberBlock); decompilStrut(child, memberBlock); break; case 1 : child->setText(0, formatMember(memberBlock).at(0)); child->setText(3, "$ = " + formatMember(memberBlock).at(1)); break; case 2: child->setText(0, formatMember(memberBlock).at(0)); child->setText(3, "$ = " + memberList.at(i).right(memberList.at(i).length() - memberList.at(i).indexOf(" = {") - 3)); decompilStrut(child, memberBlock); } // end switch }// end for }
QMap<QString, TLMethod> GeneratorNG::readMethods(const QJsonDocument &document) { const QJsonArray methods = document.object().value("methods").toArray(); QMap<QString, TLMethod> result; for (int i = 0; i < methods.count(); ++i) { const QJsonObject obj = methods.at(i).toObject(); const QString methodName = formatName(obj.value("method").toString()); const quint32 methodId = obj.value("id").toString().toInt(); TLMethod tlMethod; tlMethod.name = methodName; tlMethod.id = methodId; const QJsonArray params = obj.value("params").toArray(); foreach (const QJsonValue ¶mValue, params) { const QJsonObject ¶mObj = paramValue.toObject(); const QString paramName = formatMember(paramObj.value("name").toString()); const QString paramType = paramObj.value("type").toString(); tlMethod.params.append(TLParam(paramName, formatType(paramType))); } result.insert(methodName, tlMethod); // quint32 id = obj.value("id").toString().toInt(); // qDebug() << name << QString::number(id, 0x10); } return result; }
QMap<QString, TLType> GeneratorNG::readTypes(const QJsonDocument &document) { const QJsonArray constructors = document.object().value("constructors").toArray(); QMap<QString, TLType> types; for (int i = 0; i < constructors.count(); ++i) { const QJsonObject obj = constructors.at(i).toObject(); const QString predicateName = formatName1stCapital(obj.value("predicate").toString()); const quint32 predicateId = obj.value("id").toString().toInt(); const QString typeName = formatType(obj.value("type").toString()); TLType tlType = types.value(typeName); tlType.name = typeName; TLSubType tlSubType; tlSubType.name = predicateName; tlSubType.id = predicateId; const QJsonArray params = obj.value("params").toArray(); foreach (const QJsonValue ¶mValue, params) { const QJsonObject ¶mObj = paramValue.toObject(); const QString paramName = formatMember(paramObj.value("name").toString()); const QString paramType = paramObj.value("type").toString(); tlSubType.members.append(TLParam(paramName, formatType(paramType))); } tlType.subTypes.append(tlSubType); types.insert(typeName, tlType); } return types; }