CppClass.add_*_attribute API change.

This commit is contained in:
Gustavo J. A. M. Carneiro
2008-05-19 16:55:50 +01:00
parent ee6589e95d
commit 07a7701fcf
5 changed files with 33 additions and 19 deletions
+2 -2
View File
@@ -15,8 +15,8 @@ def my_module_gen(out_file):
B = mod.add_class('B')
B.add_constructor([])
B.add_instance_attribute(ReturnValue.new('uint32_t'), 'b_a')
B.add_instance_attribute(ReturnValue.new('uint32_t'), 'b_b')
B.add_instance_attribute('b_a', ReturnValue.new('uint32_t'))
B.add_instance_attribute('b_b', ReturnValue.new('uint32_t'))
mod.add_function('BDoA', None, [Parameter.new('B', 'b')])
mod.add_function('BDoB', ReturnValue.new('B'), [])
+1 -1
View File
@@ -14,7 +14,7 @@ def my_module_gen(out_file):
mod.add_include('"d.h"')
D = mod.add_class('D', free_function='DDestroy')
D.add_instance_attribute(ReturnValue.new('bool'), 'd')
D.add_instance_attribute('d', ReturnValue.new('bool'))
D.add_function_as_constructor("DCreate", ReturnValue.new("D*", caller_owns_return=True), [])
mod.add_function('DDoA', None, [Parameter.new('D*', 'd', transfer_ownership=False)])
mod.add_function('DDoB', None, [Parameter.new('D&', 'd', direction=Parameter.DIRECTION_IN)])
+16 -2
View File
@@ -1066,12 +1066,19 @@ public:
self._add_constructor_obj(constructor)
return constructor
def add_static_attribute(self, value_type, name, is_const=False):
def add_static_attribute(self, name, value_type, is_const=False):
"""
@param value_type: a ReturnValue object
@param name: attribute name (i.e. the name of the class member variable)
@param is_const: True if the attribute is const, i.e. cannot be modified
"""
## backward compatibility check
if isinstance(value_type, str) and isinstance(name, ReturnValue):
warnings.warn("add_static_attribute has changed API; see the API documentation (but trying to correct...)",
DeprecationWarning, stacklevel=2)
value_type, name = name, value_type
assert isinstance(value_type, ReturnValue)
getter = CppStaticAttributeGetter(value_type, self, name)
if is_const:
@@ -1080,7 +1087,7 @@ public:
setter = CppStaticAttributeSetter(value_type, self, name)
self.static_attributes.add_attribute(name, getter, setter)
def add_instance_attribute(self, value_type, name, is_const=False,
def add_instance_attribute(self, name, value_type, is_const=False,
getter=None, setter=None):
"""
@param value_type: a ReturnValue object
@@ -1089,6 +1096,13 @@ public:
@param getter: None, or name of a method of this class used to get the value
@param setter: None, or name of a method of this class used to set the value
"""
## backward compatibility check
if isinstance(value_type, str) and isinstance(name, ReturnValue):
warnings.warn("add_static_attribute has changed API; see the API documentation (but trying to correct...)",
DeprecationWarning, stacklevel=2)
value_type, name = name, value_type
assert isinstance(value_type, ReturnValue)
getter_wrapper = CppInstanceAttributeGetter(value_type, self, name, getter=getter)
if is_const:
+6 -6
View File
@@ -1179,15 +1179,15 @@ class ModuleParser(object):
Warning, member.location.file_name, member.location.line)
continue
if member.type_qualifiers.has_static:
class_wrapper.add_static_attribute(return_type, member.name,
class_wrapper.add_static_attribute(member.name, return_type,
is_const=type_traits.is_const(member.type))
self.pygen_sink.writeln("cls.add_static_attribute(%s, %r, is_const=%r)" %
(return_type._pygen_repr, member.name, type_traits.is_const(member.type)))
self.pygen_sink.writeln("cls.add_static_attribute(%r, %s, is_const=%r)" %
(member.name, return_type._pygen_repr, type_traits.is_const(member.type)))
else:
class_wrapper.add_instance_attribute(return_type, member.name,
class_wrapper.add_instance_attribute(member.name, return_type,
is_const=type_traits.is_const(member.type))
self.pygen_sink.writeln("cls.add_instance_attribute(%s, %r, is_const=%r)" %
(return_type._pygen_repr, member.name, type_traits.is_const(member.type)))
self.pygen_sink.writeln("cls.add_instance_attribute(%r, %s, is_const=%r)" %
(member.name, return_type._pygen_repr, type_traits.is_const(member.type)))
## TODO: invoke post_scan_hooks
elif isinstance(member, calldef.destructor_t):
pass
+8 -8
View File
@@ -24,7 +24,7 @@ def my_module_gen(out_file):
Foo = mod.add_class('Foo', automatic_type_narrowing=True)
Foo.add_static_attribute(ReturnValue.new('int'), 'instance_count')
Foo.add_static_attribute('instance_count', ReturnValue.new('int'))
Foo.add_constructor([Parameter.new('std::string', 'datum')])
Foo.add_constructor([])
Foo.add_method('get_datum', ReturnValue.new('std::string'), [])
@@ -37,7 +37,7 @@ def my_module_gen(out_file):
Zoo.implicitly_converts_to(Foo)
Foobar = mod.add_class('Foobar')
Foobar.add_static_attribute(ReturnValue.new('int'), 'instance_count')
Foobar.add_static_attribute('instance_count', ReturnValue.new('int'))
Bar = mod.add_class('Bar', parent=Foo)
@@ -71,7 +71,7 @@ int %s::custom_method_added_by_a_hook(int x)
Zbr.add_method('get_datum', ReturnValue.new('std::string'), [])
Zbr.add_method('get_int', ReturnValue.new('int'), [Parameter.new('int', 'x')],
is_virtual=True)
Zbr.add_static_attribute(ReturnValue.new('int'), 'instance_count')
Zbr.add_static_attribute('instance_count', ReturnValue.new('int'))
mod.add_function('store_zbr', None,
[Parameter.new('Zbr*', 'zbr', transfer_ownership=True)])
@@ -95,13 +95,13 @@ int %s::custom_method_added_by_a_hook(int x)
SomeObject = mod.add_class('SomeObject', allow_subclassing=True)
SomeObject.add_instance_attribute(ReturnValue.new('Foo'), 'foo',
SomeObject.add_instance_attribute('foo', ReturnValue.new('Foo'),
getter='get_foo_value',
setter='set_foo_value')
SomeObject.add_instance_attribute(ReturnValue.new('std::string'), 'm_prefix')
SomeObject.add_static_attribute(ReturnValue.new('std::string'), 'staticData')
SomeObject.add_instance_attribute('m_prefix', ReturnValue.new('std::string'))
SomeObject.add_static_attribute('staticData', ReturnValue.new('std::string'))
SomeObject.add_static_attribute(ReturnValue.new('int'), 'instance_count')
SomeObject.add_static_attribute('instance_count', ReturnValue.new('int'))
SomeObject.add_method('add_prefix', ReturnValue.new('int'),
[Parameter.new('std::string&', 'message',
@@ -280,7 +280,7 @@ int %s::custom_method_added_by_a_hook(int x)
## A nested class
NestedClass = mod.add_class('NestedClass', automatic_type_narrowing=True, outer_class=SomeObject)
NestedClass.add_static_attribute(ReturnValue.new('int'), 'instance_count')
NestedClass.add_static_attribute('instance_count', ReturnValue.new('int'))
NestedClass.add_constructor([Parameter.new('std::string', 'datum')])
NestedClass.add_constructor([])
NestedClass.add_method('get_datum', ReturnValue.new('std::string'), [])