docs: def set_condition(self, condition, condition_instr=None):
          """
          Defines the condition which decides how the basic block exits
  
          :param condition:
          :type condition:
  
          :param condition_instr: If the 'condition' argument is a Variable, then\
                  condition_instr is None, else, condition_instr should be\
                  of type CmpInstruction
          :type condition_instr: CmpInstruction
          """
          assert(isinstance(condition, Numeric))
          if condition_instr is not None:
              assert(isinstance(condition_instr, CmpInstruction))
          self.condition = condition
          self.condition_instr = condition_instr
          if condition_instr is not None:
              if condition_instr.lhs not in self.defined_variables:
                  if isinstance(condition_instr.lhs, Variable):
                      self.defined_variables.append(condition_instr.lhs)
              if isinstance(condition_instr.rhs_1, Variable):
                  if condition_instr.rhs_1 not in self.used_variables:
                      self.used_variables.append(condition_instr.rhs_1)
              if isinstance(condition_instr.rhs_2, Variable):
                  if condition_instr.rhs_2 not in self.used_variables:
                      self.used_variables.append(condition_instr.rhs_2)