diff options
author | Pablo Galindo Salgado <Pablogsal@gmail.com> | 2022-10-25 22:56:59 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-25 22:56:59 (GMT) |
commit | 7cfbb49fcd4c85f9bab3797302eadf93df490344 (patch) | |
tree | a20c316c8296dbe3e327e7fcf19925e8090ee267 /Include | |
parent | 1f737edb67e702095feb97118a911afb569f5705 (diff) | |
download | cpython-7cfbb49fcd4c85f9bab3797302eadf93df490344.zip cpython-7cfbb49fcd4c85f9bab3797302eadf93df490344.tar.gz cpython-7cfbb49fcd4c85f9bab3797302eadf93df490344.tar.bz2 |
gh-91058: Add error suggestions to 'import from' import errors (#98305)
Diffstat (limited to 'Include')
-rw-r--r-- | Include/cpython/pyerrors.h | 8 | ||||
-rw-r--r-- | Include/internal/pycore_global_strings.h | 1 | ||||
-rw-r--r-- | Include/internal/pycore_runtime_init_generated.h | 7 |
3 files changed, 16 insertions, 0 deletions
diff --git a/Include/cpython/pyerrors.h b/Include/cpython/pyerrors.h index f33d3ca..1413416 100644 --- a/Include/cpython/pyerrors.h +++ b/Include/cpython/pyerrors.h @@ -37,6 +37,7 @@ typedef struct { PyObject *msg; PyObject *name; PyObject *path; + PyObject *name_from; } PyImportErrorObject; typedef struct { @@ -176,4 +177,11 @@ PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFormat( const char *format, ...); +extern PyObject *_PyErr_SetImportErrorWithNameFrom( + PyObject *, + PyObject *, + PyObject *, + PyObject *); + + #define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message)) diff --git a/Include/internal/pycore_global_strings.h b/Include/internal/pycore_global_strings.h index 9c716a3..43f4dac 100644 --- a/Include/internal/pycore_global_strings.h +++ b/Include/internal/pycore_global_strings.h @@ -478,6 +478,7 @@ struct _Py_global_strings { STRUCT_FOR_ID(n_sequence_fields) STRUCT_FOR_ID(n_unnamed_fields) STRUCT_FOR_ID(name) + STRUCT_FOR_ID(name_from) STRUCT_FOR_ID(namespace_separator) STRUCT_FOR_ID(namespaces) STRUCT_FOR_ID(narg) diff --git a/Include/internal/pycore_runtime_init_generated.h b/Include/internal/pycore_runtime_init_generated.h index 55c7c9e..f7823d3 100644 --- a/Include/internal/pycore_runtime_init_generated.h +++ b/Include/internal/pycore_runtime_init_generated.h @@ -987,6 +987,7 @@ extern "C" { INIT_ID(n_sequence_fields), \ INIT_ID(n_unnamed_fields), \ INIT_ID(name), \ + INIT_ID(name_from), \ INIT_ID(namespace_separator), \ INIT_ID(namespaces), \ INIT_ID(narg), \ @@ -2286,6 +2287,8 @@ _PyUnicode_InitStaticStrings(void) { PyUnicode_InternInPlace(&string); string = &_Py_ID(name); PyUnicode_InternInPlace(&string); + string = &_Py_ID(name_from); + PyUnicode_InternInPlace(&string); string = &_Py_ID(namespace_separator); PyUnicode_InternInPlace(&string); string = &_Py_ID(namespaces); @@ -6505,6 +6508,10 @@ _PyStaticObjects_CheckRefcnt(void) { _PyObject_Dump((PyObject *)&_Py_ID(name)); Py_FatalError("immortal object has less refcnt than expected _PyObject_IMMORTAL_REFCNT"); }; + if (Py_REFCNT((PyObject *)&_Py_ID(name_from)) < _PyObject_IMMORTAL_REFCNT) { + _PyObject_Dump((PyObject *)&_Py_ID(name_from)); + Py_FatalError("immortal object has less refcnt than expected _PyObject_IMMORTAL_REFCNT"); + }; if (Py_REFCNT((PyObject *)&_Py_ID(namespace_separator)) < _PyObject_IMMORTAL_REFCNT) { _PyObject_Dump((PyObject *)&_Py_ID(namespace_separator)); Py_FatalError("immortal object has less refcnt than expected _PyObject_IMMORTAL_REFCNT"); |