Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Lib/lib2to3/pytree.py

    r2 r391  
    1616import warnings
    1717from StringIO import StringIO
    18 
    1918
    2019HUGE = 0x7FFFFFFF  # maximum repeat count, default max
     
    3130    return _type_reprs.setdefault(type_num, type_num)
    3231
    33 
    3432class Base(object):
    3533
     
    4846    children = ()  # Tuple of subnodes
    4947    was_changed = False
     48    was_checked = False
    5049
    5150    def __new__(cls, *args, **kwds):
     
    214213                return self.parent.children[i-1]
    215214
     215    def leaves(self):
     216        for child in self.children:
     217            for x in child.leaves():
     218                yield x
     219
     220    def depth(self):
     221        if self.parent is None:
     222            return 0
     223        return 1 + self.parent.depth()
     224
    216225    def get_suffix(self):
    217226        """
     
    228237            return unicode(self).encode("ascii")
    229238
    230 
    231239class Node(Base):
    232240
    233241    """Concrete implementation for interior nodes."""
    234242
    235     def __init__(self, type, children, context=None, prefix=None):
     243    def __init__(self,type, children,
     244                 context=None,
     245                 prefix=None,
     246                 fixers_applied=None):
    236247        """
    237248        Initializer.
     
    250261        if prefix is not None:
    251262            self.prefix = prefix
     263        if fixers_applied:
     264            self.fixers_applied = fixers_applied[:]
     265        else:
     266            self.fixers_applied = None
    252267
    253268    def __repr__(self):
     
    274289    def clone(self):
    275290        """Return a cloned (deep) copy of self."""
    276         return Node(self.type, [ch.clone() for ch in self.children])
     291        return Node(self.type, [ch.clone() for ch in self.children],
     292                    fixers_applied=self.fixers_applied)
    277293
    278294    def post_order(self):
     
    287303        yield self
    288304        for child in self.children:
    289             for node in child.post_order():
     305            for node in child.pre_order():
    290306                yield node
    291307
    292     @property
    293     def prefix(self):
     308    def _prefix_getter(self):
    294309        """
    295310        The whitespace and comments preceding this node in the input.
     
    299314        return self.children[0].prefix
    300315
    301     @prefix.setter
    302     def prefix(self, prefix):
     316    def _prefix_setter(self, prefix):
    303317        if self.children:
    304318            self.children[0].prefix = prefix
     319
     320    prefix = property(_prefix_getter, _prefix_setter)
    305321
    306322    def set_child(self, i, child):
     
    342358    column = 0    # Column where this token tarts in the input
    343359
    344     def __init__(self, type, value, context=None, prefix=None):
     360    def __init__(self, type, value,
     361                 context=None,
     362                 prefix=None,
     363                 fixers_applied=[]):
    345364        """
    346365        Initializer.
     
    356375        if prefix is not None:
    357376            self._prefix = prefix
     377        self.fixers_applied = fixers_applied[:]
    358378
    359379    def __repr__(self):
     
    381401        """Return a cloned (deep) copy of self."""
    382402        return Leaf(self.type, self.value,
    383                     (self.prefix, (self.lineno, self.column)))
     403                    (self.prefix, (self.lineno, self.column)),
     404                    fixers_applied=self.fixers_applied)
     405
     406    def leaves(self):
     407        yield self
    384408
    385409    def post_order(self):
     
    391415        yield self
    392416
    393     @property
    394     def prefix(self):
     417    def _prefix_getter(self):
    395418        """
    396419        The whitespace and comments preceding this token in the input.
     
    398421        return self._prefix
    399422
    400     @prefix.setter
    401     def prefix(self, prefix):
     423    def _prefix_setter(self, prefix):
    402424        self.changed()
    403425        self._prefix = prefix
    404426
     427    prefix = property(_prefix_getter, _prefix_setter)
    405428
    406429def convert(gr, raw_node):
     
    636659                     if absent, matches one node;
    637660                     if present, each subsequence is an alternative [*]
    638             min: optinal minumum number of times to match, default 0
    639             max: optional maximum number of times tro match, default HUGE
     661            min: optional minimum number of times to match, default 0
     662            max: optional maximum number of times to match, default HUGE
    640663            name: optional name assigned to this match
    641664
     
    721744            # The reason for this is that hitting the recursion limit usually
    722745            # results in some ugly messages about how RuntimeErrors are being
    723             # ignored.
    724             save_stderr = sys.stderr
    725             sys.stderr = StringIO()
     746            # ignored. We don't do this on non-CPython implementation because
     747            # they don't have this problem.
     748            if hasattr(sys, "getrefcount"):
     749                save_stderr = sys.stderr
     750                sys.stderr = StringIO()
    726751            try:
    727752                for count, r in self._recursive_matches(nodes, 0):
     
    737762                    yield count, r
    738763            finally:
    739                 sys.stderr = save_stderr
     764                if hasattr(sys, "getrefcount"):
     765                    sys.stderr = save_stderr
    740766
    741767    def _iterative_matches(self, nodes):
Note: See TracChangeset for help on using the changeset viewer.