diff options
Diffstat (limited to 'courgette/assembly_program.cc')
-rw-r--r-- | courgette/assembly_program.cc | 26 |
1 files changed, 1 insertions, 25 deletions
diff --git a/courgette/assembly_program.cc b/courgette/assembly_program.cc index 28a348e..b2a01a0 100644 --- a/courgette/assembly_program.cc +++ b/courgette/assembly_program.cc @@ -365,37 +365,13 @@ void AssemblyProgram::AssignRemainingIndexes(RVAToLabel* labels) { << " infill " << fill_infill_count; } -typedef CheckBool (EncodedProgram::*DefineLabelMethod)(int index, RVA value); - -#if defined(OS_WIN) -__declspec(noinline) -#endif -static CheckBool DefineLabels(const RVAToLabel& labels, - EncodedProgram* encoded_format, - DefineLabelMethod define_label) { - bool ok = true; - for (RVAToLabel::const_iterator p = labels.begin(); - ok && p != labels.end(); - ++p) { - Label* label = p->second; - ok = (encoded_format->*define_label)(label->index_, label->rva_); - } - return ok; -} - EncodedProgram* AssemblyProgram::Encode() const { scoped_ptr<EncodedProgram> encoded(new EncodedProgram()); encoded->set_image_base(image_base_); - if (!DefineLabels(abs32_labels_, encoded.get(), - &EncodedProgram::DefineAbs32Label) || - !DefineLabels(rel32_labels_, encoded.get(), - &EncodedProgram::DefineRel32Label)) { + if (!encoded->DefineLabels(abs32_labels_, rel32_labels_)) return NULL; - } - - encoded->EndLabels(); for (size_t i = 0; i < instructions_.size(); ++i) { Instruction* instruction = instructions_[i]; |