[Python-checkins] r47057 - in python/trunk: Lib/compiler/transformer.py Misc/NEWS

georg.brandl python-checkins at python.org
Wed Jun 21 19:45:17 CEST 2006


Author: georg.brandl
Date: Wed Jun 21 19:45:17 2006
New Revision: 47057
Modified:
 python/trunk/Lib/compiler/transformer.py
 python/trunk/Misc/NEWS
Log:
fix [ 1509132 ] compiler module builds incorrect AST for TryExceptFinally
Modified: python/trunk/Lib/compiler/transformer.py
==============================================================================
--- python/trunk/Lib/compiler/transformer.py	(original)
+++ python/trunk/Lib/compiler/transformer.py	Wed Jun 21 19:45:17 2006
@@ -536,12 +536,7 @@
 lineno=nodelist[0][2])
 
 def try_stmt(self, nodelist):
- # 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite]
- # | 'try' ':' suite 'finally' ':' suite
- if nodelist[3][0] != symbol.except_clause:
- return self.com_try_finally(nodelist)
-
- return self.com_try_except(nodelist)
+ return self.com_try_except_finally(nodelist)
 
 def with_stmt(self, nodelist):
 return self.com_with(nodelist)
@@ -917,18 +912,21 @@
 bases.append(self.com_node(node[i]))
 return bases
 
- def com_try_finally(self, nodelist):
- # try_fin_stmt: "try" ":" suite "finally" ":" suite
- return TryFinally(self.com_node(nodelist[2]),
- self.com_node(nodelist[5]),
- lineno=nodelist[0][2])
-
- def com_try_except(self, nodelist):
- # try_except: 'try' ':' suite (except_clause ':' suite)* ['else' suite]
+ def com_try_except_finally(self, nodelist):
+ # ('try' ':' suite
+ # ((except_clause ':' suite)+ ['else' ':' suite] ['finally' ':' suite]
+ # | 'finally' ':' suite))
+
+ if nodelist[3][0] == token.NAME:
+ # 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)]
- stmt = self.com_node(nodelist[2])
 clauses = []
 elseNode = None
+ finallyNode = None
 for i in range(3, len(nodelist), 3):
 node = nodelist[i]
 if node[0] == symbol.except_clause:
@@ -944,9 +942,16 @@
 clauses.append((expr1, expr2, self.com_node(nodelist[i+2])))
 
 if node[0] == token.NAME:
- elseNode = self.com_node(nodelist[i+2])
- return TryExcept(self.com_node(nodelist[2]), clauses, elseNode,
- lineno=nodelist[0][2])
+ if node[1] == 'else':
+ elseNode = self.com_node(nodelist[i+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):
 # with_stmt: 'with' expr [with_var] ':' suite
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Wed Jun 21 19:45:17 2006
@@ -4,8 +4,25 @@
 
 (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?
-=================================
+================================
 
 *Release date: 20-JUN-2006*
 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /