Commit 19ab87d2 authored by Jeremy Hylton's avatar Jeremy Hylton

Various sundry changes for 2.2 compatibility

Remove the option to have nested scopes or old LGB scopes.  This has a
large impact on the code base, by removing the need for two variants
of each CodeGenerator.

Add a get_module() method to CodeGenerator objects, used to get the
future features for the current module.

Set CO_GENERATOR, CO_GENERATOR_ALLOWED, and CO_FUTURE_DIVISION flags
as appropriate.

Attempt to fix the value of nlocals in newCodeObject(), assuming that
nlocals is 0 if CO_NEWLOCALS is not defined.
parent 564cc22e
...@@ -361,6 +361,10 @@ class PyFlowGraph(FlowGraph): ...@@ -361,6 +361,10 @@ class PyFlowGraph(FlowGraph):
if flag == CO_VARARGS: if flag == CO_VARARGS:
self.argcount = self.argcount - 1 self.argcount = self.argcount - 1
def checkFlag(self, flag):
if self.flags & flag:
return 1
def setFreeVars(self, names): def setFreeVars(self, names):
self.freevars = list(names) self.freevars = list(names)
...@@ -564,7 +568,7 @@ class PyFlowGraph(FlowGraph): ...@@ -564,7 +568,7 @@ class PyFlowGraph(FlowGraph):
def newCodeObject(self): def newCodeObject(self):
assert self.stage == DONE assert self.stage == DONE
if self.flags == 0: if (self.flags & CO_NEWLOCALS) == 0:
nlocals = 0 nlocals = 0
else: else:
nlocals = len(self.varnames) nlocals = len(self.varnames)
...@@ -761,9 +765,6 @@ class StackDepthTracker: ...@@ -761,9 +765,6 @@ class StackDepthTracker:
('LOAD_', 1), ('LOAD_', 1),
] ]
# special cases:
# UNPACK_SEQUENCE, BUILD_TUPLE,
# BUILD_LIST, CALL_FUNCTION, MAKE_FUNCTION, BUILD_SLICE
def UNPACK_SEQUENCE(self, count): def UNPACK_SEQUENCE(self, count):
return count-1 return count-1
def BUILD_TUPLE(self, count): def BUILD_TUPLE(self, count):
......
This diff is collapsed.
...@@ -361,6 +361,10 @@ class PyFlowGraph(FlowGraph): ...@@ -361,6 +361,10 @@ class PyFlowGraph(FlowGraph):
if flag == CO_VARARGS: if flag == CO_VARARGS:
self.argcount = self.argcount - 1 self.argcount = self.argcount - 1
def checkFlag(self, flag):
if self.flags & flag:
return 1
def setFreeVars(self, names): def setFreeVars(self, names):
self.freevars = list(names) self.freevars = list(names)
...@@ -564,7 +568,7 @@ class PyFlowGraph(FlowGraph): ...@@ -564,7 +568,7 @@ class PyFlowGraph(FlowGraph):
def newCodeObject(self): def newCodeObject(self):
assert self.stage == DONE assert self.stage == DONE
if self.flags == 0: if (self.flags & CO_NEWLOCALS) == 0:
nlocals = 0 nlocals = 0
else: else:
nlocals = len(self.varnames) nlocals = len(self.varnames)
...@@ -761,9 +765,6 @@ class StackDepthTracker: ...@@ -761,9 +765,6 @@ class StackDepthTracker:
('LOAD_', 1), ('LOAD_', 1),
] ]
# special cases:
# UNPACK_SEQUENCE, BUILD_TUPLE,
# BUILD_LIST, CALL_FUNCTION, MAKE_FUNCTION, BUILD_SLICE
def UNPACK_SEQUENCE(self, count): def UNPACK_SEQUENCE(self, count):
return count-1 return count-1
def BUILD_TUPLE(self, count): def BUILD_TUPLE(self, count):
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment