summaryrefslogtreecommitdiff
path: root/lang/c/pseudoc.h
diff options
context:
space:
mode:
authorAlexander Khosrowshahi <alexk@vector35.com>2025-06-18 17:05:13 -0400
committerAlex Khosrowshahi <71569995+spoonmilk@users.noreply.github.com>2025-06-28 14:00:17 -0700
commit4072c101bebea857722305954231e00590bfe1cc (patch)
tree83b37bad9b51f3cd624ebd458d3e612a4f967bbf /lang/c/pseudoc.h
parent99965f6e9ad42f8f3afadf8cf32be14d11a3b6e2 (diff)
Add support for ternary simplification in Psuedo C and disable in graph view
Diffstat (limited to 'lang/c/pseudoc.h')
-rw-r--r--lang/c/pseudoc.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/lang/c/pseudoc.h b/lang/c/pseudoc.h
index d983b2d9..ca723272 100644
--- a/lang/c/pseudoc.h
+++ b/lang/c/pseudoc.h
@@ -1,6 +1,7 @@
#pragma once
#include "binaryninjaapi.h"
+#include "highlevelilinstruction.h"
class PseudoCFunction: public BinaryNinja::LanguageRepresentationFunction
{
@@ -15,6 +16,23 @@ class PseudoCFunction: public BinaryNinja::LanguageRepresentationFunction
FieldDisplayNone
};
+ struct TernaryInfo
+ {
+ BinaryNinja::HighLevelILInstruction conditional;
+ BinaryNinja::HighLevelILInstruction assignDest;
+ BinaryNinja::HighLevelILInstruction trueAssign;
+ BinaryNinja::HighLevelILInstruction falseAssign;
+ };
+
+ std::optional<PseudoCFunction::TernaryInfo> CanSimplifyToTernary(
+ const BinaryNinja::HighLevelILInstruction& instr
+ ) const;
+ bool TryEmitSimplifiedTernary(
+ const BinaryNinja::HighLevelILInstruction& instr,
+ BinaryNinja::DisassemblySettings* settings,
+ BinaryNinja::HighLevelILTokenEmitter& emitter
+ );
+
BinaryNinja::Ref<BinaryNinja::Type> GetFieldType(const BinaryNinja::HighLevelILInstruction& var, bool deref);
FieldDisplayType GetFieldDisplayType(BinaryNinja::Ref<BinaryNinja::Type> type, uint64_t offset, size_t memberIndex, bool deref);