Fixed #39 (Action cannot be reassigned)

This commit is contained in:
Matthias Koefferlein 2017-12-17 22:38:48 +01:00
parent ad741d0eb7
commit 21e42788e6
5 changed files with 33 additions and 7 deletions

View File

@ -60,10 +60,18 @@ A::A (const A &a)
: gsi::ObjectBase (a)
{
++a_count;
e = a.e;
m_d = a.m_d;
n = a.n;
f = a.f;
operator= (a);
}
A &A::operator= (const A &a)
{
if (this != &a) {
e = a.e;
m_d = a.m_d;
n = a.n;
f = a.f;
}
return *this;
}
int A::a0 ()

View File

@ -81,6 +81,11 @@ struct A
*/
~A ();
/**
* @brief Assignment
*/
A &operator= (const A &a);
/**
* @brief A static method
*/

View File

@ -764,7 +764,7 @@ object_assign (PyObject *self, PyObject *args)
tl_assert (cls_decl_self != 0);
PyObject *src = NULL;
if (! PyArg_ParseTuple (args, "o", &src)) {
if (! PyArg_ParseTuple (args, "O", &src)) {
return NULL;
}
@ -778,7 +778,7 @@ object_assign (PyObject *self, PyObject *args)
throw tl::Exception (tl::to_string (QObject::tr ("No assignment provided for class '%s'")), cls_decl_self->name ());
}
cls_decl_self->assign (((PYAObjectBase *) self)->obj (), ((PYAObjectBase *) args)->obj ());
cls_decl_self->assign (((PYAObjectBase *) self)->obj (), ((PYAObjectBase *) src)->obj ());
Py_INCREF (self);
return self;

View File

@ -118,6 +118,11 @@ class BasicTest(unittest.TestCase):
a = pya.A.new_a(100)
self.assertEqual( pya.A.a0(), ac0 + 1 )
a = pya.A()
self.assertEqual(a.a1(), 17)
a.assign(pya.A(110))
self.assertEqual(a.a1(), 110)
a = None
self.assertEqual( pya.A.a0(), ac0 )

View File

@ -3,7 +3,10 @@
# extend A
class RBA::A
def initialize
alias_method :org_initialize, :initialize
def initialize(*args)
org_initialize(*args)
@offset = nil
end
def s( o )
@ -90,6 +93,11 @@ class Basic_TestClass < TestBase
a = RBA::A.new_a(100)
assert_equal( RBA::A::a0, ac0 + 1 )
a = RBA::A.new
assert_equal(a.a1, 17)
a.assign(RBA::A.new(110))
assert_equal(a.a1, 110)
a = nil
GC.start
assert_equal( RBA::A::a0, ac0 )