Mercurial > cpython-lru_cache-weakref
comparison Python/errors.c @ 72926:db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Fri, 14 Oct 2011 15:16:45 +0200 |
| parents | 7109f31300fb |
| children | 84aed9ef7aaf |
comparison
equal
deleted
inserted
replaced
| 72925:7109f31300fb | 72926:db4aa878cea2 |
|---|---|
| 778 | 778 |
| 779 void | 779 void |
| 780 PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) | 780 PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) |
| 781 { | 781 { |
| 782 PyObject *exc, *v, *tb, *tmp; | 782 PyObject *exc, *v, *tb, *tmp; |
| 783 _Py_IDENTIFIER(filename); | |
| 784 _Py_IDENTIFIER(lineno); | |
| 785 _Py_IDENTIFIER(msg); | |
| 786 _Py_IDENTIFIER(offset); | |
| 787 _Py_IDENTIFIER(print_file_and_line); | |
| 788 _Py_IDENTIFIER(text); | |
| 783 | 789 |
| 784 /* add attributes for the line number and filename for the error */ | 790 /* add attributes for the line number and filename for the error */ |
| 785 PyErr_Fetch(&exc, &v, &tb); | 791 PyErr_Fetch(&exc, &v, &tb); |
| 786 PyErr_NormalizeException(&exc, &v, &tb); | 792 PyErr_NormalizeException(&exc, &v, &tb); |
| 787 /* XXX check that it is, indeed, a syntax error. It might not | 793 /* XXX check that it is, indeed, a syntax error. It might not |
| 788 * be, though. */ | 794 * be, though. */ |
| 789 tmp = PyLong_FromLong(lineno); | 795 tmp = PyLong_FromLong(lineno); |
| 790 if (tmp == NULL) | 796 if (tmp == NULL) |
| 791 PyErr_Clear(); | 797 PyErr_Clear(); |
| 792 else { | 798 else { |
| 793 if (PyObject_SetAttrString(v, "lineno", tmp)) | 799 if (_PyObject_SetAttrId(v, &PyId_lineno, tmp)) |
| 794 PyErr_Clear(); | 800 PyErr_Clear(); |
| 795 Py_DECREF(tmp); | 801 Py_DECREF(tmp); |
| 796 } | 802 } |
| 797 if (col_offset >= 0) { | 803 if (col_offset >= 0) { |
| 798 tmp = PyLong_FromLong(col_offset); | 804 tmp = PyLong_FromLong(col_offset); |
| 799 if (tmp == NULL) | 805 if (tmp == NULL) |
| 800 PyErr_Clear(); | 806 PyErr_Clear(); |
| 801 else { | 807 else { |
| 802 if (PyObject_SetAttrString(v, "offset", tmp)) | 808 if (_PyObject_SetAttrId(v, &PyId_offset, tmp)) |
| 803 PyErr_Clear(); | 809 PyErr_Clear(); |
| 804 Py_DECREF(tmp); | 810 Py_DECREF(tmp); |
| 805 } | 811 } |
| 806 } | 812 } |
| 807 if (filename != NULL) { | 813 if (filename != NULL) { |
| 808 tmp = PyUnicode_DecodeFSDefault(filename); | 814 tmp = PyUnicode_DecodeFSDefault(filename); |
| 809 if (tmp == NULL) | 815 if (tmp == NULL) |
| 810 PyErr_Clear(); | 816 PyErr_Clear(); |
| 811 else { | 817 else { |
| 812 if (PyObject_SetAttrString(v, "filename", tmp)) | 818 if (_PyObject_SetAttrId(v, &PyId_filename, tmp)) |
| 813 PyErr_Clear(); | 819 PyErr_Clear(); |
| 814 Py_DECREF(tmp); | 820 Py_DECREF(tmp); |
| 815 } | 821 } |
| 816 | 822 |
| 817 tmp = PyErr_ProgramText(filename, lineno); | 823 tmp = PyErr_ProgramText(filename, lineno); |
| 818 if (tmp) { | 824 if (tmp) { |
| 819 if (PyObject_SetAttrString(v, "text", tmp)) | 825 if (_PyObject_SetAttrId(v, &PyId_text, tmp)) |
| 820 PyErr_Clear(); | 826 PyErr_Clear(); |
| 821 Py_DECREF(tmp); | 827 Py_DECREF(tmp); |
| 822 } | 828 } |
| 823 } | 829 } |
| 824 if (PyObject_SetAttrString(v, "offset", Py_None)) { | 830 if (_PyObject_SetAttrId(v, &PyId_offset, Py_None)) { |
| 825 PyErr_Clear(); | 831 PyErr_Clear(); |
| 826 } | 832 } |
| 827 if (exc != PyExc_SyntaxError) { | 833 if (exc != PyExc_SyntaxError) { |
| 828 if (!PyObject_HasAttrString(v, "msg")) { | 834 if (!_PyObject_HasAttrId(v, &PyId_msg)) { |
| 829 tmp = PyObject_Str(v); | 835 tmp = PyObject_Str(v); |
| 830 if (tmp) { | 836 if (tmp) { |
| 831 if (PyObject_SetAttrString(v, "msg", tmp)) | 837 if (_PyObject_SetAttrId(v, &PyId_msg, tmp)) |
| 832 PyErr_Clear(); | 838 PyErr_Clear(); |
| 833 Py_DECREF(tmp); | 839 Py_DECREF(tmp); |
| 834 } else { | 840 } else { |
| 835 PyErr_Clear(); | 841 PyErr_Clear(); |
| 836 } | 842 } |
| 837 } | 843 } |
| 838 if (!PyObject_HasAttrString(v, "print_file_and_line")) { | 844 if (!_PyObject_HasAttrId(v, &PyId_print_file_and_line)) { |
| 839 if (PyObject_SetAttrString(v, "print_file_and_line", | 845 if (_PyObject_SetAttrId(v, &PyId_print_file_and_line, |
| 840 Py_None)) | 846 Py_None)) |
| 841 PyErr_Clear(); | 847 PyErr_Clear(); |
| 842 } | 848 } |
| 843 } | 849 } |
| 844 PyErr_Restore(exc, v, tb); | 850 PyErr_Restore(exc, v, tb); |
| 845 } | 851 } |
