fix [ 1509132 ] compiler module builds incorrect AST for TryExceptFinally
This commit is contained in:
parent
10340608f0
commit
ad29e637d8
|
@ -536,12 +536,7 @@ class Transformer:
|
||||||
lineno=nodelist[0][2])
|
lineno=nodelist[0][2])
|
||||||
|
|
||||||
def try_stmt(self, nodelist):
|
def try_stmt(self, nodelist):
|
||||||
# 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite]
|
return self.com_try_except_finally(nodelist)
|
||||||
# | 'try' ':' suite 'finally' ':' suite
|
|
||||||
if nodelist[3][0] != symbol.except_clause:
|
|
||||||
return self.com_try_finally(nodelist)
|
|
||||||
|
|
||||||
return self.com_try_except(nodelist)
|
|
||||||
|
|
||||||
def with_stmt(self, nodelist):
|
def with_stmt(self, nodelist):
|
||||||
return self.com_with(nodelist)
|
return self.com_with(nodelist)
|
||||||
|
@ -917,18 +912,21 @@ class Transformer:
|
||||||
bases.append(self.com_node(node[i]))
|
bases.append(self.com_node(node[i]))
|
||||||
return bases
|
return bases
|
||||||
|
|
||||||
def com_try_finally(self, nodelist):
|
def com_try_except_finally(self, nodelist):
|
||||||
# try_fin_stmt: "try" ":" suite "finally" ":" suite
|
# ('try' ':' suite
|
||||||
return TryFinally(self.com_node(nodelist[2]),
|
# ((except_clause ':' suite)+ ['else' ':' suite] ['finally' ':' suite]
|
||||||
self.com_node(nodelist[5]),
|
# | 'finally' ':' suite))
|
||||||
lineno=nodelist[0][2])
|
|
||||||
|
|
||||||
def com_try_except(self, nodelist):
|
if nodelist[3][0] == token.NAME:
|
||||||
# try_except: 'try' ':' suite (except_clause ':' suite)* ['else' suite]
|
# first clause is a finally clause: only try-finally
|
||||||
|
return TryFinally(self.com_node(nodelist[2]),
|
||||||
|
self.com_node(nodelist[5]),
|
||||||
|
lineno=nodelist[0][2])
|
||||||
|
|
||||||
#tryexcept: [TryNode, [except_clauses], elseNode)]
|
#tryexcept: [TryNode, [except_clauses], elseNode)]
|
||||||
stmt = self.com_node(nodelist[2])
|
|
||||||
clauses = []
|
clauses = []
|
||||||
elseNode = None
|
elseNode = None
|
||||||
|
finallyNode = None
|
||||||
for i in range(3, len(nodelist), 3):
|
for i in range(3, len(nodelist), 3):
|
||||||
node = nodelist[i]
|
node = nodelist[i]
|
||||||
if node[0] == symbol.except_clause:
|
if node[0] == symbol.except_clause:
|
||||||
|
@ -944,9 +942,16 @@ class Transformer:
|
||||||
clauses.append((expr1, expr2, self.com_node(nodelist[i+2])))
|
clauses.append((expr1, expr2, self.com_node(nodelist[i+2])))
|
||||||
|
|
||||||
if node[0] == token.NAME:
|
if node[0] == token.NAME:
|
||||||
elseNode = self.com_node(nodelist[i+2])
|
if node[1] == 'else':
|
||||||
return TryExcept(self.com_node(nodelist[2]), clauses, elseNode,
|
elseNode = self.com_node(nodelist[i+2])
|
||||||
lineno=nodelist[0][2])
|
elif node[1] == 'finally':
|
||||||
|
finallyNode = self.com_node(nodelist[i+2])
|
||||||
|
try_except = TryExcept(self.com_node(nodelist[2]), clauses, elseNode,
|
||||||
|
lineno=nodelist[0][2])
|
||||||
|
if finallyNode:
|
||||||
|
return TryFinally(try_except, finallyNode, lineno=nodelist[0][2])
|
||||||
|
else:
|
||||||
|
return try_except
|
||||||
|
|
||||||
def com_with(self, nodelist):
|
def com_with(self, nodelist):
|
||||||
# with_stmt: 'with' expr [with_var] ':' suite
|
# with_stmt: 'with' expr [with_var] ':' suite
|
||||||
|
|
19
Misc/NEWS
19
Misc/NEWS
|
@ -4,8 +4,25 @@ Python News
|
||||||
|
|
||||||
(editors: check NEWS.help for information about editing NEWS using ReST.)
|
(editors: check NEWS.help for information about editing NEWS using ReST.)
|
||||||
|
|
||||||
|
What's New in Python 2.5 beta 2?
|
||||||
|
================================
|
||||||
|
|
||||||
|
*Release date: XX-JUL-2006*
|
||||||
|
|
||||||
|
Core and builtins
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
|
||||||
|
Library
|
||||||
|
-------
|
||||||
|
|
||||||
|
- The compiler module now correctly compiles the new try-except-finally
|
||||||
|
statement (bug #1509132).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
What's New in Python 2.5 beta 1?
|
What's New in Python 2.5 beta 1?
|
||||||
=================================
|
================================
|
||||||
|
|
||||||
*Release date: 20-JUN-2006*
|
*Release date: 20-JUN-2006*
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue