API change: Function(retval, name, params) now becomes Function(name, retval, params), as suggested by Mathieu Lacage.

This commit is contained in:
Gustavo J. A. M. Carneiro committed 2008-05-11 22:17:22 +01:00
1 parent 1db3ca6de0
commit 86c183a37e
9 files changed
+66 -66

No files matched your search

+3 -3
View File
@@ -11,9 +11,9 @@ def my_module_gen(out_file):
mod = Module('a')
mod.add_include('"a.h"')
mod.add_function(Function(ReturnValue.new('void'), 'ADoA', []))
mod.add_function(Function(ReturnValue.new('void'), 'ADoB', [Parameter.new('uint32_t', 'b')]))
mod.add_function(Function(ReturnValue.new('uint32_t'), 'ADoC', []))
mod.add_function(Function('ADoA', ReturnValue.new('void'), []))
mod.add_function(Function('ADoB', ReturnValue.new('void'), [Parameter.new('uint32_t', 'b')]))
mod.add_function(Function('ADoC', ReturnValue.new('uint32_t'), []))
mod.generate(FileCodeSink(out_file) )
+2 -2
View File
@@ -18,8 +18,8 @@ def my_module_gen(out_file):
B.add_instance_attribute(ReturnValue.new('uint32_t'), 'b_a')
B.add_instance_attribute(ReturnValue.new('uint32_t'), 'b_b')
mod.add_function(Function(ReturnValue.new('void'), 'BDoA', [Parameter.new('B', 'b')]))
mod.add_function(Function(ReturnValue.new('B'), 'BDoB', []))
mod.add_function(Function('BDoA', ReturnValue.new('void'), [Parameter.new('B', 'b')]))
mod.add_function(Function('BDoB', ReturnValue.new('B'), []))
mod.generate(FileCodeSink(out_file) )
+4 -4
View File
@@ -15,10 +15,10 @@ def my_module_gen(out_file):
D = mod.add_class('D', free_function='DDestroy')
D.add_instance_attribute(ReturnValue.new('bool'), 'd')
D.add_constructor(Function(ReturnValue.new("D*", caller_owns_return=True), "DCreate", []))
mod.add_function(Function(ReturnValue.new('void'), 'DDoA', [Parameter.new('D*', 'd', transfer_ownership=False)]))
mod.add_function(Function(ReturnValue.new('void'), 'DDoB', [Parameter.new('D&', 'd', direction=Parameter.DIRECTION_IN)]))
mod.add_function(Function(ReturnValue.new('void'), 'DDoC', [Parameter.new('D&', 'd',
D.add_constructor(Function("DCreate", ReturnValue.new("D*", caller_owns_return=True), []))
mod.add_function(Function('DDoA', ReturnValue.new('void'), [Parameter.new('D*', 'd', transfer_ownership=False)]))
mod.add_function(Function('DDoB', ReturnValue.new('void'), [Parameter.new('D&', 'd', direction=Parameter.DIRECTION_IN)]))
mod.add_function(Function('DDoC', ReturnValue.new('void'), [Parameter.new('D&', 'd',
direction=Parameter.DIRECTION_IN,
is_const=True)]))
+1 -1
View File
@@ -15,7 +15,7 @@ def my_module_gen(out_file):
E = mod.add_class('E', decref_method='Unref', incref_method='Ref')
if 1:
E.add_constructor(Function(ReturnValue.new("E*", caller_owns_return=True), "E::CreateWithRef", []))
E.add_constructor(Function("E::CreateWithRef", ReturnValue.new("E*", caller_owns_return=True), []))
else:
## alternative:
E.add_constructor(Function(ReturnValue.new("E*", caller_owns_return=False), "E::CreateWithoutRef", []))
+3 -3
View File
@@ -11,11 +11,11 @@ def my_module_gen(out_file):
mod = Module('g')
mod.add_include('"g.h"')
mod.add_function(Function(ReturnValue.new('void'), 'GDoA', []))
mod.add_function(Function('GDoA', ReturnValue.new('void'), []))
G = mod.add_cpp_namespace("G")
G.add_function(Function(ReturnValue.new('void'), 'GDoB', []))
G.add_function(Function('GDoB', ReturnValue.new('void'), []))
GInner = G.add_cpp_namespace("GInner")
GInner.add_function(Function(ReturnValue.new('void'), 'GDoC', []))
GInner.add_function(Function('GDoC', ReturnValue.new('void'), []))
mod.generate(FileCodeSink(out_file))
+10 -7
View File
@@ -16,12 +16,14 @@ class Function(ForwardWrapperBase):
Class that generates a wrapper to a C function.
"""
def __init__(self, return_value, function_name, parameters, docstring=None, unblock_threads=None,
def __init__(self, function_name, return_value, parameters, docstring=None, unblock_threads=None,
template_parameters=()):
"""
return_value -- the function return value
function_name -- name of the C function
parameters -- the function parameters
@param function_name: name of the C function
@param return_value: the function return value
@type return_value: L{ReturnValue}
@param parameters: the function parameters
@type parameters: list of L{Parameter}
"""
if unblock_threads is None:
unblock_threads = settings.unblock_threads
@@ -31,6 +33,7 @@ class Function(ForwardWrapperBase):
error_return="return NULL;",
unblock_threads=unblock_threads)
self._module = None
assert isinstance(function_name, str)
self.function_name = function_name
self.wrapper_base_name = None
self.wrapper_actual_name = None
@@ -44,8 +47,8 @@ class Function(ForwardWrapperBase):
function wrapper clone contains copies of all parameters, so
they can be modified at will.
"""
func = Function(self.return_value,
self.function_name,
func = Function(self.function_name,
self.return_value,
[copy(param) for param in self.parameters],
docstring=self.docstring)
func._module = self._module
@@ -156,7 +159,7 @@ class CustomFunctionWrapper(Function):
def __init__(self, function_name, wrapper_name, wrapper_body,
flags=('METH_VARARGS', 'METH_KEYWORDS')):
super(CustomFunctionWrapper, self).__init__(ReturnValue.new('void'), function_name, [])
super(CustomFunctionWrapper, self).__init__(function_name, ReturnValue.new('void'), [])
self.wrapper_base_name = wrapper_name
self.wrapper_actual_name = wrapper_name
self.meth_flags = list(flags)
+6 -6
View File
@@ -1306,13 +1306,13 @@ class ModuleParser(object):
#cpp_class = type_registry.find_class(of_class, (self.module_namespace_name or '::'))
cpp_class = root_module[normalize_class_name(of_class, (self.module_namespace_name or '::'))]
function_wrapper = Function(return_type, fun.name, arguments)
function_wrapper = Function(fun.name, return_type, arguments)
cpp_class.add_method(function_wrapper, name=as_method)
function_wrapper.gccxml_definition = fun
self.pygen_sink.writeln("root_module[%r].add_method(Function(%s), name=%r)" %
(cpp_class.full_name,
", ".join([return_type._pygen_repr, repr(fun.name), arglist_repr]),
", ".join([repr(fun.name), return_type._pygen_repr, arglist_repr]),
as_method))
continue
@@ -1320,14 +1320,14 @@ class ModuleParser(object):
if is_constructor_of is not None:
#cpp_class = type_registry.find_class(is_constructor_of, (self.module_namespace_name or '::'))
cpp_class = root_module[normalize_class_name(is_constructor_of, (self.module_namespace_name or '::'))]
function_wrapper = Function(return_type, fun.name, arguments)
function_wrapper = Function(fun.name, return_type, arguments)
cpp_class.add_constructor(function_wrapper)
function_wrapper.gccxml_definition = fun
self.pygen_sink.writeln("root_module[%r].add_constructor(Function(%s))" %
(cpp_class.full_name,
", ".join([return_type._pygen_repr, repr(fun.name), arglist_repr]),))
", ".join([repr(fun.name), return_type._pygen_repr, arglist_repr]),))
continue
@@ -1336,7 +1336,7 @@ class ModuleParser(object):
if templates.is_instantiation(fun.demangled_name):
kwargs['template_parameters'] = templates.args(fun.demangled_name)
func_wrapper = Function(return_type, fun.name, arguments, **kwargs)
func_wrapper = Function(fun.name, return_type, arguments, **kwargs)
func_wrapper.gccxml_definition = fun
module.add_function(func_wrapper, name=alt_name)
@@ -1345,7 +1345,7 @@ class ModuleParser(object):
else:
_pygen_altname_arg = ', name=%r' % alt_name
self.pygen_sink.writeln("module.add_function(Function(%s)%s)" %
(", ".join([return_type._pygen_repr, repr(fun.name), arglist_repr] + _pygen_kwargs(kwargs)),
(", ".join([repr(fun.name), return_type._pygen_repr, arglist_repr] + _pygen_kwargs(kwargs)),
_pygen_altname_arg))
for hook in self._post_scan_hooks:
+34 -37
View File
@@ -48,8 +48,9 @@ def my_module_gen(out_file):
Bar.add_method(CppMethod(ReturnValue.new('std::string'), 'Hooray', [], is_static=True))
## to test RTTI with a hidden subclass
mod.add_function(Function(ReturnValue.new('Foo*', caller_owns_return=True),
'get_hidden_subclass_pointer', []))
mod.add_function(Function('get_hidden_subclass_pointer',
ReturnValue.new('Foo*', caller_owns_return=True),
[]))
## Zbr is a reference counted class
@@ -75,24 +76,24 @@ int %s::custom_method_added_by_a_hook(int x)
is_virtual=True))
Zbr.add_static_attribute(ReturnValue.new('int'), 'instance_count')
mod.add_function(Function(ReturnValue.new('void'), 'store_zbr',
mod.add_function(Function('store_zbr', ReturnValue.new('void'),
[Parameter.new('Zbr*', 'zbr', transfer_ownership=True)]))
mod.add_function(Function(ReturnValue.new('int'), 'invoke_zbr',
mod.add_function(Function('invoke_zbr', ReturnValue.new('int'),
[Parameter.new('int', 'x')]))
mod.add_function(Function(ReturnValue.new('void'), 'delete_stored_zbr', []))
mod.add_function(Function('delete_stored_zbr', ReturnValue.new('void'), []))
mod.add_function(Function(ReturnValue.new('int'), 'print_something',
mod.add_function(Function('print_something', ReturnValue.new('int'),
[Parameter.new('const char*', 'message')]))
mod.add_function(Function(ReturnValue.new('int'), 'print_something_else',
mod.add_function(Function('print_something_else', ReturnValue.new('int'),
[Parameter.new('const char*', 'message2')]))
## test overloaded functions
mod.add_function(Function(ReturnValue.new('int'), 'get_int_from_string',
mod.add_function(Function('get_int_from_string', ReturnValue.new('int'),
[Parameter.new('const char*', 'from_string'),
Parameter.new('int', 'multiplier', default_value='1')]),
name="get_int")
mod.add_function(Function(ReturnValue.new('int'), 'get_int_from_float',
mod.add_function(Function('get_int_from_float', ReturnValue.new('int'),
[Parameter.new('double', 'from_float')]),
name="get_int")
@@ -150,21 +151,21 @@ int %s::custom_method_added_by_a_hook(int x)
## add a function that appears as a method of an object
SomeObject.add_method(
Function(ReturnValue.new('std::string'), 'some_object_get_something_prefixed',
Function('some_object_get_something_prefixed', ReturnValue.new('std::string'),
[Parameter.new('SomeObject*', 'obj', transfer_ownership=False, is_const=True),
Parameter.new('std::string', 'something')]),
name='get_something_prefixed')
## add a function that appears as a method of an object
SomeObject.add_method(
Function(ReturnValue.new('std::string'), 'some_object_val_get_something_prefixed',
Function('some_object_val_get_something_prefixed', ReturnValue.new('std::string'),
[Parameter.new('SomeObject', 'obj'),
Parameter.new('std::string', 'something')]),
name='val_get_something_prefixed')
## add a function that appears as a method of an object
SomeObject.add_method(
Function(ReturnValue.new('std::string'), 'some_object_ref_get_something_prefixed',
Function('some_object_ref_get_something_prefixed', ReturnValue.new('std::string'),
[Parameter.new('SomeObject&', 'obj', is_const=True),
Parameter.new('std::string', 'something')]),
name='ref_get_something_prefixed')
@@ -209,20 +210,17 @@ int %s::custom_method_added_by_a_hook(int x)
ReturnValue.new('void'), 'set_foobar_with_self_as_custodian',
[Parameter.new('Foobar*', 'foobar', custodian=0)]))
mod.add_function(Function(ReturnValue.new('Foobar*', custodian=1),
'get_foobar_with_other_as_custodian',
mod.add_function(Function('get_foobar_with_other_as_custodian', ReturnValue.new('Foobar*', custodian=1),
[Parameter.new('SomeObject*', 'other', transfer_ownership=False)]))
mod.add_function(Function(ReturnValue.new('Foobar*', caller_owns_return=True),
'create_new_foobar', []))
mod.add_function(Function('create_new_foobar', ReturnValue.new('Foobar*', caller_owns_return=True),
[]))
mod.add_function(Function(ReturnValue.new('void'),
'set_foobar_with_other_as_custodian',
mod.add_function(Function('set_foobar_with_other_as_custodian', ReturnValue.new('void'),
[Parameter.new('Foobar*', 'foobar', custodian=2),
Parameter.new('SomeObject*', 'other', transfer_ownership=False)]))
mod.add_function(Function(ReturnValue.new('SomeObject*', caller_owns_return=True),
'set_foobar_with_return_as_custodian',
mod.add_function(Function('set_foobar_with_return_as_custodian', ReturnValue.new('SomeObject*', caller_owns_return=True),
[Parameter.new('Foobar*', 'foobar', custodian=-1)]))
@@ -254,31 +252,29 @@ int %s::custom_method_added_by_a_hook(int x)
name="get_int")
mod.add_function(Function(ReturnValue.new('void'), 'store_some_object',
mod.add_function(Function('store_some_object', ReturnValue.new('void'),
[Parameter.new('SomeObject*', 'obj', transfer_ownership=True)]))
mod.add_function(Function(ReturnValue.new('std::string'), 'invoke_some_object_get_prefix',
mod.add_function(Function('invoke_some_object_get_prefix', ReturnValue.new('std::string'),
[]))
mod.add_function(Function(ReturnValue.new('SomeObject*', caller_owns_return=True),
'take_some_object', []))
mod.add_function(Function(ReturnValue.new('void'), 'delete_some_object', []))
mod.add_function(Function('take_some_object', ReturnValue.new('SomeObject*', caller_owns_return=True), []))
mod.add_function(Function('delete_some_object', ReturnValue.new('void'), []))
xpto = mod.add_cpp_namespace("xpto")
xpto.add_function(Function(ReturnValue.new('std::string'), 'some_function', []))
xpto.add_function(Function('some_function', ReturnValue.new('std::string'), []))
## enums..
xpto.add_enum('FooType', ['FOO_TYPE_AAA', 'FOO_TYPE_BBB', 'FOO_TYPE_CCC'])
xpto.add_function(Function(ReturnValue.new('FooType'), 'get_foo_type', []))
xpto.add_function(Function(ReturnValue.new('void'), 'set_foo_type', [Parameter.new("FooType", 'type')]))
xpto.add_function(Function('get_foo_type', ReturnValue.new('FooType'), []))
xpto.add_function(Function('set_foo_type', ReturnValue.new('void'), [Parameter.new("FooType", 'type')]))
xpto_SomeClass = xpto.add_class('SomeClass')
xpto_SomeClass.add_constructor(CppConstructor([]))
## ---- some implicity conversion APIs
mod.add_function(Function(ReturnValue.new('void'),
'function_that_takes_foo',
mod.add_function(Function('function_that_takes_foo', ReturnValue.new('void'),
[Parameter.new('Foo', 'foo')]))
mod.add_function(Function(ReturnValue.new('Foo'), 'function_that_returns_foo', []))
mod.add_function(Function('function_that_returns_foo', ReturnValue.new('Foo'), []))
cls = mod.add_class('ClassThatTakesFoo')
cls.add_constructor(CppConstructor([Parameter.new('Foo', 'foo')]))
@@ -292,8 +288,7 @@ int %s::custom_method_added_by_a_hook(int x)
## A class that has no public default constructor...
cls = mod.add_class('InterfaceId', is_singleton=True)
## A function that returns such a class...
mod.add_function(Function(ReturnValue.new('InterfaceId'),
'make_interface_id', []))
mod.add_function(Function('make_interface_id', ReturnValue.new('InterfaceId'), []))
## A class the cannot be constructed; this will cause late CodeGenerationError's
@@ -303,10 +298,12 @@ int %s::custom_method_added_by_a_hook(int x)
'get_value', [], is_static=True))
cls.add_method(CppMethod(ReturnValue.new('CannotBeConstructed*', caller_owns_return=True),
'get_ptr', [], is_static=True))
mod.add_function(Function(ReturnValue.new('CannotBeConstructed'),
'get_cannot_be_constructed_value', []))
mod.add_function(Function(ReturnValue.new('CannotBeConstructed*', caller_owns_return=True),
'get_cannot_be_constructed_ptr', []))
mod.add_function(Function('get_cannot_be_constructed_value',
ReturnValue.new('CannotBeConstructed'),
[]))
mod.add_function(Function('get_cannot_be_constructed_ptr',
ReturnValue.new('CannotBeConstructed*', caller_owns_return=True),
[]))
## A nested class
+3 -3
View File
@@ -142,7 +142,7 @@ public:
else:
retval = return_handler(return_type)
wrapper = Function(retval, function_name, [])
wrapper = Function(function_name, retval, [])
module.add_function(wrapper)
for param_type, param_handler in typehandlers.base.param_type_matcher.items():
@@ -167,7 +167,7 @@ public:
## declare a fake prototype
print "void %s(%s %s);" % (function_name, param_type, name)
print
wrapper = Function(ReturnValue.new('void'), function_name, [param])
wrapper = Function(function_name, ReturnValue.new('void'), [param])
module.add_function(wrapper)
else:
param = param_handler(param_type, param_name, direction)
@@ -176,7 +176,7 @@ public:
## declare a fake prototype
print "void %s(%s);" % (function_name, param_type)
print
wrapper = Function(ReturnValue.new('void'), function_name, [param])
wrapper = Function(function_name, ReturnValue.new('void'), [param])
module.add_function(wrapper)
module.generate(code_out)