bool Assembler::SetLabels(Assembly& assembly, LabelVector& labels) { dword *bytecode = assembly.bytecode; dword curpos = assembly.curpos; size_t size = labels.size(); for(dword *cp = bytecode; cp < bytecode + curpos; cp += 2) { if(IsJumpOp(cp[0])) { if(cp[1] < size) { dword pos = labels.at(cp[1]).pos; if(pos != -1) cp[1] = pos; else { // this is a common error printf("Label not found: %s\n", labels.at(cp[1]).label.c_str()); labels.clear(); return false; } } else { // if we get here, there's a bug in the assembler ;( printf("Label index not found: %d\n", cp[1]); labels.clear(); return false; } } } labels.clear(); return true; }