| 118 | |
| 119 | |
| 120 | vector<DisassemblyTextLine> DataRenderer::GetLinesForData(BinaryView* data, uint64_t addr, Type* type, |
| 121 | const std::vector<InstructionTextToken>& prefix, size_t width, vector<pair<Type*, size_t>>& context, const string& language) |
| 122 | { |
| 123 | BNInstructionTextToken* prefixes = InstructionTextToken::CreateInstructionTextTokenList(prefix); |
| 124 | BNTypeContext* typeCtx = new BNTypeContext[context.size()]; |
| 125 | for (size_t i = 0; i < context.size(); i++) |
| 126 | { |
| 127 | typeCtx[i].type = context[i].first->GetObject(); |
| 128 | typeCtx[i].offset = context[i].second; |
| 129 | } |
| 130 | size_t count = 0; |
| 131 | BNDisassemblyTextLine* lines = BNGetLinesForData(m_object, data->GetObject(), addr, type->GetObject(), prefixes, |
| 132 | prefix.size(), width, &count, typeCtx, context.size(), language.c_str()); |
| 133 | |
| 134 | delete[] typeCtx; |
| 135 | for (size_t i = 0; i < prefix.size(); i++) |
| 136 | { |
| 137 | BNFreeString(prefixes[i].text); |
| 138 | for (size_t j = 0; j < prefixes[j].namesCount; j++) |
| 139 | BNFreeString(prefixes[i].typeNames[j]); |
| 140 | delete[] prefixes[i].typeNames; |
| 141 | } |
| 142 | delete[] prefixes; |
| 143 | |
| 144 | vector<DisassemblyTextLine> result = ParseAPIObjectList<DisassemblyTextLine>(lines, count); |
| 145 | BNFreeDisassemblyTextLines(lines, count); |
| 146 | return result; |
| 147 | } |
| 148 | |
| 149 | |
| 150 | vector<DisassemblyTextLine> DataRenderer::RenderLinesForData(BinaryView* data, uint64_t addr, Type* type, |
no test coverage detected