diff --git a/src/gsi/unit_tests/gsiTest.cc b/src/gsi/unit_tests/gsiTest.cc index 9a9b1394e..dc12b26e2 100644 --- a/src/gsi/unit_tests/gsiTest.cc +++ b/src/gsi/unit_tests/gsiTest.cc @@ -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 () diff --git a/src/gsi/unit_tests/gsiTest.h b/src/gsi/unit_tests/gsiTest.h index e8b31e5c8..b20d7da74 100644 --- a/src/gsi/unit_tests/gsiTest.h +++ b/src/gsi/unit_tests/gsiTest.h @@ -81,6 +81,11 @@ struct A */ ~A (); + /** + * @brief Assignment + */ + A &operator= (const A &a); + /** * @brief A static method */ diff --git a/src/pya/pya/pya.cc b/src/pya/pya/pya.cc index 88cd4127d..54fa391ff 100644 --- a/src/pya/pya/pya.cc +++ b/src/pya/pya/pya.cc @@ -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; diff --git a/testdata/python/basic.py b/testdata/python/basic.py index fec8d53c1..285e6273c 100644 --- a/testdata/python/basic.py +++ b/testdata/python/basic.py @@ -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 ) diff --git a/testdata/ruby/basic_testcore.rb b/testdata/ruby/basic_testcore.rb index d9a2c0e85..6989bffb0 100644 --- a/testdata/ruby/basic_testcore.rb +++ b/testdata/ruby/basic_testcore.rb @@ -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 )