mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-04-02 13:37:42 -05:00
pattern: Fixed memory leak when using conditionals in structs
This commit is contained in:
@@ -175,7 +175,7 @@ namespace hex::pl {
|
||||
}
|
||||
} else {
|
||||
auto newPatterns = node->createPatterns(this);
|
||||
patterns.insert(patterns.end(), newPatterns.begin(), newPatterns.end());
|
||||
std::copy(newPatterns.begin(), newPatterns.end(), std::back_inserter(patterns));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1051,7 +1051,7 @@ namespace hex::pl {
|
||||
outVariable = true;
|
||||
}
|
||||
|
||||
return create(new ASTNodeVariableDecl(name, type, placementOffset, inVariable, outVariable));
|
||||
return create(new ASTNodeVariableDecl(name, type->clone(), placementOffset, inVariable, outVariable));
|
||||
}
|
||||
|
||||
// (parseType) Identifier[[(parseMathematicalExpression)]] @ Integer
|
||||
@@ -1078,7 +1078,7 @@ namespace hex::pl {
|
||||
|
||||
sizeCleanup.release();
|
||||
|
||||
return create(new ASTNodeArrayVariableDecl(name, type, size, placementOffset));
|
||||
return create(new ASTNodeArrayVariableDecl(name, type->clone(), size, placementOffset));
|
||||
}
|
||||
|
||||
// (parseType) *Identifier : (parseType) @ Integer
|
||||
@@ -1102,7 +1102,7 @@ namespace hex::pl {
|
||||
|
||||
sizeCleanup.release();
|
||||
|
||||
return create(new ASTNodePointerVariableDecl(name, type, sizeType, placementOffset));
|
||||
return create(new ASTNodePointerVariableDecl(name, type->clone(), sizeType, placementOffset));
|
||||
}
|
||||
|
||||
std::vector<ASTNode*> Parser::parseNamespace() {
|
||||
@@ -1137,6 +1137,7 @@ namespace hex::pl {
|
||||
|
||||
ASTNode* Parser::parsePlacement() {
|
||||
auto type = parseType();
|
||||
ON_SCOPE_EXIT { delete type; };
|
||||
|
||||
if (MATCHES(sequence(IDENTIFIER, SEPARATOR_SQUAREBRACKETOPEN)))
|
||||
return parseArrayVariablePlacement(type);
|
||||
@@ -1151,7 +1152,10 @@ namespace hex::pl {
|
||||
|
||||
// <(parseUsingDeclaration)|(parseVariablePlacement)|(parseStruct)>
|
||||
std::vector<ASTNode*> Parser::parseStatements() {
|
||||
ASTNode *statement;
|
||||
ASTNode *statement = nullptr;
|
||||
auto statementGuard = SCOPE_GUARD {
|
||||
delete statement;
|
||||
};
|
||||
|
||||
if (MATCHES(sequence(KEYWORD_USING, IDENTIFIER)))
|
||||
statement = parseUsingDeclaration();
|
||||
@@ -1194,6 +1198,8 @@ namespace hex::pl {
|
||||
// Consume superfluous semicolons
|
||||
while (MATCHES(sequence(SEPARATOR_ENDOFEXPRESSION)));
|
||||
|
||||
statementGuard.release();
|
||||
|
||||
return { statement };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user