Added support for C++0x rvalue and move semantics.
Added testcase. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-matevz@11450 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
29004c3fcf
commit
a8209bfd68
4 changed files with 58 additions and 3 deletions
|
|
@ -407,7 +407,8 @@ CPP0X_TEST_CASES = \
|
||||||
cpp0x_template_explicit \
|
cpp0x_template_explicit \
|
||||||
cpp0x_uniform_initialization \
|
cpp0x_uniform_initialization \
|
||||||
cpp0x_function_objects \
|
cpp0x_function_objects \
|
||||||
cpp0x_strongly_typed_enumerations
|
cpp0x_strongly_typed_enumerations \
|
||||||
|
cpp0x_rvalue_reference
|
||||||
# cpp0x_alternate_function_syntax # not fully implemented yet
|
# cpp0x_alternate_function_syntax # not fully implemented yet
|
||||||
# cpp0x_hash_types # not fully implemented yet
|
# cpp0x_hash_types # not fully implemented yet
|
||||||
# cpp0x_unrestricted_unions # not supported by any compilers yet
|
# cpp0x_unrestricted_unions # not supported by any compilers yet
|
||||||
|
|
|
||||||
23
Examples/test-suite/cpp0x_rvalue_reference.i
Normal file
23
Examples/test-suite/cpp0x_rvalue_reference.i
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
%module cpp0x_rvalue_reference
|
||||||
|
|
||||||
|
%inline %{
|
||||||
|
class A {
|
||||||
|
public:
|
||||||
|
int getAcopy() { return _a; }
|
||||||
|
int *getAptr() { return &_a; }
|
||||||
|
int &getAref() { return _a; }
|
||||||
|
int &&getAmove() { return _a; }
|
||||||
|
|
||||||
|
void setAcopy(int a) { _a = a; }
|
||||||
|
void setAptr(int *a) { _a = *a; }
|
||||||
|
void setAref(int &a) { _a = a; }
|
||||||
|
void setAmove(int &&a) { _a = a; }
|
||||||
|
|
||||||
|
void arg(int a);
|
||||||
|
void arg(int *a);
|
||||||
|
void arg(int &a);
|
||||||
|
// void arg(int &&a); // redefinition not allowed
|
||||||
|
private:
|
||||||
|
int _a;
|
||||||
|
};
|
||||||
|
%}
|
||||||
22
Examples/test-suite/python/cpp0x_rvalue_reference_runme.py
Normal file
22
Examples/test-suite/python/cpp0x_rvalue_reference_runme.py
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
import cpp0x_rvalue_reference
|
||||||
|
|
||||||
|
a = cpp0x_rvalue_reference.A()
|
||||||
|
|
||||||
|
a.setAcopy(5)
|
||||||
|
if a.getAcopy() != 5:
|
||||||
|
raise RunTimeError, "int A::getAcopy() value is ", a.getAcopy(), " should be 5"
|
||||||
|
|
||||||
|
ptr = a.getAptr()
|
||||||
|
|
||||||
|
a.setAptr(ptr)
|
||||||
|
if a.getAcopy() != 5:
|
||||||
|
raise RunTimeError, "after A::setAptr(): int A::getAcopy() value is ", a.getAcopy(), " should be 5"
|
||||||
|
|
||||||
|
a.setAref(ptr)
|
||||||
|
if a.getAcopy() != 5:
|
||||||
|
raise RunTimeError, "after A::setAref(): int A::getAcopy() value is ", a.getAcopy(), " should be 5"
|
||||||
|
|
||||||
|
a.setAmove(ptr)
|
||||||
|
if a.getAcopy() != 5:
|
||||||
|
raise RunTimeError, "after A::setAmove(): int A::getAcopy() value is ", a.getAcopy(), " should be 5"
|
||||||
|
|
||||||
|
|
@ -4804,7 +4804,16 @@ declarator : pointer notso_direct_declarator {
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
if (!$$.type) $$.type = NewStringEmpty();
|
if (!$$.type) $$.type = NewStringEmpty();
|
||||||
}
|
}
|
||||||
| AND notso_direct_declarator {
|
| AND notso_direct_declarator {
|
||||||
|
$$ = $2;
|
||||||
|
$$.type = NewStringEmpty();
|
||||||
|
SwigType_add_reference($$.type);
|
||||||
|
if ($2.type) {
|
||||||
|
SwigType_push($$.type,$2.type);
|
||||||
|
Delete($2.type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
| LAND notso_direct_declarator {
|
||||||
$$ = $2;
|
$$ = $2;
|
||||||
$$.type = NewStringEmpty();
|
$$.type = NewStringEmpty();
|
||||||
SwigType_add_reference($$.type);
|
SwigType_add_reference($$.type);
|
||||||
|
|
@ -5082,7 +5091,7 @@ abstract_declarator : pointer {
|
||||||
Delete($2.type);
|
Delete($2.type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| AND {
|
| AND {
|
||||||
$$.id = 0;
|
$$.id = 0;
|
||||||
$$.parms = 0;
|
$$.parms = 0;
|
||||||
$$.have_parms = 0;
|
$$.have_parms = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue