예제 #1
0
 def __setstate__(self, state):
     self._toklist, (self._tokdict, par, inAccumNames, self._name) = state
     self._all_names = set(inAccumNames)
     if par is not None:
         self._parent = wkref(par)
     else:
         self._parent = None
예제 #2
0
 def __setstate__(self, state):
     self.__toklist = state[0]
     self.__tokdict, par, inAccumNames, self.__name = state[1]
     self.__accumNames = {}
     self.__accumNames.update(inAccumNames)
     if par is not None:
         self.__parent = wkref(par)
     else:
         self.__parent = None
예제 #3
0
 def __setitem__(self, k, v, isinstance=isinstance):
     if isinstance(v, _ParseResultsWithOffset):
         self._tokdict[k] = self._tokdict.get(k, list()) + [v]
         sub = v[0]
     elif isinstance(k, (int, slice)):
         self._toklist[k] = v
         sub = v
     else:
         self._tokdict[k] = self._tokdict.get(
             k, list()) + [_ParseResultsWithOffset(v, 0)]
         sub = v
     if isinstance(sub, ParseResults):
         sub._parent = wkref(self)
예제 #4
0
    def __iadd__(self, other) -> "ParseResults":
        if other._tokdict:
            offset = len(self._toklist)
            addoffset = lambda a: offset if a < 0 else a + offset
            otheritems = other._tokdict.items()
            otherdictitems = [(k,
                               _ParseResultsWithOffset(v[0], addoffset(v[1])))
                              for k, vlist in otheritems for v in vlist]
            for k, v in otherdictitems:
                self[k] = v
                if isinstance(v[0], ParseResults):
                    v[0]._parent = wkref(self)

        self._toklist += other._toklist
        self._all_names |= other._all_names
        return self