Merge branch 'abstract-conversion-operators'
* abstract-conversion-operators:
Add test cases for abstract user-defined conversion operators
Recognize C++ conversion operators with trailing '= 0' as abstract
diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk
index 115747e..e77f09c 100644
--- a/Examples/test-suite/common.mk
+++ b/Examples/test-suite/common.mk
@@ -184,6 +184,7 @@
director_classes \
director_classic \
director_constructor \
+ director_conversion_operators \
director_default \
director_detect \
director_enum \
diff --git a/Examples/test-suite/director_conversion_operators.i b/Examples/test-suite/director_conversion_operators.i
new file mode 100644
index 0000000..afcd49d
--- /dev/null
+++ b/Examples/test-suite/director_conversion_operators.i
@@ -0,0 +1,35 @@
+%module(directors="1") director_conversion_operators
+
+%feature("director");
+
+%warnfilter(SWIGWARN_TYPEMAP_DIRECTOROUT_PTR) Bar;
+
+%rename(toFoo) Bar::operator Foo();
+%rename(toFooPtr) Bar::operator Foo *();
+%rename(toFooRef) Bar::operator Foo &();
+%rename(toFooPtrRef) Bar::operator Foo *&();
+
+%rename(toOtherFoo) Bar::operator OtherFoo();
+%rename(toOtherFooPtr) Bar::operator OtherFoo *();
+%rename(toOtherFooRef) Bar::operator OtherFoo &();
+%rename(toOtherFooPtrRef) Bar::operator OtherFoo *&();
+
+%inline %{
+ struct Foo {
+ };
+ struct OtherFoo {
+ };
+ struct Bar {
+ Foo myFoo;
+ Foo *myFooPtr;
+ virtual ~Bar() { }
+ virtual operator Foo () { return Foo(); }
+ virtual operator Foo *() { return &myFoo; }
+ virtual operator Foo &() { return myFoo; }
+ virtual operator Foo *&() { return myFooPtr; }
+ virtual operator OtherFoo () = 0;
+ virtual operator OtherFoo *() = 0;
+ virtual operator OtherFoo &() = 0;
+ virtual operator OtherFoo *&() = 0;
+ };
+%}
diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y
index 470b7d0..8029dee 100644
--- a/Source/CParse/parser.y
+++ b/Source/CParse/parser.y
@@ -4800,6 +4800,9 @@
if ($8.qualifier) {
SwigType_push($4,$8.qualifier);
}
+ if ($8.val) {
+ Setattr($$,"value",$8.val);
+ }
Setattr($$,"refqualifier",$8.refqualifier);
Setattr($$,"decl",$4);
Setattr($$,"parms",$6);
@@ -4818,6 +4821,9 @@
if ($8.qualifier) {
SwigType_push(decl,$8.qualifier);
}
+ if ($8.val) {
+ Setattr($$,"value",$8.val);
+ }
Setattr($$,"refqualifier",$8.refqualifier);
Setattr($$,"decl",decl);
Setattr($$,"parms",$6);
@@ -4836,6 +4842,9 @@
if ($8.qualifier) {
SwigType_push(decl,$8.qualifier);
}
+ if ($8.val) {
+ Setattr($$,"value",$8.val);
+ }
Setattr($$,"refqualifier",$8.refqualifier);
Setattr($$,"decl",decl);
Setattr($$,"parms",$6);
@@ -4856,6 +4865,9 @@
if ($9.qualifier) {
SwigType_push(decl,$9.qualifier);
}
+ if ($9.val) {
+ Setattr($$,"value",$9.val);
+ }
Setattr($$,"refqualifier",$9.refqualifier);
Setattr($$,"decl",decl);
Setattr($$,"parms",$7);
@@ -4873,7 +4885,10 @@
if ($7.qualifier) {
SwigType_push(t,$7.qualifier);
}
- Setattr($$,"refqualifier",$7.refqualifier);
+ if ($7.val) {
+ Setattr($$,"value",$7.val);
+ }
+ Setattr($$,"refqualifier",$7.refqualifier);
Setattr($$,"decl",t);
Setattr($$,"parms",$5);
Setattr($$,"conversion_operator","1");