Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cythonization of pure Python crashes with function that passes its argument splat to a class definition. #3338

Closed
will-ca opened this issue Jan 29, 2020 · 1 comment

Comments

@will-ca
Copy link
Contributor

will-ca commented Jan 29, 2020

This doesn't translate properly:

def ClassMaker(*bases):
	class MadeClass(*bases):
		pass
	return MadeClass
Compiling testfile.py because it changed.
[1/1] Cythonizing testfile.py
Traceback (most recent call last):
  File "setup.py", line 12, in <module>
    distutils.core.setup(ext_modules=Cython.Build.cythonize(packpaths, nthreads=buildthreads, compiler_directives={'language_level': 3, 'profile': True}, annotate=True))
  File ".../Cython/Build/Dependencies.py", line 1096, in cythonize
    cythonize_one(*args)
  File ".../Cython/Build/Dependencies.py", line 1202, in cythonize_one
    result = compile_single(pyx_file, options, full_module_name=full_module_name)
  File ".../Cython/Compiler/Main.py", line 727, in compile_single
    return run_pipeline(source, options, full_module_name)
  File ".../Cython/Compiler/Main.py", line 515, in run_pipeline
    err, enddata = Pipeline.run_pipeline(pipeline, source)
  File ".../Cython/Compiler/Pipeline.py", line 355, in run_pipeline
    data = run(phase, data)
  File ".../Cython/Compiler/Pipeline.py", line 335, in run
    return phase(data)
  File ".../Cython/Compiler/Pipeline.py", line 52, in generate_pyx_code_stage
    module_node.process_implementation(options, result)
  File ".../Cython/Compiler/ModuleNode.py", line 143, in process_implementation
    self.generate_c_code(env, options, result)
  File ".../Cython/Compiler/ModuleNode.py", line 385, in generate_c_code
    self.body.generate_function_definitions(env, code)
  File ".../Cython/Compiler/Nodes.py", line 442, in generate_function_definitions
    stat.generate_function_definitions(env, code)
  File ".../Cython/Compiler/Nodes.py", line 442, in generate_function_definitions
    stat.generate_function_definitions(env, code)
  File ".../Cython/Compiler/Nodes.py", line 3176, in generate_function_definitions
    FuncDefNode.generate_function_definitions(self, env, code)
  File ".../Cython/Compiler/Nodes.py", line 1983, in generate_function_definitions
    self.generate_function_body(env, code)
  File ".../Cython/Compiler/Nodes.py", line 1745, in generate_function_body
    self.body.generate_execution_code(code)
  File ".../Cython/Compiler/Nodes.py", line 448, in generate_execution_code
    stat.generate_execution_code(code)
  File ".../Cython/Compiler/Nodes.py", line 4601, in generate_execution_code
    self.class_result.generate_evaluation_code(code)
  File ".../Cython/Compiler/ExprNodes.py", line 773, in generate_evaluation_code
    self.generate_result_code(code)
  File ".../Cython/Compiler/ExprNodes.py", line 9034, in generate_result_code
    self.bases.py_result(),
  File ".../Cython/Compiler/ExprNodes.py", line 525, in py_result
    return self.result_as(py_object_type)
  File ".../Cython/Compiler/ExprNodes.py", line 516, in result_as
    if (self.is_temp and self.type.is_pyobject and
AttributeError: 'NoneType' object has no attribute 'is_pyobject'

The two forms below compile fine though:

def ClassMaker(bases):
	class MadeClass(*bases):
		pass
	return MadeClass
def ClassMaker(*bases):
	class MadeClass(bases):
		pass
	return MadeClass
@will-ca will-ca changed the title Cythonization crashes with function that passes its argument splat to a class definition. Cythonization of pure Python crashes with function that passes its argument splat to a class definition. Jan 29, 2020
@scoder scoder added this to the 0.29.15 milestone Jan 30, 2020
@scoder scoder closed this as completed in 888bc4a Jan 30, 2020
@scoder
Copy link
Contributor

scoder commented Jan 30, 2020

Thanks for the report and the short reproducer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants