Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
number of tests, all because of the codecs/_multibytecodecs issue described
here (it's not a Py3K issue, just something Py3K discovers):
http://mail.python.org/pipermail/python-dev/2006-April/064051.html

Hye-Shik Chang promised to look for a fix, so no need to fix it here. The
tests that are expected to break are:

test_codecencodings_cn
test_codecencodings_hk
test_codecencodings_jp
test_codecencodings_kr
test_codecencodings_tw
test_codecs
test_multibytecodec

This merge fixes an actual test failure (test_weakref) in this branch,
though, so I believe merging is the right thing to do anyway.
diff --git a/Lib/test/test_trace.py b/Lib/test/test_trace.py
index 944ff9a..4f946f7 100644
--- a/Lib/test/test_trace.py
+++ b/Lib/test/test_trace.py
@@ -13,7 +13,15 @@
                 (1, 'line'),
                 (1, 'return')]
 
-# Armin Rigo's failing example:
+# Many of the tests below are tricky because they involve pass statements.
+# If there is implicit control flow around a pass statement (in an except
+# clause or else caluse) under what conditions do you set a line number
+# following that clause?
+
+
+# The entire "while 0:" statement is optimized away.  No code
+# exists for it, so the line numbers skip directly from "del x"
+# to "x = 1".
 def arigo_example():
     x = 1
     del x
@@ -24,7 +32,6 @@
 arigo_example.events = [(0, 'call'),
                         (1, 'line'),
                         (2, 'line'),
-                        (3, 'line'),
                         (5, 'line'),
                         (5, 'return')]
 
@@ -60,14 +67,16 @@
                       (2, 'return')]
 
 def no_pop_blocks():
-    while 0:
+    y = 1
+    while not y:
         bla
     x = 1
 
 no_pop_blocks.events = [(0, 'call'),
                         (1, 'line'),
-                        (3, 'line'),
-                        (3, 'return')]
+                        (2, 'line'),
+                        (4, 'line'),
+                        (4, 'return')]
 
 def called(): # line -3
     x = 1
@@ -127,6 +136,13 @@
                              (4, 'return')]
 
 # implicit return example
+# This test is interesting because of the else: pass
+# part of the code.  The code generate for the true
+# part of the if contains a jump past the else branch.
+# The compiler then generates an implicit "return None"
+# Internally, the compiler visits the pass statement
+# and stores its line number for use on the next instruction.
+# The next instruction is the implicit return None.
 def ireturn_example():
     a = 5
     b = 5
@@ -140,7 +156,8 @@
                           (2, 'line'),
                           (3, 'line'),
                           (4, 'line'),
-                          (4, 'return')]
+                          (6, 'line'),
+                          (6, 'return')]
 
 # Tight loop with while(1) example (SF #765624)
 def tightloop_example():
@@ -221,14 +238,12 @@
 
     def test_01_basic(self):
         self.run_test(basic)
-## XXX: These tests fail with the new ast compiler.  They must
-## be fixed before a release.
-##    def test_02_arigo(self):
-##        self.run_test(arigo_example)
+    def test_02_arigo(self):
+        self.run_test(arigo_example)
     def test_03_one_instr(self):
         self.run_test(one_instr_line)
-##    def test_04_no_pop_blocks(self):
-##        self.run_test(no_pop_blocks)
+    def test_04_no_pop_blocks(self):
+        self.run_test(no_pop_blocks)
 ##    def test_05_no_pop_tops(self):
 ##        self.run_test(no_pop_tops)
     def test_06_call(self):
@@ -240,8 +255,8 @@
         self.run_test2(settrace_and_return)
     def test_09_settrace_and_raise(self):
         self.run_test2(settrace_and_raise)
-##    def test_10_ireturn(self):
-##        self.run_test(ireturn_example)
+    def test_10_ireturn(self):
+        self.run_test(ireturn_example)
     def test_11_tightloop(self):
         self.run_test(tightloop_example)
     def test_12_tighterloop(self):
@@ -579,17 +594,14 @@
         self.run_test(no_jump_too_far_forwards)
     def test_09_no_jump_too_far_backwards(self):
         self.run_test(no_jump_too_far_backwards)
-# XXX: These tests cause the interpreter to crash.  The frame_setlineno()
-# function no longer works correctly because the lineno table generated by
-# the AST compiler is slightly different than with the old compiler.
-#    def test_10_no_jump_to_except_1(self):
-#        self.run_test(no_jump_to_except_1)
-#    def test_11_no_jump_to_except_2(self):
-#        self.run_test(no_jump_to_except_2)
-#    def test_12_no_jump_to_except_3(self):
-#        self.run_test(no_jump_to_except_3)
-#    def test_13_no_jump_to_except_4(self):
-#        self.run_test(no_jump_to_except_4)
+    def test_10_no_jump_to_except_1(self):
+        self.run_test(no_jump_to_except_1)
+    def test_11_no_jump_to_except_2(self):
+        self.run_test(no_jump_to_except_2)
+    def test_12_no_jump_to_except_3(self):
+        self.run_test(no_jump_to_except_3)
+    def test_13_no_jump_to_except_4(self):
+        self.run_test(no_jump_to_except_4)
     def test_14_no_jump_forwards_into_block(self):
         self.run_test(no_jump_forwards_into_block)
     def test_15_no_jump_backwards_into_block(self):