mirror of
https://github.com/python/cpython.git
synced 2025-10-17 20:28:43 +00:00
Some more changes related to the new except syntax and semantics,
by Collin Winter.
This commit is contained in:
parent
b940e113bf
commit
16be03e4a2
10 changed files with 46 additions and 32 deletions
|
@ -825,11 +825,33 @@ class CodeGenerator:
|
|||
self.emit('POP_TOP')
|
||||
self.emit('POP_TOP')
|
||||
if target:
|
||||
self.visit(target)
|
||||
cleanup_body = self.newBlock()
|
||||
cleanup_final = self.newBlock()
|
||||
target_name = target[1]
|
||||
|
||||
self.storeName(target_name)
|
||||
self.emit('POP_TOP')
|
||||
self.emit('SETUP_FINALLY', cleanup_final)
|
||||
self.nextBlock(cleanup_body)
|
||||
self.setups.push((TRY_FINALLY, cleanup_body))
|
||||
self.visit(body)
|
||||
self.emit('POP_BLOCK')
|
||||
self.setups.pop()
|
||||
self.emit('LOAD_CONST', None)
|
||||
self.nextBlock(cleanup_final)
|
||||
self.setups.push((END_FINALLY, cleanup_final))
|
||||
|
||||
|
||||
self.emit('LOAD_CONST', None)
|
||||
self.storeName(target_name)
|
||||
self._implicitNameOp('DELETE', target_name)
|
||||
|
||||
self.emit('END_FINALLY')
|
||||
self.setups.pop()
|
||||
else:
|
||||
self.emit('POP_TOP')
|
||||
self.emit('POP_TOP')
|
||||
self.visit(body)
|
||||
self.emit('POP_TOP')
|
||||
self.visit(body)
|
||||
self.emit('JUMP_FORWARD', end)
|
||||
if expr:
|
||||
self.nextBlock(next)
|
||||
|
|
|
@ -988,16 +988,16 @@ class Transformer:
|
|||
for i in range(3, len(nodelist), 3):
|
||||
node = nodelist[i]
|
||||
if node[0] == symbol.except_clause:
|
||||
# except_clause: 'except' [expr [',' expr]] */
|
||||
# except_clause: 'except' [expr ['as' NAME]] */
|
||||
if len(node) > 2:
|
||||
expr1 = self.com_node(node[2])
|
||||
expr = self.com_node(node[2])
|
||||
if len(node) > 4:
|
||||
expr2 = self.com_assign(node[4], OP_ASSIGN)
|
||||
expr_name = node[4]
|
||||
else:
|
||||
expr2 = None
|
||||
expr_name = None
|
||||
else:
|
||||
expr1 = expr2 = None
|
||||
clauses.append((expr1, expr2, self.com_node(nodelist[i+2])))
|
||||
expr = expr_name = None
|
||||
clauses.append((expr, expr_name, self.com_node(nodelist[i+2])))
|
||||
|
||||
if node[0] == token.NAME:
|
||||
if node[1] == 'else':
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue