'Define name for referencing matching tokens as a nested attribute
of the returned parse results.
NOTE: this returns a *copy* of the original C{ParserElement} object;
this is so that the client can define a basic element, such as an
integer, and reference it in multiple places with different names.
You can also set results names using the abbreviated syntax,
C{expr("name")} in place of C{expr.setResultsName("name")} -
see L{I{__call__}<__call__>}.'

def setResultsName(self, name, listAllMatches=False):

    newself = self.copy()
    if name.endswith('*'):
        name = name[:(-1)]
        listAllMatches = True
    newself.resultsName = name
    newself.modalResults = (not listAllMatches)
    return newself
