pattern: Fixed crashes, removed reference to evaluator in every pattern

This commit is contained in:
WerWolv
2022-01-29 12:40:49 +01:00
parent 75331cda94
commit 7b1a146976
10 changed files with 105 additions and 98 deletions

View File

@@ -402,21 +402,21 @@ namespace hex::pl {
PatternData *pattern;
if (Token::isUnsigned(this->m_type))
pattern = new PatternDataUnsigned(offset, size, evaluator);
pattern = new PatternDataUnsigned(offset, size);
else if (Token::isSigned(this->m_type))
pattern = new PatternDataSigned(offset, size, evaluator);
pattern = new PatternDataSigned(offset, size);
else if (Token::isFloatingPoint(this->m_type))
pattern = new PatternDataFloat(offset, size, evaluator);
pattern = new PatternDataFloat(offset, size);
else if (this->m_type == Token::ValueType::Boolean)
pattern = new PatternDataBoolean(offset, evaluator);
pattern = new PatternDataBoolean(offset);
else if (this->m_type == Token::ValueType::Character)
pattern = new PatternDataCharacter(offset, evaluator);
pattern = new PatternDataCharacter(offset);
else if (this->m_type == Token::ValueType::Character16)
pattern = new PatternDataCharacter16(offset, evaluator);
pattern = new PatternDataCharacter16(offset);
else if (this->m_type == Token::ValueType::Padding)
pattern = new PatternDataPadding(offset, 1, evaluator);
pattern = new PatternDataPadding(offset, 1);
else if (this->m_type == Token::ValueType::String)
pattern = new PatternDataString(offset, 1, evaluator);
pattern = new PatternDataString(offset, 1);
else if (this->m_type == Token::ValueType::Auto)
return { nullptr };
else
@@ -965,13 +965,13 @@ namespace hex::pl {
PatternData *outputPattern;
if (dynamic_cast<PatternDataPadding *>(templatePattern)) {
outputPattern = new PatternDataPadding(startOffset, 0, evaluator);
outputPattern = new PatternDataPadding(startOffset, 0);
} else if (dynamic_cast<PatternDataCharacter *>(templatePattern)) {
outputPattern = new PatternDataString(startOffset, 0, evaluator);
outputPattern = new PatternDataString(startOffset, 0);
} else if (dynamic_cast<PatternDataCharacter16 *>(templatePattern)) {
outputPattern = new PatternDataString16(startOffset, 0, evaluator);
outputPattern = new PatternDataString16(startOffset, 0);
} else {
auto arrayPattern = new PatternDataStaticArray(startOffset, 0, evaluator);
auto arrayPattern = new PatternDataStaticArray(startOffset, 0);
arrayPattern->setEntries(templatePattern->clone(), entryCount);
outputPattern = arrayPattern;
}
@@ -988,7 +988,7 @@ namespace hex::pl {
}
PatternData *createDynamicArray(Evaluator *evaluator) const {
auto arrayPattern = new PatternDataDynamicArray(evaluator->dataOffset(), 0, evaluator);
auto arrayPattern = new PatternDataDynamicArray(evaluator->dataOffset(), 0);
arrayPattern->setVariableName(this->m_name);
std::vector<PatternData *> entries;
@@ -1185,7 +1185,7 @@ namespace hex::pl {
auto sizePattern = this->m_sizeType->createPatterns(evaluator).front();
ON_SCOPE_EXIT { delete sizePattern; };
auto pattern = new PatternDataPointer(startOffset, sizePattern->getSize(), evaluator);
auto pattern = new PatternDataPointer(startOffset, sizePattern->getSize());
pattern->setVariableName(this->m_name);
auto endOffset = evaluator->dataOffset();
@@ -1291,7 +1291,7 @@ namespace hex::pl {
}
[[nodiscard]] std::vector<PatternData *> createPatterns(Evaluator *evaluator) const override {
auto pattern = new PatternDataStruct(evaluator->dataOffset(), 0, evaluator);
auto pattern = new PatternDataStruct(evaluator->dataOffset(), 0);
u64 startOffset = evaluator->dataOffset();
std::vector<PatternData *> memberPatterns;
@@ -1363,7 +1363,7 @@ namespace hex::pl {
}
[[nodiscard]] std::vector<PatternData *> createPatterns(Evaluator *evaluator) const override {
auto pattern = new PatternDataUnion(evaluator->dataOffset(), 0, evaluator);
auto pattern = new PatternDataUnion(evaluator->dataOffset(), 0);
size_t size = 0;
std::vector<PatternData *> memberPatterns;
@@ -1423,7 +1423,7 @@ namespace hex::pl {
}
[[nodiscard]] std::vector<PatternData *> createPatterns(Evaluator *evaluator) const override {
auto pattern = new PatternDataEnum(evaluator->dataOffset(), 0, evaluator);
auto pattern = new PatternDataEnum(evaluator->dataOffset(), 0);
auto enumCleanup = SCOPE_GUARD { delete pattern; };
@@ -1480,7 +1480,7 @@ namespace hex::pl {
void addEntry(const std::string &name, ASTNode *size) { this->m_entries.emplace_back(name, size); }
[[nodiscard]] std::vector<PatternData *> createPatterns(Evaluator *evaluator) const override {
auto pattern = new PatternDataBitfield(evaluator->dataOffset(), 0, evaluator);
auto pattern = new PatternDataBitfield(evaluator->dataOffset(), 0);
size_t bitOffset = 0;
std::vector<PatternData *> fields;
@@ -1504,7 +1504,7 @@ namespace hex::pl {
// If a field is named padding, it was created through a padding expression and only advances the bit position
if (name != "padding") {
auto field = new PatternDataBitfieldField(evaluator->dataOffset(), bitOffset, bitSize, pattern, evaluator);
auto field = new PatternDataBitfieldField(evaluator->dataOffset(), bitOffset, bitSize, pattern);
field->setVariableName(name);
fields.push_back(field);
}