2424#include < inttypes.h>
2525#include < vector>
2626#include " binaryninjaapi.h"
27+ #include " ffi.h"
2728
2829using namespace BinaryNinja ;
2930using namespace std ;
@@ -2441,17 +2442,7 @@ bool DisassemblyTextRenderer::GetInstructionText(uint64_t addr, size_t& len, vec
24412442 if (!BNGetDisassemblyTextRendererInstructionText (m_object, addr, &len, &result, &count))
24422443 return false ;
24432444
2444- for (size_t i = 0 ; i < count; i++)
2445- {
2446- DisassemblyTextLine line;
2447- line.addr = result[i].addr ;
2448- line.instrIndex = result[i].instrIndex ;
2449- line.highlight = result[i].highlight ;
2450- line.tokens = InstructionTextToken::ConvertInstructionTextTokenList (result[i].tokens , result[i].count );
2451- line.tags = Tag::ConvertTagList (result[i].tags , result[i].tagCount );
2452- lines.push_back (line);
2453- }
2454-
2445+ lines = ParseAPIObjectList<DisassemblyTextLine>(result, count);
24552446 BNFreeDisassemblyTextLines (result, count);
24562447 return true ;
24572448}
@@ -2460,41 +2451,15 @@ bool DisassemblyTextRenderer::GetInstructionText(uint64_t addr, size_t& len, vec
24602451vector<DisassemblyTextLine> DisassemblyTextRenderer::PostProcessInstructionTextLines (
24612452 uint64_t addr, size_t len, const vector<DisassemblyTextLine>& lines, const string& indentSpaces)
24622453{
2463- BNDisassemblyTextLine* inLines = new BNDisassemblyTextLine[lines.size ()];
2464- for (size_t i = 0 ; i < lines.size (); i++)
2465- {
2466- inLines[i].addr = lines[i].addr ;
2467- inLines[i].instrIndex = lines[i].instrIndex ;
2468- inLines[i].highlight = lines[i].highlight ;
2469- inLines[i].tokens = InstructionTextToken::CreateInstructionTextTokenList (lines[i].tokens );
2470- inLines[i].count = lines[i].tokens .size ();
2471- inLines[i].tags = Tag::CreateTagList (lines[i].tags , &inLines[i].tagCount );
2472- }
2473-
2454+ size_t inCount = 0 ;
2455+ BNDisassemblyTextLine* inLines = AllocAPIObjectList<DisassemblyTextLine>(lines, &inCount);
24742456 BNDisassemblyTextLine* result = nullptr ;
24752457 size_t count = 0 ;
24762458 result = BNPostProcessDisassemblyTextRendererLines (
2477- m_object, addr, len, inLines, lines.size (), &count, indentSpaces.c_str ());
2478-
2479- for (size_t i = 0 ; i < lines.size (); i++)
2480- {
2481- InstructionTextToken::FreeInstructionTextTokenList (inLines[i].tokens , inLines[i].count );
2482- Tag::FreeTagList (inLines[i].tags , inLines[i].tagCount );
2483- }
2484- delete[] inLines;
2485-
2486- vector<DisassemblyTextLine> outLines;
2487- for (size_t i = 0 ; i < count; i++)
2488- {
2489- DisassemblyTextLine line;
2490- line.addr = result[i].addr ;
2491- line.instrIndex = result[i].instrIndex ;
2492- line.highlight = result[i].highlight ;
2493- line.tokens = InstructionTextToken::ConvertInstructionTextTokenList (result[i].tokens , result[i].count );
2494- line.tags = Tag::ConvertTagList (result[i].tags , result[i].tagCount );
2495- outLines.push_back (line);
2496- }
2459+ m_object, addr, len, inLines, inCount, &count, indentSpaces.c_str ());
24972460
2461+ vector<DisassemblyTextLine> outLines = ParseAPIObjectList<DisassemblyTextLine>(result, count);
2462+ FreeAPIObjectList<DisassemblyTextLine>(inLines, inCount);
24982463 BNFreeDisassemblyTextLines (result, count);
24992464 return outLines;
25002465}
@@ -2507,17 +2472,7 @@ bool DisassemblyTextRenderer::GetDisassemblyText(uint64_t addr, size_t& len, vec
25072472 if (!BNGetDisassemblyTextRendererLines (m_object, addr, &len, &result, &count))
25082473 return false ;
25092474
2510- for (size_t i = 0 ; i < count; i++)
2511- {
2512- DisassemblyTextLine line;
2513- line.addr = result[i].addr ;
2514- line.instrIndex = result[i].instrIndex ;
2515- line.highlight = result[i].highlight ;
2516- line.tokens = InstructionTextToken::ConvertInstructionTextTokenList (result[i].tokens , result[i].count );
2517- line.tags = Tag::ConvertTagList (result[i].tags , result[i].tagCount );
2518- lines.push_back (line);
2519- }
2520-
2475+ lines = ParseAPIObjectList<DisassemblyTextLine>(result, count);
25212476 BNFreeDisassemblyTextLines (result, count);
25222477 return true ;
25232478}
@@ -2614,31 +2569,14 @@ void DisassemblyTextRenderer::AddIntegerToken(
26142569void DisassemblyTextRenderer::WrapComment (DisassemblyTextLine& line, vector<DisassemblyTextLine>& lines,
26152570 const string& comment, bool hasAutoAnnotations, const string& leadingSpaces, const string& indentSpaces)
26162571{
2617- BNDisassemblyTextLine inLine;
2618- inLine.addr = line.addr ;
2619- inLine.instrIndex = line.instrIndex ;
2620- inLine.highlight = line.highlight ;
2621- inLine.count = line.tokens .size ();
2622- inLine.tokens = InstructionTextToken::CreateInstructionTextTokenList (line.tokens );
2623- inLine.tags = Tag::CreateTagList (line.tags , &inLine.tagCount );
2624-
2572+ BNDisassemblyTextLine inLine = line.GetAPIObject ();
26252573 size_t count = 0 ;
26262574 BNDisassemblyTextLine* result = BNDisassemblyTextRendererWrapComment (
26272575 m_object, &inLine, &count, comment.c_str (), hasAutoAnnotations, leadingSpaces.c_str (), indentSpaces.c_str ());
26282576
2629- for (size_t i = 0 ; i < count; i++)
2630- {
2631- DisassemblyTextLine line;
2632- line.addr = result[i].addr ;
2633- line.instrIndex = result[i].instrIndex ;
2634- line.highlight = result[i].highlight ;
2635- line.tokens = InstructionTextToken::ConvertInstructionTextTokenList (result[i].tokens , result[i].count );
2636- line.tags = Tag::ConvertTagList (result[i].tags , result[i].tagCount );
2637- lines.push_back (line);
2638- }
2639-
2577+ lines = ParseAPIObjectList<DisassemblyTextLine>(result, count);
26402578 BNFreeDisassemblyTextLines (result, count);
2641- BNFreeInstructionText ( inLine. tokens , inLine. count );
2579+ DisassemblyTextLine::FreeAPIObject (& inLine);
26422580}
26432581
26442582
0 commit comments