def iter_instructions(self, f): """Iterate over instructions. For each real instruction (not label or comment), call f, which must return either None or a list of instruction. If it returns None, nothing happens. If it returns a list, then the instruction is replaced by this list. """ i = 0 while i < len(self._listIns): old_i = self._listIns[i] if not old_i.is_instruction(): i += 1 continue new_i_list = f(old_i) if new_i_list is None: i += 1 continue del self._listIns[i] self._listIns.insert(i, Comment(str(old_i))) i += 1 for new_i in new_i_list: self._listIns.insert(i, new_i) i += 1 self._listIns.insert(i, Comment("end " + str(old_i))) i += 1
def addComment(self, s): self.add_instruction(Comment(s))