Update of /cvsroot/wpdev/xmlscripts/python-lib/compiler
In directory sc8-pr-cvs1:/tmp/cvs-serv5168/compiler
Modified Files:
ast.py pyassem.py pycodegen.py symbols.py transformer.py
visitor.py
Log Message:
Updated to Python 2.3.2
Index: ast.py
===================================================================
RCS file: /cvsroot/wpdev/xmlscripts/python-lib/compiler/ast.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** ast.py 1 Jul 2002 01:57:00 -0000 1.1.1.1
--- ast.py 10 Nov 2003 12:44:15 -0000 1.2
***************
*** 20,26 ****
return [n for n in flatten(list) if isinstance(n, Node)]
! def asList(nodes):
l = []
! for item in nodes:
if hasattr(item, "asList"):
l.append(item.asList())
--- 20,26 ----
return [n for n in flatten(list) if isinstance(n, Node)]
! def asList(nodearg):
l = []
! for item in nodearg:
if hasattr(item, "asList"):
l.append(item.asList())
***************
*** 66,74 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.expr)
! if self.lower is not None: nodes.append(self.lower)
! if self.upper is not None: nodes.append(self.upper)
! return tuple(nodes)
def __repr__(self):
--- 66,74 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.expr)
! if self.lower is not None: nodelist.append(self.lower)
! if self.upper is not None: nodelist.append(self.upper)
! return tuple(nodelist)
def __repr__(self):
***************
*** 104,112 ****
def getChildNodes(self):
! nodes = []
! if self.expr1 is not None: nodes.append(self.expr1)
! if self.expr2 is not None: nodes.append(self.expr2)
! if self.expr3 is not None: nodes.append(self.expr3)
! return tuple(nodes)
def __repr__(self):
--- 104,112 ----
def getChildNodes(self):
! nodelist = []
! if self.expr1 is not None: nodelist.append(self.expr1)
! if self.expr2 is not None: nodelist.append(self.expr2)
! if self.expr3 is not None: nodelist.append(self.expr3)
! return tuple(nodelist)
def __repr__(self):
***************
*** 130,139 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.assign)
! nodes.append(self.list)
! nodes.append(self.body)
! if self.else_ is not None: nodes.append(self.else_)
! return tuple(nodes)
def __repr__(self):
--- 130,139 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.assign)
! nodelist.append(self.list)
! nodelist.append(self.body)
! if self.else_ is not None: nodelist.append(self.else_)
! return tuple(nodelist)
def __repr__(self):
***************
*** 151,157 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 151,157 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 213,219 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 213,219 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 261,267 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.items))
! return tuple(nodes)
def __repr__(self):
--- 261,267 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.items))
! return tuple(nodelist)
def __repr__(self):
***************
*** 339,346 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! if self.dest is not None: nodes.append(self.dest)
! return tuple(nodes)
def __repr__(self):
--- 339,346 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! if self.dest is not None: nodelist.append(self.dest)
! return tuple(nodelist)
def __repr__(self):
***************
*** 376,383 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.expr)
! nodes.extend(flatten_nodes(self.subs))
! return tuple(nodes)
def __repr__(self):
--- 376,383 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.expr)
! nodelist.extend(flatten_nodes(self.subs))
! return tuple(nodelist)
def __repr__(self):
***************
*** 399,407 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.body)
! nodes.extend(flatten_nodes(self.handlers))
! if self.else_ is not None: nodes.append(self.else_)
! return tuple(nodes)
def __repr__(self):
--- 399,407 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.body)
! nodelist.extend(flatten_nodes(self.handlers))
! if self.else_ is not None: nodelist.append(self.else_)
! return tuple(nodelist)
def __repr__(self):
***************
*** 419,425 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 419,425 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 468,475 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.defaults))
! nodes.append(self.code)
! return tuple(nodes)
def __repr__(self):
--- 468,475 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.defaults))
! nodelist.append(self.code)
! return tuple(nodelist)
def __repr__(self):
***************
*** 489,496 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.test)
! if self.fail is not None: nodes.append(self.fail)
! return tuple(nodes)
def __repr__(self):
--- 489,496 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.test)
! if self.fail is not None: nodelist.append(self.fail)
! return tuple(nodelist)
def __repr__(self):
***************
*** 541,549 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.expr)
! if self.locals is not None: nodes.append(self.locals)
! if self.globals is not None: nodes.append(self.globals)
! return tuple(nodes)
def __repr__(self):
--- 541,549 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.expr)
! if self.locals is not None: nodelist.append(self.locals)
! if self.globals is not None: nodelist.append(self.globals)
! return tuple(nodelist)
def __repr__(self):
***************
*** 561,567 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 561,567 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 579,585 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 579,585 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 611,617 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 611,617 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 679,686 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.bases))
! nodes.append(self.code)
! return tuple(nodes)
def __repr__(self):
--- 679,686 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.bases))
! nodelist.append(self.code)
! return tuple(nodelist)
def __repr__(self):
***************
*** 715,722 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! if self.dest is not None: nodes.append(self.dest)
! return tuple(nodes)
def __repr__(self):
--- 715,722 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! if self.dest is not None: nodelist.append(self.dest)
! return tuple(nodelist)
def __repr__(self):
***************
*** 734,740 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 734,740 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 799,805 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 799,805 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 865,873 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.test)
! nodes.append(self.body)
! if self.else_ is not None: nodes.append(self.else_)
! return tuple(nodes)
def __repr__(self):
--- 865,873 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.test)
! nodelist.append(self.body)
! if self.else_ is not None: nodelist.append(self.else_)
! return tuple(nodelist)
def __repr__(self):
***************
*** 944,951 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! nodes.append(self.expr)
! return tuple(nodes)
def __repr__(self):
--- 944,951 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! nodelist.append(self.expr)
! return tuple(nodelist)
def __repr__(self):
***************
*** 975,982 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.defaults))
! nodes.append(self.code)
! return tuple(nodes)
def __repr__(self):
--- 975,982 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.defaults))
! nodelist.append(self.code)
! return tuple(nodelist)
def __repr__(self):
***************
*** 994,1000 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 994,1000 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 1014,1021 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.expr)
! nodes.extend(flatten_nodes(self.ops))
! return tuple(nodes)
def __repr__(self):
--- 1014,1021 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.expr)
! nodelist.extend(flatten_nodes(self.ops))
! return tuple(nodelist)
def __repr__(self):
***************
*** 1033,1039 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 1033,1039 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 1051,1057 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.nodes))
! return tuple(nodes)
def __repr__(self):
--- 1051,1057 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.nodes))
! return tuple(nodelist)
def __repr__(self):
***************
*** 1075,1084 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.node)
! nodes.extend(flatten_nodes(self.args))
! if self.star_args is not None: nodes.append(self.star_args)
! if self.dstar_args is not None: nodes.append(self.dstar_args)
! return tuple(nodes)
def __repr__(self):
--- 1075,1084 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.node)
! nodelist.extend(flatten_nodes(self.args))
! if self.star_args is not None: nodelist.append(self.star_args)
! if self.dstar_args is not None: nodelist.append(self.dstar_args)
! return tuple(nodelist)
def __repr__(self):
***************
*** 1184,1191 ****
def getChildNodes(self):
! nodes = []
! nodes.extend(flatten_nodes(self.tests))
! if self.else_ is not None: nodes.append(self.else_)
! return tuple(nodes)
def __repr__(self):
--- 1184,1191 ----
def getChildNodes(self):
! nodelist = []
! nodelist.extend(flatten_nodes(self.tests))
! if self.else_ is not None: nodelist.append(self.else_)
! return tuple(nodelist)
def __repr__(self):
***************
*** 1205,1212 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.expr)
! nodes.extend(flatten_nodes(self.quals))
! return tuple(nodes)
def __repr__(self):
--- 1205,1212 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.expr)
! nodelist.extend(flatten_nodes(self.quals))
! return tuple(nodelist)
def __repr__(self):
***************
*** 1228,1236 ****
def getChildNodes(self):
! nodes = []
! nodes.append(self.assign)
! nodes.append(self.list)
! nodes.extend(flatten_nodes(self.ifs))
! return tuple(nodes)
def __repr__(self):
--- 1228,1236 ----
def getChildNodes(self):
! nodelist = []
! nodelist.append(self.assign)
! nodelist.append(self.list)
! nodelist.extend(flatten_nodes(self.ifs))
! return tuple(nodelist)
def __repr__(self):
Index: pyassem.py
===================================================================
RCS file: /cvsroot/wpdev/xmlscripts/python-lib/compiler/pyassem.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** pyassem.py 1 Jul 2002 01:57:01 -0000 1.1.1.1
--- pyassem.py 10 Nov 2003 12:44:15 -0000 1.2
***************
*** 3,20 ****
import dis
import new
- import string
import sys
import types
from compiler import misc
! from compiler.consts import CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, \
! CO_VARKEYWORDS
!
! def xxx_sort(l):
! l = l[:]
! def sorter(a, b):
! return cmp(a.bid, b.bid)
! l.sort(sorter)
! return l
class FlowGraph:
--- 3,12 ----
import dis
import new
import sys
import types
from compiler import misc
! from compiler.consts \
! import CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS
class FlowGraph:
***************
*** 79,83 ****
if self._debug:
print "\t", inst
! if inst[0] == 'RETURN_VALUE':
self.current.addOutEdge(self.exit)
if len(inst) == 2 and isinstance(inst[1], Block):
--- 71,75 ----
if self._debug:
print "\t", inst
! if inst[0] in ['RETURN_VALUE', 'YIELD_VALUE']:
self.current.addOutEdge(self.exit)
if len(inst) == 2 and isinstance(inst[1], Block):
***************
*** 247,251 ****
insts = map(str, self.insts)
return "<block %s %d:\n%s>" % (self.label, self.bid,
! string.join(insts, '\n'))
def emit(self, inst):
--- 239,243 ----
insts = map(str, self.insts)
return "<block %s %d:\n%s>" % (self.label, self.bid,
! '\n'.join(insts))
def emit(self, inst):
***************
*** 268,272 ****
assert len(self.next) == 1, map(str, self.next)
! _uncond_transfer = ('RETURN_VALUE', 'RAISE_VARARGS',
'JUMP_ABSOLUTE', 'JUMP_FORWARD', 'CONTINUE_LOOP')
--- 260,264 ----
assert len(self.next) == 1, map(str, self.next)
! _uncond_transfer = ('RETURN_VALUE', 'RAISE_VARARGS', 'YIELD_VALUE',
'JUMP_ABSOLUTE', 'JUMP_FORWARD', 'CONTINUE_LOOP')
***************
*** 445,449 ****
if len(inst) == 1:
pc = pc + 1
! else:
# arg takes 2 bytes
pc = pc + 3
--- 437,441 ----
if len(inst) == 1:
pc = pc + 1
! elif inst[0] != "SET_LINENO":
# arg takes 2 bytes
pc = pc + 3
***************
*** 454,458 ****
if len(inst) == 1:
pc = pc + 1
! else:
pc = pc + 3
opname = inst[0]
--- 446,450 ----
if len(inst) == 1:
pc = pc + 1
! elif inst[0] != "SET_LINENO":
pc = pc + 3
opname = inst[0]
***************
*** 582,585 ****
--- 574,578 ----
if opname == "SET_LINENO":
lnotab.nextLine(oparg)
+ continue
hi, lo = twobyte(oparg)
try:
***************
*** 699,703 ****
# compiler because it only generates a SET_LINENO instruction
# for the assignment.
! if line > 0:
push = self.lnotab.append
while addr > 255:
--- 692,696 ----
# compiler because it only generates a SET_LINENO instruction
# for the assignment.
! if line >= 0:
push = self.lnotab.append
while addr > 255:
***************
*** 714,721 ****
def getCode(self):
! return string.join(self.code, '')
def getTable(self):
! return string.join(map(chr, self.lnotab), '')
class StackDepthTracker:
--- 707,714 ----
def getCode(self):
! return ''.join(self.code)
def getTable(self):
! return ''.join(map(chr, self.lnotab))
class StackDepthTracker:
***************
*** 770,773 ****
--- 763,767 ----
'PRINT_ITEM': -1,
'RETURN_VALUE': -1,
+ 'YIELD_VALUE': -1,
'EXEC_STMT': -3,
'BUILD_CLASS': -2,
Index: pycodegen.py
===================================================================
RCS file: /cvsroot/wpdev/xmlscripts/python-lib/compiler/pycodegen.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** pycodegen.py 21 Dec 2002 14:52:54 -0000 1.2
--- pycodegen.py 10 Nov 2003 12:44:15 -0000 1.3
***************
*** 2,7 ****
import os
import marshal
- import stat
- import string
import struct
import sys
--- 2,5 ----
***************
*** 16,19 ****
--- 14,18 ----
from compiler.pyassem import TupleArg
+ # XXX The version-specific code can go, since this code only works with 2.x.
# Do we have Python 1.x or Python 2.x?
try:
***************
*** 35,48 ****
END_FINALLY = 4
- # XXX this doesn't seem to be used
- class BlockStack(misc.Stack):
- __super_init = misc.Stack.__init__
-
- def __init__(self):
- self.__super_init(self)
- self.loop = None
-
def compileFile(filename, display=0):
! f = open(filename)
buf = f.read()
f.close()
--- 34,39 ----
END_FINALLY = 4
def compileFile(filename, display=0):
! f = open(filename, 'U')
buf = f.read()
f.close()
***************
*** 50,54 ****
try:
mod.compile(display)
! except SyntaxError, err:
raise
else:
--- 41,45 ----
try:
mod.compile(display)
! except SyntaxError:
raise
else:
***************
*** 136,140 ****
# to indicate the type of the value. simplest way to get the
# same effect is to call marshal and then skip the code.
! mtime = os.stat(self.filename)[stat.ST_MTIME]
mtime = struct.pack('<i', mtime)
return self.MAGIC + mtime
--- 127,131 ----
# to indicate the type of the value. simplest way to get the
# same effect is to call marshal and then skip the code.
! mtime = os.path.getmtime(self.filename)
mtime = struct.pack('<i', mtime)
return self.MAGIC + mtime
***************
*** 313,319 ****
self.emit(prefix + '_NAME', name)
! def set_lineno(self, node, force=0):
! """Emit SET_LINENO if node has lineno attribute and it is
! different than the last lineno emitted.
Returns true if SET_LINENO was emitted.
--- 304,318 ----
self.emit(prefix + '_NAME', name)
! # The set_lineno() function and the explicit emit() calls for
! # SET_LINENO below are only used to generate the line number table.
! # As of Python 2.3, the interpreter does not have a SET_LINENO
! # instruction. pyassem treats SET_LINENO opcodes as a special case.
!
! def set_lineno(self, node, force=False):
! """Emit SET_LINENO if necessary.
!
! The instruction is considered necessary if the node has a
! lineno attribute and it is different than the last lineno
! emitted.
Returns true if SET_LINENO was emitted.
***************
*** 329,334 ****
self.emit('SET_LINENO', lineno)
self.last_lineno = lineno
! return 1
! return 0
# The first few visitor methods handle nodes that generator new
--- 328,333 ----
self.emit('SET_LINENO', lineno)
self.last_lineno = lineno
! return True
! return False
# The first few visitor methods handle nodes that generator new
***************
*** 447,451 ****
self.setups.push((LOOP, loop))
! self.set_lineno(node, force=1)
self.visit(node.test)
self.emit('JUMP_IF_FALSE', else_ or after)
--- 446,450 ----
self.setups.push((LOOP, loop))
! self.set_lineno(node, force=True)
self.visit(node.test)
self.emit('JUMP_IF_FALSE', else_ or after)
***************
*** 610,614 ****
self.emit('GET_ITER')
self.nextBlock(start)
! self.emit('SET_LINENO', node.lineno)
self.emit('FOR_ITER', anchor)
self.nextBlock()
--- 609,613 ----
self.emit('GET_ITER')
self.nextBlock(start)
! self.set_lineno(node, force=True)
self.emit('FOR_ITER', anchor)
self.nextBlock()
***************
*** 617,621 ****
def visitListCompIf(self, node, branch):
! self.set_lineno(node, force=1)
self.visit(node.test)
self.emit('JUMP_IF_FALSE', branch)
--- 616,620 ----
def visitListCompIf(self, node, branch):
! self.set_lineno(node, force=True)
self.visit(node.test)
self.emit('JUMP_IF_FALSE', branch)
***************
*** 762,767 ****
self.emit('LOAD_CONST', None)
self.emit('IMPORT_NAME', name)
! mod = string.split(name, ".")[0]
! self.storeName(alias or mod)
def visitFrom(self, node):
--- 761,770 ----
self.emit('LOAD_CONST', None)
self.emit('IMPORT_NAME', name)
! mod = name.split(".")[0]
! if alias:
! self._resolveDots(name)
! self.storeName(alias)
! else:
! self.storeName(mod)
def visitFrom(self, node):
***************
*** 788,792 ****
def _resolveDots(self, name):
! elts = string.split(name, ".")
if len(elts) == 1:
return
--- 791,795 ----
def _resolveDots(self, name):
! elts = name.split(".")
if len(elts) == 1:
return
***************
*** 975,979 ****
self.set_lineno(node)
self.visit(node.value)
! self.emit('YIELD_STMT')
# slice and subscript stuff
--- 978,982 ----
self.set_lineno(node)
self.visit(node.value)
! self.emit('YIELD_VALUE')
# slice and subscript stuff
***************
*** 1119,1135 ****
def visitDict(self, node):
! lineno = getattr(node, 'lineno', None)
! if lineno:
! self.emit('SET_LINENO', lineno)
self.emit('BUILD_MAP', 0)
for k, v in node.items:
- lineno2 = getattr(node, 'lineno', None)
- if lineno2 is not None and lineno != lineno2:
- self.emit('SET_LINENO', lineno2)
- lineno = lineno2
self.emit('DUP_TOP')
- self.visit(v)
- self.emit('ROT_TWO')
self.visit(k)
self.emit('STORE_SUBSCR')
--- 1122,1132 ----
def visitDict(self, node):
! self.set_lineno(node)
self.emit('BUILD_MAP', 0)
for k, v in node.items:
self.emit('DUP_TOP')
self.visit(k)
+ self.visit(v)
+ self.emit('ROT_THREE')
self.emit('STORE_SUBSCR')
***************
*** 1185,1189 ****
def get_module(self):
return self
!
def visitDiscard(self, node):
# XXX Discard means it's an expression. Perhaps this is a bad
--- 1182,1186 ----
def get_module(self):
return self
!
def visitDiscard(self, node):
# XXX Discard means it's an expression. Perhaps this is a bad
***************
*** 1266,1272 ****
self.graph.setFreeVars(self.scope.get_free_vars())
self.graph.setCellVars(self.scope.get_cell_vars())
! if self.graph.checkFlag(CO_GENERATOR_ALLOWED):
! if self.scope.generator is not None:
! self.graph.setFlag(CO_GENERATOR)
class AbstractClassCode:
--- 1263,1268 ----
self.graph.setFreeVars(self.scope.get_free_vars())
self.graph.setCellVars(self.scope.get_cell_vars())
! if self.scope.generator is not None:
! self.graph.setFlag(CO_GENERATOR)
class AbstractClassCode:
***************
*** 1305,1311 ****
self.graph.setCellVars(self.scope.get_cell_vars())
self.set_lineno(klass)
if klass.doc:
self.emit("LOAD_CONST", klass.doc)
! self.storeName("__doc__")
def generateArgList(arglist):
--- 1301,1309 ----
self.graph.setCellVars(self.scope.get_cell_vars())
self.set_lineno(klass)
+ self.emit("LOAD_GLOBAL", "__name__")
+ self.storeName("__module__")
if klass.doc:
self.emit("LOAD_CONST", klass.doc)
! self.storeName('__doc__')
def generateArgList(arglist):
***************
*** 1383,1388 ****
if __name__ == "__main__":
- import sys
-
for file in sys.argv[1:]:
compileFile(file)
--- 1381,1384 ----
Index: symbols.py
===================================================================
RCS file: /cvsroot/wpdev/xmlscripts/python-lib/compiler/symbols.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** symbols.py 21 Dec 2002 14:52:54 -0000 1.2
--- symbols.py 10 Nov 2003 12:44:15 -0000 1.3
***************
*** 252,255 ****
--- 252,256 ----
if node.doc is not None:
scope.add_def('__doc__')
+ scope.add_def('__module__')
self.scopes[node] = scope
prev = self.klass
Index: transformer.py
===================================================================
RCS file: /cvsroot/wpdev/xmlscripts/python-lib/compiler/transformer.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** transformer.py 21 Dec 2002 14:52:54 -0000 1.2
--- transformer.py 10 Nov 2003 12:44:15 -0000 1.3
***************
*** 29,33 ****
import symbol
import token
- import string
import sys
--- 29,32 ----
***************
*** 39,43 ****
def parseFile(path):
f = open(path)
! src = f.read()
f.close()
return parse(src)
--- 38,46 ----
def parseFile(path):
f = open(path)
! # XXX The parser API tolerates files without a trailing newline,
! # but not strings without a trailing newline. Always add an extra
! # newline to the file contents, since we're going through the string
! # version of the API.
! src = f.read() + "\n"
f.close()
return parse(src)
***************
*** 70,74 ****
if nodes.has_key(kind):
try:
! return apply(nodes[kind], args[1:])
except TypeError:
print nodes[kind], len(args), args
--- 73,77 ----
if nodes.has_key(kind):
try:
! return nodes[kind](*args[1:])
except TypeError:
print nodes[kind], len(args), args
***************
*** 102,105 ****
--- 105,109 ----
token.NAME: self.atom_name,
}
+ self.encoding = None
def transform(self, tree):
***************
*** 112,116 ****
"""Return a modified parse tree for the given suite text."""
# Hack for handling non-native line endings on non-DOS like OSs.
! text = string.replace(text, '\x0d', '')
return self.transform(parser.suite(text))
--- 116,121 ----
"""Return a modified parse tree for the given suite text."""
# Hack for handling non-native line endings on non-DOS like OSs.
! # this can go now we have universal newlines?
! text = text.replace('\x0d', '')
return self.transform(parser.suite(text))
***************
*** 133,136 ****
--- 138,147 ----
### emit a line-number node?
n = node[0]
+
+ if n == symbol.encoding_decl:
+ self.encoding = node[2]
+ node = node[1]
+ n = node[0]
+
if n == symbol.single_input:
return self.single_input(node[1:])
***************
*** 293,300 ****
return n
if nodelist[1][0] == token.EQUAL:
! nodes = []
for i in range(0, len(nodelist) - 2, 2):
! nodes.append(self.com_assign(nodelist[i], OP_ASSIGN))
! n = Assign(nodes, exprNode)
n.lineno = nodelist[1][2]
else:
--- 304,311 ----
return n
if nodelist[1][0] == token.EQUAL:
! nodesl = []
for i in range(0, len(nodelist) - 2, 2):
! nodesl.append(self.com_assign(nodelist[i], OP_ASSIGN))
! n = Assign(nodesl, exprNode)
n.lineno = nodelist[1][2]
else:
***************
*** 521,524 ****
--- 532,536 ----
testlist_safe = testlist # XXX
+ testlist1 = testlist
exprlist = testlist
***************
*** 640,643 ****
--- 652,656 ----
t = elt[0]
node = self.com_node(nodelist[-1])
+ # need to handle (unary op)constant here...
if t == token.PLUS:
node = UnaryAdd(node)
***************
*** 701,709 ****
return n
def atom_string(self, nodelist):
- ### need to verify this matches compile.c
k = ''
for node in nodelist:
! k = k + eval(node[1])
n = Const(k)
n.lineno = nodelist[0][2]
--- 714,732 ----
return n
+ def decode_literal(self, lit):
+ if self.encoding:
+ # this is particularly fragile & a bit of a
+ # hack... changes in compile.c:parsestr and
+ # tokenizer.c must be reflected here.
+ if self.encoding not in ['utf-8', 'iso-8859-1']:
+ lit = unicode(lit, 'utf-8').encode(self.encoding)
+ return eval("# coding: %s\n%s" % (self.encoding, lit))
+ else:
+ return eval(lit)
+
def atom_string(self, nodelist):
k = ''
for node in nodelist:
! k += self.decode_literal(node[1])
n = Const(k)
n.lineno = nodelist[0][2]
Index: visitor.py
===================================================================
RCS file: /cvsroot/wpdev/xmlscripts/python-lib/compiler/visitor.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** visitor.py 1 Jul 2002 01:57:03 -0000 1.1.1.1
--- visitor.py 10 Nov 2003 12:44:15 -0000 1.2
***************
*** 27,39 ****
the walk has occurred.) The ASTVisitor modifies the visitor
argument by adding a visit method to the visitor; this method can
! be used to visit a particular child node. If the visitor method
! returns a true value, the ASTVisitor will not traverse the child
! nodes.
!
! XXX The interface for controlling the preorder walk needs to be
! re-considered. The current interface is convenient for visitors
! that mostly let the ASTVisitor do everything. For something like
! a code generator, where you want to walk to occur in a specific
! order, it's a pain to add "return 1" to the end of each method.
"""
--- 27,31 ----
the walk has occurred.) The ASTVisitor modifies the visitor
argument by adding a visit method to the visitor; this method can
! be used to visit a child node of arbitrary type.
"""
|