| OLD | NEW |
| 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 "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "courgette/courgette.h" | 9 #include "courgette/courgette.h" |
| 10 #include "courgette/encoded_program.h" | 10 #include "courgette/encoded_program.h" |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 it->second.Run( | 302 it->second.Run( |
| 303 static_cast<const InstructionWithLabel*>(instruction)->label()); | 303 static_cast<const InstructionWithLabel*>(instruction)->label()); |
| 304 } | 304 } |
| 305 } | 305 } |
| 306 } | 306 } |
| 307 | 307 |
| 308 CheckBool AssemblyProgram::GenerateInstructions( | 308 CheckBool AssemblyProgram::GenerateInstructions( |
| 309 const InstructionGenerator& gen) { | 309 const InstructionGenerator& gen) { |
| 310 // Pass 1: Count the space needed to store instructions. | 310 // Pass 1: Count the space needed to store instructions. |
| 311 InstructionCountReceptor count_receptor; | 311 InstructionCountReceptor count_receptor; |
| 312 if (!gen.Run(this, &count_receptor)) | 312 if (!gen.Run(&count_receptor)) |
| 313 return false; | 313 return false; |
| 314 | 314 |
| 315 // Pass 2: Emit all instructions to preallocated buffer (uses Phase 1 count). | 315 // Pass 2: Emit all instructions to preallocated buffer (uses Phase 1 count). |
| 316 InstructionStoreReceptor store_receptor(this); | 316 InstructionStoreReceptor store_receptor(this); |
| 317 // TODO(huangs): 2016/11: Pass |count_receptor_->size()| to |store_receptor_| | 317 // TODO(huangs): 2017/03: Pass |count_receptor->size()| to |store_receptor_| |
| 318 // to reserve space for raw data. | 318 // to reserve space for raw data. |
| 319 return gen.Run(this, &store_receptor); | 319 return gen.Run(&store_receptor); |
| 320 } | 320 } |
| 321 | 321 |
| 322 CheckBool AssemblyProgram::Emit(ScopedInstruction instruction) { | 322 CheckBool AssemblyProgram::Emit(ScopedInstruction instruction) { |
| 323 if (!instruction || !instructions_.push_back(instruction.get())) | 323 if (!instruction || !instructions_.push_back(instruction.get())) |
| 324 return false; | 324 return false; |
| 325 // Ownership successfully passed to instructions_. | 325 // Ownership successfully passed to instructions_. |
| 326 ignore_result(instruction.release()); | 326 ignore_result(instruction.release()); |
| 327 return true; | 327 return true; |
| 328 } | 328 } |
| 329 | 329 |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 Status Encode(const AssemblyProgram& program, | 445 Status Encode(const AssemblyProgram& program, |
| 446 std::unique_ptr<EncodedProgram>* output) { | 446 std::unique_ptr<EncodedProgram>* output) { |
| 447 // Explicitly release any memory associated with the output before encoding. | 447 // Explicitly release any memory associated with the output before encoding. |
| 448 output->reset(); | 448 output->reset(); |
| 449 | 449 |
| 450 *output = program.Encode(); | 450 *output = program.Encode(); |
| 451 return (*output) ? C_OK : C_GENERAL_ERROR; | 451 return (*output) ? C_OK : C_GENERAL_ERROR; |
| 452 } | 452 } |
| 453 | 453 |
| 454 } // namespace courgette | 454 } // namespace courgette |
| OLD | NEW |