On Sun, Dec 5, 2010 at 5:42 PM, Ondrej Certik <ond...@certik.cz> wrote:
> On Sat, Dec 4, 2010 at 11:49 PM, Robert Bradshaw
> <rober...@math.washington.edu> wrote:
>> On Sat, Dec 4, 2010 at 9:25 PM, Dag Sverre Seljebotn
>> <da...@student.matnat.uio.no> wrote:
>>> On 12/05/2010 01:27 AM, Ondrej Certik wrote:
>>>> On Sat, Dec 4, 2010 at 3:38 PM, Vitja Makarov<vitja.maka...@gmail.com>  
>>>> wrote:
>>>>
>>>>> 2010/12/4 Ondrej Certik<ond...@certik.cz>:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I was missing the option to tell Cython to stop on the first error. So
>>>>>> I have implemented it:
>>>>>>
>>>>>> https://github.com/cython/cython/pull/3
>>>>>>
>>>>>> Ondrej
>>>>>>
>>>>>>
>>>>> Hi!
>>>>>
>>>>> Is that a good idea to call sys.exit() in Errors.py maybe there is
>>>>> another way to stop compilation?
>>>>>
>>>> Yes, that is something that I was not sure when I coded it, as I am
>>>> not too familiar with Cython internals.
>>>>
>>>
>>> The usecases are more important than the internals: Imagine for a moment
>>> what this will to do pyximport, or build systems able to launch Cython
>>> in-process (SCons, waf).
>>
>> I've made it raise the same error it does between phases to signal the
>> compiler should abort.
>
> After this "abort" change, here is how it looks like:
>
>
> ond...@crow:~/repos/hermes/hermes1d/hermes1d(fix)$ make
> [  4%] Built target cython_utils
> [  8%] Built target numpy_utils
> [ 93%] Built target hermes1d-debug
> [ 95%] Cythonizing h1d_wrapper.pyx
>
> Error compiling Cython file:
> ------------------------------------------------------------
> ...
>        prj_type = hermes1d.H1D_H1_ortho_global
>    else:
>        raise ValueError("Unknown projection type")
>    global _A
>    _A = f
>    hermes1d.assemble_projection_matrix_rhs(mesh.thisptr, A.thisptr,
>                                               ^
> ------------------------------------------------------------
>
> /home/ondrej/repos/hermes/hermes1d/hermes1d/h1d_wrapper/h1d_wrapper.pyx:369:48:
> Cannot convert 'Space *' to Python object
>
> Error compiling Cython file:
> ------------------------------------------------------------
> ...
>        prj_type = hermes1d.H1D_H1_ortho_global
>    else:
>        raise ValueError("Unknown projection type")
>    global _A
>    _A = f
>    hermes1d.assemble_projection_matrix_rhs(mesh.thisptr, A.thisptr,
>                                               ^
> ------------------------------------------------------------
>
> /home/ondrej/repos/hermes/hermes1d/hermes1d/h1d_wrapper/h1d_wrapper.pyx:369:48:
> Compiler crash in AnalyseExpressionsTransform
>
> ModuleNode.body = StatListNode(h1d_wrapper.pyx:6:0)
> StatListNode.stats[19] = StatListNode(h1d_wrapper.pyx:358:0)
> StatListNode.stats[0] = DefNode(h1d_wrapper.pyx:358:0,
>    modifiers = [...]/0,
>    name = u'assemble_projection_matrix_rhs',
>    num_required_args = 4,
>    reqd_kw_flags_cname = '0')
> File 'Nodes.py', line 351, in analyse_expressions:
> StatListNode(h1d_wrapper.pyx:360:4)
> File 'Nodes.py', line 3346, in analyse_expressions:
> ExprStatNode(h1d_wrapper.pyx:369:43)
> File 'ExprNodes.py', line 322, in analyse_expressions:
> SimpleCallNode(h1d_wrapper.pyx:369:43,
>    analysed = True,
>    use_managed_ref = True)
> File 'ExprNodes.py', line 2865, in analyse_types:
> SimpleCallNode(h1d_wrapper.pyx:369:43,
>    analysed = True,
>    use_managed_ref = True)
> File 'ExprNodes.py', line 3947, in analyse_types:
> TupleNode(h1d_wrapper.pyx:369:43,
>    is_sequence_constructor = 1,
>    use_managed_ref = True)
> File 'ExprNodes.py', line 3742, in analyse_types:
> TupleNode(h1d_wrapper.pyx:369:43,
>    is_sequence_constructor = 1,
>    use_managed_ref = True)
> File 'ExprNodes.py', line 614, in coerce_to_pyobject:
> AttributeNode(h1d_wrapper.pyx:369:48,
>    attribute = u'thisptr',
>    is_attribute = 1,
>    member = u'thisptr',
>    needs_none_check = True,
>    op = '->',
>    use_managed_ref = True)
> File 'ExprNodes.py', line 3317, in coerce_to:
> AttributeNode(h1d_wrapper.pyx:369:48,
>    attribute = u'thisptr',
>    is_attribute = 1,
>    member = u'thisptr',
>    needs_none_check = True,
>    op = '->',
>    use_managed_ref = True)
> File 'ExprNodes.py', line 580, in coerce_to:
> AttributeNode(h1d_wrapper.pyx:369:48,
>    attribute = u'thisptr',
>    is_attribute = 1,
>    member = u'thisptr',
>    needs_none_check = True,
>    op = '->',
>    use_managed_ref = True)
> File 'ExprNodes.py', line 7076, in __init__:
> CoerceToPyTypeNode(h1d_wrapper.pyx:369:48,
>    is_temp = 1,
>    use_managed_ref = True)
>
> Compiler crash traceback from this point on:
>  File "/home/ondrej/usr/lib/python/Cython/Compiler/ExprNodes.py",
> line 7076, in __init__
>    "Cannot convert '%s' to Python object" % arg.type)
>  File "/home/ondrej/usr/lib/python/Cython/Compiler/Errors.py", line
> 151, in error
>    report_error(err)
>  File "/home/ondrej/usr/lib/python/Cython/Compiler/Errors.py", line
> 143, in report_error
>    raise InternalError, "abort"
> InternalError: Internal compiler error: abort
> Traceback (most recent call last):
>  File "/home/ondrej/usr/bin/cython", line 8, in <module>
>    main(command_line = 1)
>  File "/home/ondrej/usr/lib/python/Cython/Compiler/Main.py", line 773, in main
>    result = compile(sources, options)
>  File "/home/ondrej/usr/lib/python/Cython/Compiler/Main.py", line
> 748, in compile
>    return compile_multiple(source, options)
>  File "/home/ondrej/usr/lib/python/Cython/Compiler/Main.py", line
> 720, in compile_multiple
>    result = run_pipeline(source, options)
>  File "/home/ondrej/usr/lib/python/Cython/Compiler/Main.py", line
> 585, in run_pipeline
>    err, enddata = context.run_pipeline(pipeline, source)
>  File "/home/ondrej/usr/lib/python/Cython/Compiler/Main.py", line
> 231, in run_pipeline
>    Errors.report_error(err)
>  File "/home/ondrej/usr/lib/python/Cython/Compiler/Errors.py", line
> 143, in report_error
>    raise InternalError, "abort"
> Cython.Compiler.Errors.InternalError: Internal compiler error: abort
> make[2]: *** [hermes1d/h1d_wrapper/h1d_wrapper.cpp] Error 1
> make[1]: *** [hermes1d/h1d_wrapper/CMakeFiles/h1d_wrapper.dir/all] Error 2
> make: *** [all] Error 2
>
>
>
>
> Now compare to the previous situation:
>
>
> ond...@crow:~/repos/hermes/hermes1d/hermes1d(fix)$ make
> [  4%] Built target cython_utils
> [  8%] Built target numpy_utils
> [ 93%] Built target hermes1d-debug
> [ 95%] Cythonizing h1d_wrapper.pyx
>
> Error compiling Cython file:
> ------------------------------------------------------------
> ...
>        prj_type = hermes1d.H1D_H1_ortho_global
>    else:
>        raise ValueError("Unknown projection type")
>    global _A
>    _A = f
>    hermes1d.assemble_projection_matrix_rhs(mesh.thisptr, A.thisptr,
>                                               ^
> ------------------------------------------------------------
>
> /home/ondrej/repos/hermes/hermes1d/hermes1d/h1d_wrapper/h1d_wrapper.pyx:369:48:
> Cannot convert 'Space *' to Python object
> make[2]: *** [hermes1d/h1d_wrapper/h1d_wrapper.cpp] Error 1
> make[1]: *** [hermes1d/h1d_wrapper/CMakeFiles/h1d_wrapper.dir/all] Error 2
> make: *** [all] Error 2
>
>
>
>
> So I believe that the latter is simpler. So where should we catch the
> InternalError exception? Maybe we should create a StopOnFirstError
> exception, and then catch it and print "exiting the compilation due to
> --fatal-errors command line switch"?

Interestingly enough, this all goes away when I tried to get a better
handle on it by enabling debug_no_exception_intercept. The problem is
that it crashes while trying to report the error, which leads to the
traceback. I'll push a fix.

- Robert
_______________________________________________
Cython-dev mailing list
Cython-dev@codespeak.net
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to