mirror of
https://github.com/python/cpython.git
synced 2025-10-14 02:43:49 +00:00
Support // and //=
Generate SET_LINENO for del statements. Define klass=1 for PyFlowGraph constructor for a class statement. A class has no varnames.
This commit is contained in:
parent
7abf520d6c
commit
94afe32b5e
2 changed files with 12 additions and 2 deletions
|
@ -671,6 +671,7 @@ class CodeGenerator:
|
||||||
if node.flags == 'OP_ASSIGN':
|
if node.flags == 'OP_ASSIGN':
|
||||||
self.storeName(node.name)
|
self.storeName(node.name)
|
||||||
elif node.flags == 'OP_DELETE':
|
elif node.flags == 'OP_DELETE':
|
||||||
|
self.set_lineno(node)
|
||||||
self.delName(node.name)
|
self.delName(node.name)
|
||||||
else:
|
else:
|
||||||
print "oops", node.flags
|
print "oops", node.flags
|
||||||
|
@ -716,6 +717,7 @@ class CodeGenerator:
|
||||||
'-=' : 'INPLACE_SUBTRACT',
|
'-=' : 'INPLACE_SUBTRACT',
|
||||||
'*=' : 'INPLACE_MULTIPLY',
|
'*=' : 'INPLACE_MULTIPLY',
|
||||||
'/=' : 'INPLACE_DIVIDE',
|
'/=' : 'INPLACE_DIVIDE',
|
||||||
|
'//=': 'INPLACE_FLOOR_DIVIDE',
|
||||||
'%=' : 'INPLACE_MODULO',
|
'%=' : 'INPLACE_MODULO',
|
||||||
'**=': 'INPLACE_POWER',
|
'**=': 'INPLACE_POWER',
|
||||||
'>>=': 'INPLACE_RSHIFT',
|
'>>=': 'INPLACE_RSHIFT',
|
||||||
|
@ -889,6 +891,9 @@ class CodeGenerator:
|
||||||
def visitDiv(self, node):
|
def visitDiv(self, node):
|
||||||
return self.binaryOp(node, 'BINARY_DIVIDE')
|
return self.binaryOp(node, 'BINARY_DIVIDE')
|
||||||
|
|
||||||
|
def visitFloorDiv(self, node):
|
||||||
|
return self.binaryOp(node, 'BINARY_FLOOR_DIVIDE')
|
||||||
|
|
||||||
def visitMod(self, node):
|
def visitMod(self, node):
|
||||||
return self.binaryOp(node, 'BINARY_MODULO')
|
return self.binaryOp(node, 'BINARY_MODULO')
|
||||||
|
|
||||||
|
@ -1168,7 +1173,7 @@ class AbstractClassCode:
|
||||||
def __init__(self, klass, filename, scopes):
|
def __init__(self, klass, filename, scopes):
|
||||||
self.class_name = klass.name
|
self.class_name = klass.name
|
||||||
self.graph = pyassem.PyFlowGraph(klass.name, filename,
|
self.graph = pyassem.PyFlowGraph(klass.name, filename,
|
||||||
optimized=0)
|
optimized=0, klass=1)
|
||||||
self.super_init(filename)
|
self.super_init(filename)
|
||||||
lnf = walk(klass.code, self.NameFinder(), verbose=0)
|
lnf = walk(klass.code, self.NameFinder(), verbose=0)
|
||||||
self.locals.push(lnf.getLocals())
|
self.locals.push(lnf.getLocals())
|
||||||
|
|
|
@ -671,6 +671,7 @@ class CodeGenerator:
|
||||||
if node.flags == 'OP_ASSIGN':
|
if node.flags == 'OP_ASSIGN':
|
||||||
self.storeName(node.name)
|
self.storeName(node.name)
|
||||||
elif node.flags == 'OP_DELETE':
|
elif node.flags == 'OP_DELETE':
|
||||||
|
self.set_lineno(node)
|
||||||
self.delName(node.name)
|
self.delName(node.name)
|
||||||
else:
|
else:
|
||||||
print "oops", node.flags
|
print "oops", node.flags
|
||||||
|
@ -716,6 +717,7 @@ class CodeGenerator:
|
||||||
'-=' : 'INPLACE_SUBTRACT',
|
'-=' : 'INPLACE_SUBTRACT',
|
||||||
'*=' : 'INPLACE_MULTIPLY',
|
'*=' : 'INPLACE_MULTIPLY',
|
||||||
'/=' : 'INPLACE_DIVIDE',
|
'/=' : 'INPLACE_DIVIDE',
|
||||||
|
'//=': 'INPLACE_FLOOR_DIVIDE',
|
||||||
'%=' : 'INPLACE_MODULO',
|
'%=' : 'INPLACE_MODULO',
|
||||||
'**=': 'INPLACE_POWER',
|
'**=': 'INPLACE_POWER',
|
||||||
'>>=': 'INPLACE_RSHIFT',
|
'>>=': 'INPLACE_RSHIFT',
|
||||||
|
@ -889,6 +891,9 @@ class CodeGenerator:
|
||||||
def visitDiv(self, node):
|
def visitDiv(self, node):
|
||||||
return self.binaryOp(node, 'BINARY_DIVIDE')
|
return self.binaryOp(node, 'BINARY_DIVIDE')
|
||||||
|
|
||||||
|
def visitFloorDiv(self, node):
|
||||||
|
return self.binaryOp(node, 'BINARY_FLOOR_DIVIDE')
|
||||||
|
|
||||||
def visitMod(self, node):
|
def visitMod(self, node):
|
||||||
return self.binaryOp(node, 'BINARY_MODULO')
|
return self.binaryOp(node, 'BINARY_MODULO')
|
||||||
|
|
||||||
|
@ -1168,7 +1173,7 @@ class AbstractClassCode:
|
||||||
def __init__(self, klass, filename, scopes):
|
def __init__(self, klass, filename, scopes):
|
||||||
self.class_name = klass.name
|
self.class_name = klass.name
|
||||||
self.graph = pyassem.PyFlowGraph(klass.name, filename,
|
self.graph = pyassem.PyFlowGraph(klass.name, filename,
|
||||||
optimized=0)
|
optimized=0, klass=1)
|
||||||
self.super_init(filename)
|
self.super_init(filename)
|
||||||
lnf = walk(klass.code, self.NameFinder(), verbose=0)
|
lnf = walk(klass.code, self.NameFinder(), verbose=0)
|
||||||
self.locals.push(lnf.getLocals())
|
self.locals.push(lnf.getLocals())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue