New version of tb_lineno(), this time *not* using try-except, to avoid
disturbing the current exception, and returning tb.tb_lineno, which is
the line number of thr traceback, rather than the current line number.
By Jim Hugunin.
diff --git a/Lib/traceback.py b/Lib/traceback.py
index d579639..7fc209e 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -186,16 +186,16 @@
 # with -O on).
 # Coded by Marc-Andre Lemburg from the example of PyCode_Addr2Line()
 # in compile.c.
+# Revised version by Jim Hugunin to work with JPython too.
 
 def tb_lineno(tb):
-	f = tb.tb_frame
-	try:
-		c = f.f_code
-		tab = c.co_lnotab
-		line = c.co_firstlineno
-		stopat = tb.tb_lasti
-	except AttributeError:
-		return f.f_lineno
+	c = tb.tb_frame.f_code
+	if not hasattr(c, 'co_lnotab'):
+		return tb.tb_lineno
+
+	tab = c.co_lnotab
+	line = c.co_firstlineno
+	stopat = tb.tb_lasti
 	addr = 0
 	for i in range(0, len(tab), 2):
 		addr = addr + ord(tab[i])