code: def register (self, target):
          
          assert isinstance(target, VirtualTarget)
          if target.path():
              signature = target.path() + "-" + target.name()
          else:
              signature = "-" + target.name()
  
          result = None
          if signature not in self.cache_:
              self.cache_ [signature] = []
  
          for t in self.cache_ [signature]:
              a1 = t.action ()
              a2 = target.action ()
  
              # TODO: why are we checking for not result?
              if not result:
                  if not a1 and not a2:
                      result = t
                  else:
                      if a1 and a2 and a1.action_name () == a2.action_name () and a1.sources () == a2.sources ():
                          ps1 = a1.properties ()
                          ps2 = a2.properties ()
                          p1 = ps1.base () + ps1.free () +\
                              b2.util.set.difference(ps1.dependency(), ps1.incidental())
                          p2 = ps2.base () + ps2.free () +\
                              b2.util.set.difference(ps2.dependency(), ps2.incidental())
                          if p1 == p2:
                              result = t
  
          if not result:
              self.cache_ [signature].append (target)
              result = target
  
          # TODO: Don't append if we found pre-existing target?
          self.recent_targets_.append(result)
          self.all_targets_.append(result)
  
          return result
docs: Registers a new virtual target. Checks if there's already registered target, with the same
              name, type, project and subvariant properties, and also with the same sources
              and equal action. If such target is found it is retured and 'target' is not registered.
              Otherwise, 'target' is registered and returned.