Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(512)

Side by Side Diff: courgette/assembly_program.cc

Issue 2457133002: [Courgette] Refactor: Add AssemblyProgram::DispatchInstructionLabels() to hide InstructionVector us… (Closed)
Patch Set: Rename 'Dispatch' to 'Handle'. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « courgette/assembly_program.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "courgette/assembly_program.h" 5 #include "courgette/assembly_program.h"
6 6
7 #include <memory.h> 7 #include <memory.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 } 210 }
211 211
212 Label* AssemblyProgram::FindAbs32Label(RVA rva) { 212 Label* AssemblyProgram::FindAbs32Label(RVA rva) {
213 return abs32_label_manager_.Find(rva); 213 return abs32_label_manager_.Find(rva);
214 } 214 }
215 215
216 Label* AssemblyProgram::FindRel32Label(RVA rva) { 216 Label* AssemblyProgram::FindRel32Label(RVA rva) {
217 return rel32_label_manager_.Find(rva); 217 return rel32_label_manager_.Find(rva);
218 } 218 }
219 219
220 Label* AssemblyProgram::InstructionAbs32Label( 220 void AssemblyProgram::HandleInstructionLabels(
221 const Instruction* instruction) const { 221 const AssemblyProgram::LabelHandlerMap& handler_map) const {
222 if (instruction->op() == ABS32) 222 for (const Instruction* instruction : instructions_) {
223 return static_cast<const InstructionWithLabel*>(instruction)->label(); 223 LabelHandlerMap::const_iterator it = handler_map.find(instruction->op());
224 return NULL; 224 if (it != handler_map.end()) {
225 } 225 it->second.Run(
226 226 static_cast<const InstructionWithLabel*>(instruction)->label());
227 Label* AssemblyProgram::InstructionAbs64Label( 227 }
228 const Instruction* instruction) const {
229 if (instruction->op() == ABS64)
230 return static_cast<const InstructionWithLabel*>(instruction)->label();
231 return NULL;
232 }
233
234 Label* AssemblyProgram::InstructionRel32Label(
235 const Instruction* instruction) const {
236 if (instruction->op() == REL32 || instruction->op() == REL32ARM) {
237 Label* label =
238 static_cast<const InstructionWithLabel*>(instruction)->label();
239 return label;
240 } 228 }
241 return NULL;
242 } 229 }
243 230
244 CheckBool AssemblyProgram::Emit(ScopedInstruction instruction) { 231 CheckBool AssemblyProgram::Emit(ScopedInstruction instruction) {
245 if (!instruction || !instructions_.push_back(instruction.get())) 232 if (!instruction || !instructions_.push_back(instruction.get()))
246 return false; 233 return false;
247 // Ownership successfully passed to instructions_. 234 // Ownership successfully passed to instructions_.
248 ignore_result(instruction.release()); 235 ignore_result(instruction.release());
249 return true; 236 return true;
250 } 237 }
251 238
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 Status Encode(const AssemblyProgram& program, 467 Status Encode(const AssemblyProgram& program,
481 std::unique_ptr<EncodedProgram>* output) { 468 std::unique_ptr<EncodedProgram>* output) {
482 // Explicitly release any memory associated with the output before encoding. 469 // Explicitly release any memory associated with the output before encoding.
483 output->reset(); 470 output->reset();
484 471
485 *output = program.Encode(); 472 *output = program.Encode();
486 return (*output) ? C_OK : C_GENERAL_ERROR; 473 return (*output) ? C_OK : C_GENERAL_ERROR;
487 } 474 }
488 475
489 } // namespace courgette 476 } // namespace courgette
OLDNEW
« no previous file with comments | « courgette/assembly_program.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698