• Orivej Desh's avatar
    Fix error positions of undefined builtins and constants (GH-3030) · edf66a93
    Orivej Desh authored
    Currently Cython generates code like this:
    
         int __Pyx_InitCachedBuiltins(void) {
             __pyx_builtin_NAME = __Pyx_GetBuiltinName(...);
             if (!__pyx_builtin_NAME) __PYX_ERR(1, 44, __pyx_L1_error)
         }
    
         int __pyx_pymod_exec_MODULE(PyObject *__pyx_pyinit_module) {
             if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(1, 1, __pyx_L1_error)
         }
    
    When InitCachedBuiltins and InitCachedConstants call __PYX_ERR, they
    pass the file and line where a builtin is used, but then pymod_exec
    overwrites it with 1 and 1, and the error message looks like this:
    
           File "FILE", line 1, in init MODULE.
             import os
         NameError: name 'NAME' is not defined
    
    After this change Cython generates:
    
         int __pyx_pymod_exec_MODULE(PyObject *__pyx_pyinit_module) {
             if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error;
         }
    
    and prints:
    
           File "FILE", line 44, in init MODULE.
             print(NAME)
         NameError: name 'NAME' is not defined
    edf66a93