docs: def document_members(self, all_members=False):
          # type: (bool) -> None
          """Generate reST for member documentation.
  
          If *all_members* is True, do all members, else those given by
          *self.options.members*.
          """
          sourcename = self.get_sourcename()
  
          want_all = all_members or self.options.members is ALL
  
          if not want_all and not self.options.members:
              return
  
          expressions = [
              SolidityObject.file == self.object.file,
              SolidityObject.contract_name == self.object.name
          ]
  
          if not want_all:
              members_inset = set()
              should_include_fallback = False
              should_include_constructor = False
  
              for member in self.options.members:
                  if member == '<fallback>':
                      should_include_fallback = True
                  elif member == 'constructor':
                      should_include_constructor = True
                  elif member:
                      members_inset.add(member)
  
              expr = SolidityObject.name.in_(members_inset)
              if should_include_fallback:
                  expr |= (SolidityObject.objtype == 'function') & (SolidityObject.name.is_null(True))
              if should_include_constructor:
                  expr |= (SolidityObject.objtype == 'constructor') & (SolidityObject.name.is_null(True))
  
              expressions.append(expr)
  
          if self.options.exclude_members:
              should_exclude_fallback = False
              should_exclude_constructor = False
  
              if '<fallback>' in self.options.exclude_members:
                  self.options.exclude_members.remove('<fallback>')
                  should_exclude_fallback = True
              if 'constructor' in self.options.exclude_members:
                  self.options.exclude_members.remove('constructor')
                  should_exclude_constructor = True
  
              expr = SolidityObject.name.not_in(self.options.exclude_members)
  
              subexpr = SolidityObject.name.is_null(True)
              if should_exclude_fallback:
                  subexpr &= (SolidityObject.objtype != 'function')
              if should_exclude_constructor:
                  subexpr &= (SolidityObject.objtype != 'constructor')
              expr |= subexpr
  
              expressions.append(expr)
  
          for member in SolidityObject.select().where(*expressions):
              self.add_line('', sourcename)
              full_mname = '{file}:{contract}{name}{paramtypes}'.format(
                  file=member.file,
                  contract='' if member.contract_name is None
                  else member.contract_name + '.',
                  name=member.name or '',
                  paramtypes='' if member.paramtypes is None
                  else '(' + member.paramtypes + ')',
              )
              documenter = all_solidity_documenters[member.objtype](
                  self.directive, full_mname, self.indent)
              documenter.generate(all_members=True)