comparison Python/pythonrun.c @ 76085:ff7587546a1d

merge 3.2
author Benjamin Peterson <benjamin@python.org>
date Tue, 03 Apr 2012 00:35:36 -0400
parents b299c4f31ff2 43606a4085b0
children 2dd046be2c88
comparison
equal deleted inserted replaced
76076:e97940f701be 76085:ff7587546a1d
1354 _Py_IDENTIFIER(filename); 1354 _Py_IDENTIFIER(filename);
1355 _Py_IDENTIFIER(lineno); 1355 _Py_IDENTIFIER(lineno);
1356 _Py_IDENTIFIER(offset); 1356 _Py_IDENTIFIER(offset);
1357 _Py_IDENTIFIER(text); 1357 _Py_IDENTIFIER(text);
1358 1358
1359 *message = NULL;
1360
1359 /* new style errors. `err' is an instance */ 1361 /* new style errors. `err' is an instance */
1360 1362 *message = _PyObject_GetAttrId(err, &PyId_msg);
1361 if (! (v = _PyObject_GetAttrId(err, &PyId_msg))) 1363 if (!*message)
1362 goto finally; 1364 goto finally;
1363 *message = v; 1365
1364 1366 v = _PyObject_GetAttrId(err, &PyId_filename);
1365 if (!(v = _PyObject_GetAttrId(err, &PyId_filename))) 1367 if (!v)
1366 goto finally; 1368 goto finally;
1367 if (v == Py_None) 1369 if (v == Py_None) {
1370 Py_DECREF(v);
1368 *filename = NULL; 1371 *filename = NULL;
1369 else if (! (*filename = _PyUnicode_AsString(v))) 1372 }
1370 goto finally; 1373 else {
1371 1374 *filename = _PyUnicode_AsString(v);
1372 Py_DECREF(v); 1375 Py_DECREF(v);
1373 if (!(v = _PyObject_GetAttrId(err, &PyId_lineno))) 1376 if (!*filename)
1377 goto finally;
1378 }
1379
1380 v = _PyObject_GetAttrId(err, &PyId_lineno);
1381 if (!v)
1374 goto finally; 1382 goto finally;
1375 hold = PyLong_AsLong(v); 1383 hold = PyLong_AsLong(v);
1376 Py_DECREF(v); 1384 Py_DECREF(v);
1377 v = NULL;
1378 if (hold < 0 && PyErr_Occurred()) 1385 if (hold < 0 && PyErr_Occurred())
1379 goto finally; 1386 goto finally;
1380 *lineno = (int)hold; 1387 *lineno = (int)hold;
1381 1388
1382 if (!(v = _PyObject_GetAttrId(err, &PyId_offset))) 1389 v = _PyObject_GetAttrId(err, &PyId_offset);
1390 if (!v)
1383 goto finally; 1391 goto finally;
1384 if (v == Py_None) { 1392 if (v == Py_None) {
1385 *offset = -1; 1393 *offset = -1;
1386 Py_DECREF(v); 1394 Py_DECREF(v);
1387 v = NULL;
1388 } else { 1395 } else {
1389 hold = PyLong_AsLong(v); 1396 hold = PyLong_AsLong(v);
1390 Py_DECREF(v); 1397 Py_DECREF(v);
1391 v = NULL;
1392 if (hold < 0 && PyErr_Occurred()) 1398 if (hold < 0 && PyErr_Occurred())
1393 goto finally; 1399 goto finally;
1394 *offset = (int)hold; 1400 *offset = (int)hold;
1395 } 1401 }
1396 1402
1397 if (!(v = _PyObject_GetAttrId(err, &PyId_text))) 1403 v = _PyObject_GetAttrId(err, &PyId_text);
1404 if (!v)
1398 goto finally; 1405 goto finally;
1399 if (v == Py_None) 1406 if (v == Py_None) {
1407 Py_DECREF(v);
1400 *text = NULL; 1408 *text = NULL;
1401 else if (!PyUnicode_Check(v) || 1409 }
1402 !(*text = _PyUnicode_AsString(v))) 1410 else {
1403 goto finally; 1411 *text = _PyUnicode_AsString(v);
1404 Py_DECREF(v); 1412 Py_DECREF(v);
1413 if (!*text)
1414 goto finally;
1415 }
1405 return 1; 1416 return 1;
1406 1417
1407 finally: 1418 finally:
1408 Py_XDECREF(v); 1419 Py_XDECREF(*message);
1409 return 0; 1420 return 0;
1410 } 1421 }
1411 1422
1412 void 1423 void
1413 PyErr_Print(void) 1424 PyErr_Print(void)