code: def update_next_block(self):
          
          last = self.mem[-1]
          if last.inst not in ('ret', 'jp', 'jr') or last.condition_flag is not None:
              return
  
          if last.inst == 'ret':
              if self.next is not None:
                  self.next.delete_from(self)
                  self.delete_goes(self.next)
              return
  
          if last.opers[0] not in LABELS.keys():
              __DEBUG__("INFO: %s is not defined. No optimization is done." % last.opers[0], 2)
              LABELS[last.opers[0]] = LabelInfo(last.opers[0], 0, DummyBasicBlock(ALL_REGS, ALL_REGS))
  
          n_block = LABELS[last.opers[0]].basic_block
          if self.next is n_block:
              return
  
          if self.next.prev == self:
              # The next basic block is not this one since it ends with a jump
              self.next.delete_from(self)
              self.delete_goes(self.next)
  
          self.next = n_block
          self.next.add_comes_from(self)
          self.add_goes_to(self.next)
docs: If the last instruction of this block is a JP, JR or RET (with no
          conditions) then the next and goes_to sets just contains a
          single block