|
31 | 31 | #include <stdio.h> |
32 | 32 |
|
33 | 33 | #include "py/objlist.h" |
34 | | -// CIRCUITPY-CHANGE |
35 | | -#include "py/objnamedtuple.h" |
36 | 34 | #include "py/objstr.h" |
37 | 35 | #include "py/objtuple.h" |
38 | 36 | #include "py/objtype.h" |
@@ -729,126 +727,3 @@ void mp_obj_exception_get_traceback(mp_obj_t self_in, size_t *n, size_t **values |
729 | 727 | *values = self->traceback->data; |
730 | 728 | } |
731 | 729 | } |
732 | | - |
733 | | -// CIRCUITPY-CHANGE: here until end |
734 | | -#if MICROPY_PY_SYS_EXC_INFO |
735 | | -static const mp_obj_namedtuple_type_t code_type_obj = { |
736 | | - NAMEDTUPLE_TYPE_BASE_AND_SLOTS(MP_QSTR_code), |
737 | | - .n_fields = 15, |
738 | | - .fields = { |
739 | | - MP_QSTR_co_argcount, |
740 | | - MP_QSTR_co_kwonlyargcount, |
741 | | - MP_QSTR_co_nlocals, |
742 | | - MP_QSTR_co_stacksize, |
743 | | - MP_QSTR_co_flags, |
744 | | - MP_QSTR_co_code, |
745 | | - MP_QSTR_co_consts, |
746 | | - MP_QSTR_co_names, |
747 | | - MP_QSTR_co_varnames, |
748 | | - MP_QSTR_co_freevars, |
749 | | - MP_QSTR_co_cellvars, |
750 | | - MP_QSTR_co_filename, |
751 | | - MP_QSTR_co_name, |
752 | | - MP_QSTR_co_firstlineno, |
753 | | - MP_QSTR_co_lnotab, |
754 | | - }, |
755 | | -}; |
756 | | - |
757 | | -static mp_obj_t code_make_new(qstr file, qstr block) { |
758 | | - mp_obj_t elems[15] = { |
759 | | - mp_obj_new_int(0), // co_argcount |
760 | | - mp_obj_new_int(0), // co_kwonlyargcount |
761 | | - mp_obj_new_int(0), // co_nlocals |
762 | | - mp_obj_new_int(0), // co_stacksize |
763 | | - mp_obj_new_int(0), // co_flags |
764 | | - mp_obj_new_bytearray(0, NULL), // co_code |
765 | | - mp_obj_new_tuple(0, NULL), // co_consts |
766 | | - mp_obj_new_tuple(0, NULL), // co_names |
767 | | - mp_obj_new_tuple(0, NULL), // co_varnames |
768 | | - mp_obj_new_tuple(0, NULL), // co_freevars |
769 | | - mp_obj_new_tuple(0, NULL), // co_cellvars |
770 | | - MP_OBJ_NEW_QSTR(file), // co_filename |
771 | | - MP_OBJ_NEW_QSTR(block), // co_name |
772 | | - mp_obj_new_int(1), // co_firstlineno |
773 | | - mp_obj_new_bytearray(0, NULL), // co_lnotab |
774 | | - }; |
775 | | - |
776 | | - return namedtuple_make_new((const mp_obj_type_t *)&code_type_obj, 15, 0, elems); |
777 | | -} |
778 | | - |
779 | | -static const mp_obj_namedtuple_type_t frame_type_obj = { |
780 | | - NAMEDTUPLE_TYPE_BASE_AND_SLOTS(MP_QSTR_frame), |
781 | | - .n_fields = 8, |
782 | | - .fields = { |
783 | | - MP_QSTR_f_back, |
784 | | - MP_QSTR_f_builtins, |
785 | | - MP_QSTR_f_code, |
786 | | - MP_QSTR_f_globals, |
787 | | - MP_QSTR_f_lasti, |
788 | | - MP_QSTR_f_lineno, |
789 | | - MP_QSTR_f_locals, |
790 | | - MP_QSTR_f_trace, |
791 | | - }, |
792 | | -}; |
793 | | - |
794 | | -static mp_obj_t frame_make_new(mp_obj_t f_code, int f_lineno) { |
795 | | - mp_obj_t elems[8] = { |
796 | | - mp_const_none, // f_back |
797 | | - mp_obj_new_dict(0), // f_builtins |
798 | | - f_code, // f_code |
799 | | - mp_obj_new_dict(0), // f_globals |
800 | | - mp_obj_new_int(0), // f_lasti |
801 | | - mp_obj_new_int(f_lineno), // f_lineno |
802 | | - mp_obj_new_dict(0), // f_locals |
803 | | - mp_const_none, // f_trace |
804 | | - }; |
805 | | - |
806 | | - return namedtuple_make_new((const mp_obj_type_t *)&frame_type_obj, 8, 0, elems); |
807 | | -} |
808 | | - |
809 | | -static const mp_obj_namedtuple_type_t traceback_type_obj = { |
810 | | - NAMEDTUPLE_TYPE_BASE_AND_SLOTS(MP_QSTR_traceback), |
811 | | - .n_fields = 4, |
812 | | - .fields = { |
813 | | - MP_QSTR_tb_frame, |
814 | | - MP_QSTR_tb_lasti, |
815 | | - MP_QSTR_tb_lineno, |
816 | | - MP_QSTR_tb_next, |
817 | | - }, |
818 | | -}; |
819 | | - |
820 | | -static mp_obj_t traceback_from_values(size_t *values, mp_obj_t tb_next) { |
821 | | - int lineno = values[1]; |
822 | | - |
823 | | - mp_obj_t elems[4] = { |
824 | | - frame_make_new(code_make_new(values[0], values[2]), lineno), |
825 | | - mp_obj_new_int(0), |
826 | | - mp_obj_new_int(lineno), |
827 | | - tb_next, |
828 | | - }; |
829 | | - |
830 | | - return namedtuple_make_new((const mp_obj_type_t *)&traceback_type_obj, 4, 0, elems); |
831 | | -}; |
832 | | - |
833 | | -mp_obj_t mp_obj_exception_get_traceback_obj(mp_obj_t self_in) { |
834 | | - mp_obj_exception_t *self = MP_OBJ_TO_PTR(self_in); |
835 | | - |
836 | | - if (!mp_obj_is_exception_instance(self)) { |
837 | | - return mp_const_none; |
838 | | - } |
839 | | - |
840 | | - size_t n, *values; |
841 | | - mp_obj_exception_get_traceback(self, &n, &values); |
842 | | - if (n == 0) { |
843 | | - return mp_const_none; |
844 | | - } |
845 | | - |
846 | | - mp_obj_t tb_next = mp_const_none; |
847 | | - |
848 | | - for (size_t i = 0; i < n; i += 3) { |
849 | | - tb_next = traceback_from_values(&values[i], tb_next); |
850 | | - } |
851 | | - |
852 | | - return tb_next; |
853 | | -} |
854 | | -#endif |
0 commit comments