Changeset 391 for python/trunk/Lib/lib2to3/pytree.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Lib/lib2to3/pytree.py
r2 r391 16 16 import warnings 17 17 from StringIO import StringIO 18 19 18 20 19 HUGE = 0x7FFFFFFF # maximum repeat count, default max … … 31 30 return _type_reprs.setdefault(type_num, type_num) 32 31 33 34 32 class Base(object): 35 33 … … 48 46 children = () # Tuple of subnodes 49 47 was_changed = False 48 was_checked = False 50 49 51 50 def __new__(cls, *args, **kwds): … … 214 213 return self.parent.children[i-1] 215 214 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 216 225 def get_suffix(self): 217 226 """ … … 228 237 return unicode(self).encode("ascii") 229 238 230 231 239 class Node(Base): 232 240 233 241 """Concrete implementation for interior nodes.""" 234 242 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): 236 247 """ 237 248 Initializer. … … 250 261 if prefix is not None: 251 262 self.prefix = prefix 263 if fixers_applied: 264 self.fixers_applied = fixers_applied[:] 265 else: 266 self.fixers_applied = None 252 267 253 268 def __repr__(self): … … 274 289 def clone(self): 275 290 """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) 277 293 278 294 def post_order(self): … … 287 303 yield self 288 304 for child in self.children: 289 for node in child.p ost_order():305 for node in child.pre_order(): 290 306 yield node 291 307 292 @property 293 def prefix(self): 308 def _prefix_getter(self): 294 309 """ 295 310 The whitespace and comments preceding this node in the input. … … 299 314 return self.children[0].prefix 300 315 301 @prefix.setter 302 def prefix(self, prefix): 316 def _prefix_setter(self, prefix): 303 317 if self.children: 304 318 self.children[0].prefix = prefix 319 320 prefix = property(_prefix_getter, _prefix_setter) 305 321 306 322 def set_child(self, i, child): … … 342 358 column = 0 # Column where this token tarts in the input 343 359 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=[]): 345 364 """ 346 365 Initializer. … … 356 375 if prefix is not None: 357 376 self._prefix = prefix 377 self.fixers_applied = fixers_applied[:] 358 378 359 379 def __repr__(self): … … 381 401 """Return a cloned (deep) copy of self.""" 382 402 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 384 408 385 409 def post_order(self): … … 391 415 yield self 392 416 393 @property 394 def prefix(self): 417 def _prefix_getter(self): 395 418 """ 396 419 The whitespace and comments preceding this token in the input. … … 398 421 return self._prefix 399 422 400 @prefix.setter 401 def prefix(self, prefix): 423 def _prefix_setter(self, prefix): 402 424 self.changed() 403 425 self._prefix = prefix 404 426 427 prefix = property(_prefix_getter, _prefix_setter) 405 428 406 429 def convert(gr, raw_node): … … 636 659 if absent, matches one node; 637 660 if present, each subsequence is an alternative [*] 638 min: opti nal minumum number of times to match, default 0639 max: optional maximum number of times t ro match, default HUGE661 min: optional minimum number of times to match, default 0 662 max: optional maximum number of times to match, default HUGE 640 663 name: optional name assigned to this match 641 664 … … 721 744 # The reason for this is that hitting the recursion limit usually 722 745 # 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() 726 751 try: 727 752 for count, r in self._recursive_matches(nodes, 0): … … 737 762 yield count, r 738 763 finally: 739 sys.stderr = save_stderr 764 if hasattr(sys, "getrefcount"): 765 sys.stderr = save_stderr 740 766 741 767 def _iterative_matches(self, nodes):
Note:
See TracChangeset
for help on using the changeset viewer.