code: def register(self,obj,cls=type(None),hist={}):
          
          #~ ident = getattr(obj,'ident',obj)
          if is_submodule(obj,cls):
              if obj not in self.submodules: self.submodules[obj] = SubmodNode(obj,self)
          elif is_module(obj,cls):
              if obj not in self.modules: self.modules[obj] = ModNode(obj,self)
          elif is_type(obj,cls):
              if obj not in self.types: self.types[obj] = TypeNode(obj,self,hist)
          elif is_proc(obj,cls):
              if obj not in self.procedures: self.procedures[obj] = ProcNode(obj,self,hist)
          elif is_program(obj,cls):
              if obj not in self.programs: self.programs[obj] = ProgNode(obj,self)
          elif is_sourcefile(obj,cls):
              if obj not in self.sourcefiles: self.sourcefiles[obj] = FileNode(obj,self)
          elif is_blockdata(obj,cls):
              if obj not in self.blockdata: self.blockdata[obj] = BlockNode(obj,self)
          else:
              raise BadType("Object type {} not recognized by GraphData".format(type(obj).__name__))
docs: Takes a FortranObject and adds it to the appropriate list, if
          not already present.