Show complete variable name in pattern data view

This commit is contained in:
WerWolv 2020-11-13 11:37:43 +01:00
parent 0bdc442bf0
commit 15b91c1cac
2 changed files with 37 additions and 19 deletions

View File

@ -34,8 +34,8 @@ namespace hex {
void setHighlight(u64 offset, size_t size, std::string name, u32 color = 0); void setHighlight(u64 offset, size_t size, std::string name, u32 color = 0);
void parsePattern(char *buffer); void parsePattern(char *buffer);
s32 highlightUsingDecls(std::vector<lang::ASTNode*> &ast, lang::ASTNodeTypeDecl* currTypeDeclNode, lang::ASTNodeVariableDecl* currVarDec, u64 offset); s32 highlightUsingDecls(std::vector<lang::ASTNode*> &ast, lang::ASTNodeTypeDecl* currTypeDeclNode, lang::ASTNodeVariableDecl* currVarDec, u64 offset, std::string name);
s32 highlightStruct(std::vector<lang::ASTNode*> &ast, lang::ASTNodeStruct* currStructNode, u64 offset); s32 highlightStruct(std::vector<lang::ASTNode*> &ast, lang::ASTNodeStruct* currStructNode, u64 offset, std::string name);
}; };
} }

View File

@ -125,7 +125,11 @@ namespace hex {
for (auto &structNode : findNodes<lang::ASTNodeStruct>(lang::ASTNode::Type::Struct, ast)) for (auto &structNode : findNodes<lang::ASTNodeStruct>(lang::ASTNode::Type::Struct, ast))
if (varNode->getCustomVariableTypeName() == structNode->getName()) { if (varNode->getCustomVariableTypeName() == structNode->getName()) {
for (u32 i = 0; i < varNode->getArraySize(); i++) { for (u32 i = 0; i < varNode->getArraySize(); i++) {
if (size_t size = this->highlightStruct(ast, structNode, offset); size == -1) std::string name = varNode->getVariableName();
if (varNode->getArraySize() > 1)
name += "[" + std::to_string(varNode->getArraySize()) + "]";
if (size_t size = this->highlightStruct(ast, structNode, offset, name); size == -1)
this->m_highlights.clear(); this->m_highlights.clear();
else else
offset += size; offset += size;
@ -135,7 +139,11 @@ namespace hex {
for (auto &usingNode : findNodes<lang::ASTNodeTypeDecl>(lang::ASTNode::Type::TypeDecl, ast)) { for (auto &usingNode : findNodes<lang::ASTNodeTypeDecl>(lang::ASTNode::Type::TypeDecl, ast)) {
if (varNode->getCustomVariableTypeName() == usingNode->getTypeName()) { if (varNode->getCustomVariableTypeName() == usingNode->getTypeName()) {
for (u32 i = 0; i < varNode->getArraySize(); i++) { for (u32 i = 0; i < varNode->getArraySize(); i++) {
if (size_t size = this->highlightUsingDecls(ast, usingNode, varNode, offset); size == -1) std::string name = varNode->getVariableName();
if (varNode->getArraySize() > 1)
name += "[" + std::to_string(varNode->getArraySize()) + "]";
if (size_t size = this->highlightUsingDecls(ast, usingNode, varNode, offset, name); size == -1)
this->m_highlights.clear(); this->m_highlights.clear();
else else
offset += size; offset += size;
@ -149,21 +157,20 @@ namespace hex {
for(auto &node : ast) delete node; for(auto &node : ast) delete node;
} }
s32 ViewPattern::highlightUsingDecls(std::vector<lang::ASTNode*> &ast, lang::ASTNodeTypeDecl* currTypeDeclNode, lang::ASTNodeVariableDecl* currVarDecl, u64 offset) { s32 ViewPattern::highlightUsingDecls(std::vector<lang::ASTNode*> &ast, lang::ASTNodeTypeDecl* currTypeDeclNode, lang::ASTNodeVariableDecl* currVarDecl, u64 offset, std::string name) {
u64 startOffset = offset; u64 startOffset = offset;
if (currTypeDeclNode->getAssignedType() != lang::Token::TypeToken::Type::CustomType) { if (currTypeDeclNode->getAssignedType() != lang::Token::TypeToken::Type::CustomType) {
size_t size = (static_cast<u32>(currTypeDeclNode->getAssignedType()) >> 4); size_t size = (static_cast<u32>(currTypeDeclNode->getAssignedType()) >> 4);
this->setHighlight(offset, size, currVarDecl->getVariableName()); this->setHighlight(offset, size, name);
offset += size; offset += size;
} else { } else {
bool foundType = false; bool foundType = false;
for (auto &structNode : findNodes<lang::ASTNodeStruct>(lang::ASTNode::Type::Struct, ast)) for (auto &structNode : findNodes<lang::ASTNodeStruct>(lang::ASTNode::Type::Struct, ast))
if (structNode->getName() == currTypeDeclNode->getAssignedCustomTypeName()) { if (structNode->getName() == currTypeDeclNode->getAssignedCustomTypeName()) {
size_t size = 0;
for (size_t i = 0; i < currVarDecl->getArraySize(); i++) { for (size_t i = 0; i < currVarDecl->getArraySize(); i++) {
size = this->highlightStruct(ast, structNode, offset); size_t size = this->highlightStruct(ast, structNode, offset, name);
if (size == -1) if (size == -1)
return -1; return -1;
@ -177,9 +184,8 @@ namespace hex {
for (auto &typeDeclNode : findNodes<lang::ASTNodeTypeDecl>(lang::ASTNode::Type::TypeDecl, ast)) { for (auto &typeDeclNode : findNodes<lang::ASTNodeTypeDecl>(lang::ASTNode::Type::TypeDecl, ast)) {
if (typeDeclNode->getTypeName() == currTypeDeclNode->getAssignedCustomTypeName()) { if (typeDeclNode->getTypeName() == currTypeDeclNode->getAssignedCustomTypeName()) {
size_t size = 0;
for (size_t i = 0; i < currVarDecl->getArraySize(); i++) { for (size_t i = 0; i < currVarDecl->getArraySize(); i++) {
size = this->highlightUsingDecls(ast, typeDeclNode, currVarDecl, offset); size_t size = this->highlightUsingDecls(ast, typeDeclNode, currVarDecl, offset, name);
if (size == -1) if (size == -1)
return -1; return -1;
@ -199,24 +205,32 @@ namespace hex {
return offset - startOffset; return offset - startOffset;
} }
s32 ViewPattern::highlightStruct(std::vector<lang::ASTNode*> &ast, lang::ASTNodeStruct* currStructNode, u64 offset) { s32 ViewPattern::highlightStruct(std::vector<lang::ASTNode*> &ast, lang::ASTNodeStruct* currStructNode, u64 offset, std::string name) {
u64 startOffset = offset; u64 startOffset = offset;
for (auto &node : currStructNode->getNodes()) { for (auto &node : currStructNode->getNodes()) {
auto var = static_cast<lang::ASTNodeVariableDecl*>(node); auto var = static_cast<lang::ASTNodeVariableDecl*>(node);
if (var->getVariableType() != lang::Token::TypeToken::Type::CustomType) { if (var->getVariableType() != lang::Token::TypeToken::Type::CustomType) {
size_t size = (static_cast<u32>(var->getVariableType()) >> 4) * var->getArraySize(); size_t size = (static_cast<u32>(var->getVariableType()) >> 4);
for (size_t i = 0; i < var->getArraySize(); i++) {
std::string memberName = name + "." + var->getVariableName();
if (var->getArraySize() > 1)
memberName += "[" + std::to_string(i) + "]";
this->setHighlight(offset, size, var->getVariableName()); this->setHighlight(offset, size, memberName);
offset += size; offset += size;
}
} else { } else {
bool foundType = false; bool foundType = false;
for (auto &structNode : findNodes<lang::ASTNodeStruct>(lang::ASTNode::Type::Struct, ast)) for (auto &structNode : findNodes<lang::ASTNodeStruct>(lang::ASTNode::Type::Struct, ast)) {
if (structNode->getName() == var->getCustomVariableTypeName()) { if (structNode->getName() == var->getCustomVariableTypeName()) {
size_t size = 0;
for (size_t i = 0; i < var->getArraySize(); i++) { for (size_t i = 0; i < var->getArraySize(); i++) {
size = this->highlightStruct(ast, structNode, offset); std::string memberName = name + "." + var->getVariableName();
if (var->getArraySize() > 1)
memberName += "[" + std::to_string(i) + "]";
size_t size = this->highlightStruct(ast, structNode, offset, memberName);
if (size == -1) if (size == -1)
return -1; return -1;
@ -227,12 +241,16 @@ namespace hex {
foundType = true; foundType = true;
break; break;
} }
}
for (auto &typeDeclNode : findNodes<lang::ASTNodeTypeDecl>(lang::ASTNode::Type::TypeDecl, ast)) { for (auto &typeDeclNode : findNodes<lang::ASTNodeTypeDecl>(lang::ASTNode::Type::TypeDecl, ast)) {
if (typeDeclNode->getTypeName() == var->getCustomVariableTypeName()) { if (typeDeclNode->getTypeName() == var->getCustomVariableTypeName()) {
size_t size = 0;
for (size_t i = 0; i < var->getArraySize(); i++) { for (size_t i = 0; i < var->getArraySize(); i++) {
size = this->highlightUsingDecls(ast, typeDeclNode, var, offset); std::string memberName = name + "." + var->getVariableName();
if (var->getArraySize() > 1)
memberName += "[" + std::to_string(i) + "]";
size_t size = this->highlightUsingDecls(ast, typeDeclNode, var, offset, memberName);
if (size == -1) if (size == -1)
return -1; return -1;