diff -r 8c5b845c14fc lib2to3/fixes/fix_metaclass.py --- a/lib2to3/fixes/fix_metaclass.py Wed Feb 24 02:21:34 2010 +0000 +++ b/lib2to3/fixes/fix_metaclass.py Sat Jan 29 19:30:13 2011 +0100 @@ -39,6 +39,9 @@ if isinstance(left_side, Leaf) and \ left_side.value == '__metaclass__': return True + elif node.type in (syms.classdef, syms.funcdef): + if node.children[1].value == '__metaclass__': + return True return False @@ -118,6 +121,9 @@ fixup_simple_stmt(node, i, simple_node) remove_trailing_newline(simple_node) yield (node, i, simple_node) + elif simple_node.type in (syms.classdef, syms.funcdef): + if simple_node.children[1].value == '__metaclass__': + yield (node, i, simple_node) def fixup_indent(suite): @@ -157,9 +163,15 @@ # find metaclasses, keep the last one last_metaclass = None for suite, i, stmt in find_metas(node): - last_metaclass = stmt - stmt.remove() - + if stmt.type == syms.classdef: + self.warning(stmt, "cannot convert class __metaclass__ ...") + elif stmt.type == syms.funcdef: + self.warning(stmt, "cannot convert def __metaclass__ ...") + else: + last_metaclass = stmt + stmt.remove() + if not last_metaclass: + return text_type = node.children[0].type # always Leaf(nnn, 'class') # figure out what kind of classdef we have