parameters: (self, target)
return_statement: return result
docstring: 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 returned and 'target' is not registered.
              Otherwise, 'target' is registered and returned.
docstring_summary: 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 returned and 'target' is not registered.
              Otherwise, 'target' is registered and returned.
docstring_tokens: 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 returned and target is not registered . Otherwise target is registered and returned .
function: def register (self, target):
          """ 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 returned and 'target' is not registered.
              Otherwise, 'target' is registered and returned.
          """
          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
function_tokens: 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