Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def do_generate(self, out, module_file_base_name=None):
"""(internal) Generates the module."""
assert isinstance(out, _SinkManager)
if self.parent is None:
## generate the include directives (only the root module)
forward_declarations_sink = MemoryCodeSink()
if not self._forward_declarations_declared:
self.generate_forward_declarations(forward_declarations_sink)
self.after_forward_declarations.flush_to(forward_declarations_sink)
if self.parent is None:
for include in self.includes:
out.get_includes_code_sink().writeln("#include %s" % include)
self.includes = None
forward_declarations_sink.flush_to(out.get_includes_code_sink())
else:
assert module_file_base_name is None, "only root modules can generate with alternate module_file_base_name"
## generate the submodules
def generate(self, code_sink):
"""
code_sink -- a CodeSink instance that will receive the generated code
"""
tmp_sink = codesink.MemoryCodeSink()
self.generate_body(tmp_sink)
code_sink.writeln("static PyObject* %s(%s *self)" % (self.c_function_name,
self.container.iter_pystruct))
code_sink.writeln('{')
code_sink.indent()
tmp_sink.flush_to(code_sink)
code_sink.unindent()
code_sink.writeln('}')
"""
Generates the wrapper code
:param code_sink: a CodeSink instance that will receive the generated code
:param wrapper_name: name of wrapper function
"""
if self.throw: # Bug #780945
self.return_value.REQUIRES_ASSIGNMENT_CONSTRUCTOR = False
self.reset_code_generation_state()
if wrapper_name is None:
self.wrapper_actual_name = self.wrapper_base_name
else:
self.wrapper_actual_name = wrapper_name
tmp_sink = codesink.MemoryCodeSink()
self.generate_body(tmp_sink)
flags = self.get_py_method_def_flags()
self.wrapper_args = []
if 'METH_VARARGS' in flags:
if self.self_parameter_pystruct is None:
self_param = 'PyObject * PYBINDGEN_UNUSED(dummy)'
else:
self_param = '%s *self' % self.self_parameter_pystruct
self.wrapper_args.append(self_param)
self.wrapper_args.append("PyObject *args")
if 'METH_KEYWORDS' in flags:
self.wrapper_args.append("PyObject *kwargs")
self.wrapper_args.extend(extra_wrapper_params)
self.wrapper_return = "PyObject *"
self.write_open_wrapper(code_sink)
def __init__(self, code_sink):
super(_MonolithicSinkManager, self).__init__()
self.final_code_sink = code_sink
self.null_sink = NullCodeSink()
self.includes = MemoryCodeSink()
self.code_sink = MemoryCodeSink()
utils.write_preamble(code_sink)
def get_code_sink_for_wrapper(self, dummy_wrapper):
"""
Generates the wrapper code
:param code_sink: a CodeSink instance that will receive the generated code
:param wrapper_name: name of wrapper function
"""
if self.throw: # Bug #780945
self.return_value.REQUIRES_ASSIGNMENT_CONSTRUCTOR = False
self.reset_code_generation_state()
if wrapper_name is None:
self.wrapper_actual_name = self.wrapper_base_name
else:
self.wrapper_actual_name = wrapper_name
tmp_sink = codesink.MemoryCodeSink()
self.generate_body(tmp_sink)
flags = self.get_py_method_def_flags()
self.wrapper_args = []
if 'METH_VARARGS' in flags:
if self.self_parameter_pystruct is None:
self_param = 'PyObject * PYBINDGEN_UNUSED(dummy)'
else:
self_param = '%s *self' % self.self_parameter_pystruct
self.wrapper_args.append(self_param)
self.wrapper_args.append("PyObject *args")
if 'METH_KEYWORDS' in flags:
self.wrapper_args.append("PyObject *kwargs")
else:
self.wrapper_args.append("PyObject *PYBINDGEN_UNUSED(_kwargs)")
else:
def generate(self, code_sink):
"""
:param code_sink: a CodeSink instance that will receive the generated code
"""
tmp_sink = codesink.MemoryCodeSink()
self.generate_body(tmp_sink)
code_sink.writeln("static PyObject* %s(PyObject * PYBINDGEN_UNUSED(obj),"
" void * PYBINDGEN_UNUSED(closure))"
% self.c_function_name)
code_sink.writeln('{')
code_sink.indent()
tmp_sink.flush_to(code_sink)
code_sink.unindent()
code_sink.writeln('}')
del path[0]
self.cpp_namespace_prefix = '::'.join(path)
self.declarations = DeclarationsScope()
self.functions = {} # name => OverloadedFunction
self.classes = []
self.containers = []
self.exceptions = []
self.before_init = CodeBlock(error_return, self.declarations)
self.after_init = CodeBlock(error_return, self.declarations,
predecessor=self.before_init)
self.c_function_name_transformer = None
self.set_strip_prefix(name + '_')
if parent is None:
self.header = MemoryCodeSink()
self.body = MemoryCodeSink()
self.one_time_definitions = {}
self.includes = []
else:
self.header = parent.header
self.body = parent.body
self.one_time_definitions = parent.one_time_definitions
self.includes = parent.includes
self._current_section = '__main__'
def clear(self):
self._declarations = codesink.MemoryCodeSink()
self.declared_variables.clear()
Generates the wrapper code
:param code_sink: a CodeSink instance that will receive the generated code
:returns: the wrapper function name.
"""
if self.visibility == 'private':
raise utils.SkipWrapper("Class %r has a private constructor ->"
" cannot generate a constructor for it" % self._class.full_name)
elif self.visibility == 'protected':
if self._class.helper_class is None:
raise utils.SkipWrapper("Class %r has a protected constructor and no helper class"
" -> cannot generate a constructor for it" % self._class.full_name)
#assert isinstance(class_, CppClass)
tmp_sink = codesink.MemoryCodeSink()
assert self._class is not None
self.generate_body(tmp_sink, gen_call_params=[self._class])
assert ((self.parse_params.get_parameters() == ['""'])
or self.parse_params.get_keywords() is not None), \
("something went wrong with the type handlers;"
" constructors need parameter names, "
"yet no names were given for the class %s constructor"
% self._class.name)
if wrapper_name is None:
self.wrapper_actual_name = self.wrapper_base_name
else:
self.wrapper_actual_name = wrapper_name
del path[0]
self.cpp_namespace_prefix = '::'.join(path)
self.declarations = DeclarationsScope()
self.functions = collections.OrderedDict() # name => OverloadedFunction
self.classes = []
self.containers = []
self.exceptions = []
self.before_init = CodeBlock(error_return, self.declarations)
self.after_init = CodeBlock(error_return, self.declarations,
predecessor=self.before_init)
self.c_function_name_transformer = None
self.set_strip_prefix(name + '_')
if parent is None:
self.header = MemoryCodeSink()
self.body = MemoryCodeSink()
self.one_time_definitions = {}
self.includes = []
else:
self.header = parent.header
self.body = parent.body
self.one_time_definitions = parent.one_time_definitions
self.includes = parent.includes
self._current_section = '__main__'