[Cython] strange bug in parallel assignment

Vitja Makarov vitja.makarov at gmail.com
Wed Jun 22 09:40:10 CEST 2011


2011/6/22 Vitja Makarov <vitja.makarov at gmail.com>:
> Hi!
>
> Looking at hudson pyregr output I've found this issue:
>
> (a, b), (c,) = (1, 2), {1: 2}
>
> Traceback (most recent call last):
>  File "cython.py", line 17, in <module>
>    main(command_line = 1)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/Main.py", line
> 821, in main
>    result = compile(sources, options)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/Main.py", line
> 796, in compile
>    return compile_multiple(source, options)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/Main.py", line
> 768, in compile_multiple
>    result = run_pipeline(source, options)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/Main.py", line
> 632, in run_pipeline
>    err, enddata = context.run_pipeline(pipeline, source)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/Main.py", line
> 251, in run_pipeline
>    data = phase(data)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/Main.py", line
> 173, in generate_pyx_code
>    module_node.process_implementation(options, result)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/ModuleNode.py",
> line 73, in process_implementation
>    self.generate_c_code(env, options, result)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/ModuleNode.py",
> line 310, in generate_c_code
>    self.generate_module_init_func(modules[:-1], env,
> globalstate['init_module'])
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/ModuleNode.py",
> line 1924, in generate_module_init_func
>    self.body.generate_execution_code(code)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/Nodes.py", line
> 347, in generate_execution_code
>    stat.generate_execution_code(code)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/Nodes.py", line
> 3811, in generate_execution_code
>    stat.generate_assignment_code(code)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/Nodes.py", line
> 3709, in generate_assignment_code
>    self.lhs.generate_assignment_code(self.rhs, code)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/ExprNodes.py",
> line 4036, in generate_assignment_code
>    self.generate_parallel_assignment_code(rhs, code)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/ExprNodes.py",
> line 4088, in generate_parallel_assignment_code
>    self.generate_generic_parallel_unpacking_code(code, rhs)
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/ExprNodes.py",
> line 4137, in generate_generic_parallel_unpacking_code
>    item.result(),
>  File "/home/vitja/work/cython-vitek/Cython/Compiler/ExprNodes.py",
> line 2047, in result
>    print self.pos, self.type, self.temp_cname
> AttributeError: 'PyTempNode' object has no attribute 'temp_cname'
>
>

Oops. last line is incorrect it should be something like this:

  File "/home/vitja/work/cython-vitek/Cython/Compiler/ExprNodes.py",
line 2050, in result
    assert False, "Remember to call allocate/release on TempNode"
AssertionError: Remember to call allocate/release on TempNode

Btw this code leads to the same error:
(a, b), (c,) = (1, 2), set([1])



-- 
vitja.


More information about the cython-devel mailing list