#9964: fix lib2to3 fixer fix_operator when running under -OO.

This commit is contained in:
Georg Brandl 2010-10-14 07:29:08 +00:00
parent fb3c84a8d9
commit cbeb9fa617
1 changed files with 15 additions and 7 deletions

View File

@ -10,11 +10,19 @@ operator.irepeat(obj, n) -> operator.imul(obj, n)
""" """
import collections import collections
from functools import wraps
# Local imports # Local imports
from lib2to3 import fixer_base from lib2to3 import fixer_base
from lib2to3.fixer_util import Call, Name, String, touch_import from lib2to3.fixer_util import Call, Name, String, touch_import
def useinstead(what):
"""Make sure __doc__ is assigned even under -OO."""
def deco(f):
f.__doc__ = what
return f
return deco
class FixOperator(fixer_base.BaseFix): class FixOperator(fixer_base.BaseFix):
@ -36,34 +44,34 @@ class FixOperator(fixer_base.BaseFix):
if method is not None: if method is not None:
return method(node, results) return method(node, results)
@useinstead("operator.contains(%s)")
def _sequenceIncludes(self, node, results): def _sequenceIncludes(self, node, results):
"""operator.contains(%s)"""
return self._handle_rename(node, results, "contains") return self._handle_rename(node, results, "contains")
@useinstead("hasattr(%s, '__call__')")
def _isCallable(self, node, results): def _isCallable(self, node, results):
"""hasattr(%s, '__call__')"""
obj = results["obj"] obj = results["obj"]
args = [obj.clone(), String(", "), String("'__call__'")] args = [obj.clone(), String(", "), String("'__call__'")]
return Call(Name("hasattr"), args, prefix=node.prefix) return Call(Name("hasattr"), args, prefix=node.prefix)
@useinstead("operator.mul(%s)")
def _repeat(self, node, results): def _repeat(self, node, results):
"""operator.mul(%s)"""
return self._handle_rename(node, results, "mul") return self._handle_rename(node, results, "mul")
@useinstead("operator.imul(%s)")
def _irepeat(self, node, results): def _irepeat(self, node, results):
"""operator.imul(%s)"""
return self._handle_rename(node, results, "imul") return self._handle_rename(node, results, "imul")
@useinstead("isinstance(%s, collections.Sequence)")
def _isSequenceType(self, node, results): def _isSequenceType(self, node, results):
"""isinstance(%s, collections.Sequence)"""
return self._handle_type2abc(node, results, "collections", "Sequence") return self._handle_type2abc(node, results, "collections", "Sequence")
@useinstead("isinstance(%s, collections.Mapping)")
def _isMappingType(self, node, results): def _isMappingType(self, node, results):
"""isinstance(%s, collections.Mapping)"""
return self._handle_type2abc(node, results, "collections", "Mapping") return self._handle_type2abc(node, results, "collections", "Mapping")
@useinstead("isinstance(%s, numbers.Number)")
def _isNumberType(self, node, results): def _isNumberType(self, node, results):
"""isinstance(%s, numbers.Number)"""
return self._handle_type2abc(node, results, "numbers", "Number") return self._handle_type2abc(node, results, "numbers", "Number")
def _handle_rename(self, node, results, name): def _handle_rename(self, node, results, name):