summaryrefslogtreecommitdiff
path: root/lang/c/pseudoc.h
diff options
context:
space:
mode:
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);