Lots of changes, most minor (fatal() instead of abort(), use of
err_fetch/err_restore and so on).  But...
NOTE: import.c has been rewritten and all the DL stuff is now in the
new file importdl.c.
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index de0de07..f66c8d7 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -242,12 +242,10 @@
 void
 print_error()
 {
-	object *exception, *v, *f;
-	err_get(&exception, &v);
-	if (exception == NULL) {
-		fprintf(stderr, "print_error called but no exception\n");
-		abort();
-	}
+	object *exception, *v, *tb, *f;
+	err_fetch(&exception, &v, &tb);
+	if (exception == NULL)
+		fatal("print_error called but no exception");
 	if (exception == SystemExit) {
 		if (v == NULL || v == None)
 			goaway(0);
@@ -262,11 +260,12 @@
 	}
 	sysset("last_type", exception);
 	sysset("last_value", v);
+	sysset("last_traceback", tb);
 	f = sysget("stderr");
 	if (f == NULL)
 		fprintf(stderr, "lost sys.stderr\n");
 	else {
-		printtraceback(f);
+		tb_print(tb, f);
 		if (exception == SyntaxError) {
 			object *message;
 			char *filename, *text;
@@ -331,6 +330,7 @@
 	}
 	XDECREF(exception);
 	XDECREF(v);
+	XDECREF(tb);
 }
 
 object *
@@ -421,7 +421,6 @@
 	int start;
 {
 	node *n;
-	int err;
 	codeobject *co;
 	n = parse_string(str, start);
 	if (n == NULL)