std::unique_ptr<DexCode>& MethodCreator::to_code() { std::unique_ptr<DexCode> code(new DexCode()); code->set_registers_size(top_reg); code->set_ins_size(ins_count()); code->set_outs_size(out_count); method->set_code(std::move(code)); for (auto& mi : *meth_code->m_fmethod) { if (mi.type == MFLOW_OPCODE) { DexInstruction* insn = mi.insn; if (insn->dests_size()) { insn->set_dest(get_real_reg_num(insn->dest())); } for (int i = 0; i < static_cast<int>(insn->srcs_size()); i++) { insn->set_src(i, get_real_reg_num(insn->src(i))); } } } while (!meth_code->try_sync()) ; return method->get_code(); }
DexCode* MethodCreator::to_code() { DexCode* code = new DexCode(); code->set_registers_size(top_reg); code->set_ins_size(ins_count()); code->set_outs_size(out_count); code->set_debug_item(nullptr); method->set_code(code); for (auto mi : *meth_code->m_fmethod) { if (mi.type == MFLOW_OPCODE) { DexOpcode* opcode = mi.op; if (opcode->dests_size()) { opcode->set_dest(get_real_reg_num(opcode->dest())); } for (int i = 0; i < static_cast<int>(opcode->srcs_size()); i++) { opcode->set_src(i, get_real_reg_num(opcode->src(i))); } } } while (!meth_code->try_sync()) ; return method->get_code(); }