summaryrefslogtreecommitdiffstats
path: root/courgette/assembly_program.cc
diff options
context:
space:
mode:
Diffstat (limited to 'courgette/assembly_program.cc')
-rw-r--r--courgette/assembly_program.cc26
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];