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 }