From 5cab99afa06eb32265fee4798cbfc83bd6a8ae4d Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Mon, 16 Jun 2025 17:20:26 -0400 Subject: Update SymbolQueue API to support types with confidence. --- binaryview.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'binaryview.cpp') diff --git a/binaryview.cpp b/binaryview.cpp index 310396c0..d8477826 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -29,12 +29,12 @@ using namespace std; struct SymbolQueueResolveContext { - std::function, Ref>()> resolve; + std::function, Confidence>>()> resolve; }; struct SymbolQueueAddContext { - std::function add; + std::function>&)> add; }; @@ -3130,10 +3130,11 @@ void BinaryView::DefineAutoSymbol(Ref sym) } -Ref BinaryView::DefineAutoSymbolAndVariableOrFunction(Ref platform, Ref sym, Ref type) +Ref BinaryView::DefineAutoSymbolAndVariableOrFunction(Ref platform, Ref sym, const Confidence>& type) { + BNTypeWithConfidence apiType = {type.GetValue() ? type.GetValue()->GetObject() : nullptr, type.GetConfidence()}; BNSymbol* result = BNDefineAutoSymbolAndVariableOrFunction( - m_object, platform ? platform->GetObject() : nullptr, sym->GetObject(), type ? type->GetObject() : nullptr); + m_object, platform ? platform->GetObject() : nullptr, sym->GetObject(), &apiType); if (!result) return nullptr; return new Symbol(result); @@ -5694,28 +5695,29 @@ SymbolQueue::~SymbolQueue() } -void SymbolQueue::ResolveCallback(void* ctxt, BNSymbol** symbol, BNType** type) +void SymbolQueue::ResolveCallback(void* ctxt, BNSymbol** symbol, BNTypeWithConfidence* type) { SymbolQueueResolveContext* resolve = (SymbolQueueResolveContext*)ctxt; auto result = resolve->resolve(); delete resolve; *symbol = result.first ? BNNewSymbolReference(result.first->GetObject()) : nullptr; - *type = result.second ? BNNewTypeReference(result.second->GetObject()) : nullptr; + type->type = result.second.GetValue() ? BNNewTypeReference(result.second.GetValue()->GetObject()) : nullptr; + type->confidence = result.second.GetConfidence(); } -void SymbolQueue::AddCallback(void* ctxt, BNSymbol* symbol, BNType* type) +void SymbolQueue::AddCallback(void* ctxt, BNSymbol* symbol, BNTypeWithConfidence* type) { SymbolQueueAddContext* add = (SymbolQueueAddContext*)ctxt; Ref apiSymbol = new Symbol(symbol); - Ref apiType = new Type(type); + Confidence> apiType(type->type ? new Type(type->type) : nullptr, type->confidence); add->add(apiSymbol, apiType); delete add; } void SymbolQueue::Append( - const std::function, Ref>()>& resolve, const std::function& add) + const std::function, Confidence>>()>& resolve, const std::function>&)>& add) { SymbolQueueResolveContext* resolveCtxt = new SymbolQueueResolveContext {resolve}; SymbolQueueAddContext* addCtxt = new SymbolQueueAddContext {add}; -- cgit v1.3.1