From 98d81b780952c2c91fe686c55bb867d193472749 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Thu, 22 May 2025 18:06:32 -0600 Subject: Add UI action and API to control expression folding --- ui/commands.h | 5 ++++- ui/flowgraphwidget.h | 3 +++ ui/linearview.h | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'ui') diff --git a/ui/commands.h b/ui/commands.h index c8634bf7..7fb3f539 100644 --- a/ui/commands.h +++ b/ui/commands.h @@ -95,6 +95,9 @@ std::optional GetVariableNameFromExpr(BinaryNinja::Function* func, // typedef-ed type TypeRef GetFunctionType(BinaryViewRef data, TypeRef type); +std::optional getFoldableExprAddress( + BinaryNinja::HighLevelILFunction* hlil, const HighlightTokenState& highlight); + /*! - @} + @} */ diff --git a/ui/flowgraphwidget.h b/ui/flowgraphwidget.h index 5133cd24..c7af8aa9 100644 --- a/ui/flowgraphwidget.h +++ b/ui/flowgraphwidget.h @@ -166,6 +166,8 @@ class BINARYNINJAUIAPI FlowGraphWidget : void recenterUpdatedGraph(FlowGraphRef oldGraph, int oldXOfs, int oldYOfs); BNDeadStoreElimination getCurrentVariableDeadStoreElimination(); + std::optional getCurrentFoldableExprAddress(); + BNExprFolding getCurrentExprFolding(); std::optional> getMergeVariablesAtCurrentLocation(); protected: @@ -395,6 +397,7 @@ class BINARYNINJAUIAPI FlowGraphWidget : void instrEditDoneEvent(); void setCurrentVariableDeadStoreElimination(BNDeadStoreElimination elimination); + void setCurrentExprFolding(BNExprFolding folding); void splitToNewTabAndNavigateFromCursorPosition(); void splitToNewWindowAndNavigateFromCursorPosition(); void splitToNewPaneAndNavigateFromCursorPosition(); diff --git a/ui/linearview.h b/ui/linearview.h index 588909be..e5305aa8 100644 --- a/ui/linearview.h +++ b/ui/linearview.h @@ -316,6 +316,8 @@ class BINARYNINJAUIAPI LinearView : public QAbstractScrollArea, public View, pub TypeRef resType, uint64_t baseAddr, uint64_t& begin, uint64_t& end, bool singleLine, std::set& seen); BNDeadStoreElimination getCurrentVariableDeadStoreElimination(); + std::optional getCurrentFoldableExprAddress(); + BNExprFolding getCurrentExprFolding(); void setDataButtonVisible(bool visible); std::optional> getMergeVariablesAtCurrentLocation(); @@ -406,6 +408,7 @@ private Q_SLOTS: std::optional addressForCall(); void setCurrentVariableDeadStoreElimination(BNDeadStoreElimination elimination); + void setCurrentExprFolding(BNExprFolding folding); Q_SIGNALS: void notifyResizeEvent(int width, int height); -- cgit v1.3.1