Add support for conversion operators with ref-qualifiers
This commit is contained in:
parent
0e50ef30b1
commit
950edc1c00
4 changed files with 40 additions and 3 deletions
|
|
@ -74,3 +74,18 @@ struct Renames {
|
||||||
string S3(int i) const & { return string(); }
|
string S3(int i) const & { return string(); }
|
||||||
};
|
};
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
// Conversion operators
|
||||||
|
%rename(StringConvertCopy) operator string() &;
|
||||||
|
%rename(StringConvertMove) operator string() &&;
|
||||||
|
%feature("ignore", "0") operator string() &&; // unignore as it is ignored by default
|
||||||
|
|
||||||
|
%inline %{
|
||||||
|
struct ConversionOperators {
|
||||||
|
virtual operator string() & { return string(); }
|
||||||
|
virtual operator string() && { return std::move(string()); }
|
||||||
|
};
|
||||||
|
struct ConversionOperators2 {
|
||||||
|
virtual operator string() && { return std::move(string()); }
|
||||||
|
};
|
||||||
|
%}
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,15 @@ public class cpp11_ref_qualifiers_runme {
|
||||||
r.SS1(0);
|
r.SS1(0);
|
||||||
r.SS2(0);
|
r.SS2(0);
|
||||||
r.SS3(0);
|
r.SS3(0);
|
||||||
|
|
||||||
|
// Conversion operators
|
||||||
|
String s = null;
|
||||||
|
ConversionOperators co = new ConversionOperators();
|
||||||
|
s = co.StringConvertCopy();
|
||||||
|
s = co.StringConvertMove();
|
||||||
|
|
||||||
|
ConversionOperators2 co2 = new ConversionOperators2();
|
||||||
|
s = co2.StringConvertMove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,3 +35,11 @@ r.RR3()
|
||||||
r.SS1(0)
|
r.SS1(0)
|
||||||
r.SS2(0)
|
r.SS2(0)
|
||||||
r.SS3(0)
|
r.SS3(0)
|
||||||
|
|
||||||
|
# Conversion operators
|
||||||
|
co = cpp11_ref_qualifiers.ConversionOperators()
|
||||||
|
s = co.StringConvertCopy()
|
||||||
|
s = co.StringConvertMove()
|
||||||
|
|
||||||
|
co2 = cpp11_ref_qualifiers.ConversionOperators2()
|
||||||
|
s = co2.StringConvertMove()
|
||||||
|
|
|
||||||
|
|
@ -4656,6 +4656,7 @@ cpp_conversion_operator : storage_class CONVERSIONOPERATOR type pointer LPAREN p
|
||||||
if ($8.qualifier) {
|
if ($8.qualifier) {
|
||||||
SwigType_push($4,$8.qualifier);
|
SwigType_push($4,$8.qualifier);
|
||||||
}
|
}
|
||||||
|
Setattr($$,"refqualifier",$8.refqualifier);
|
||||||
Setattr($$,"decl",$4);
|
Setattr($$,"decl",$4);
|
||||||
Setattr($$,"parms",$6);
|
Setattr($$,"parms",$6);
|
||||||
Setattr($$,"conversion_operator","1");
|
Setattr($$,"conversion_operator","1");
|
||||||
|
|
@ -4673,6 +4674,7 @@ cpp_conversion_operator : storage_class CONVERSIONOPERATOR type pointer LPAREN p
|
||||||
if ($8.qualifier) {
|
if ($8.qualifier) {
|
||||||
SwigType_push(decl,$8.qualifier);
|
SwigType_push(decl,$8.qualifier);
|
||||||
}
|
}
|
||||||
|
Setattr($$,"refqualifier",$8.refqualifier);
|
||||||
Setattr($$,"decl",decl);
|
Setattr($$,"decl",decl);
|
||||||
Setattr($$,"parms",$6);
|
Setattr($$,"parms",$6);
|
||||||
Setattr($$,"conversion_operator","1");
|
Setattr($$,"conversion_operator","1");
|
||||||
|
|
@ -4690,6 +4692,7 @@ cpp_conversion_operator : storage_class CONVERSIONOPERATOR type pointer LPAREN p
|
||||||
if ($8.qualifier) {
|
if ($8.qualifier) {
|
||||||
SwigType_push(decl,$8.qualifier);
|
SwigType_push(decl,$8.qualifier);
|
||||||
}
|
}
|
||||||
|
Setattr($$,"refqualifier",$8.refqualifier);
|
||||||
Setattr($$,"decl",decl);
|
Setattr($$,"decl",decl);
|
||||||
Setattr($$,"parms",$6);
|
Setattr($$,"parms",$6);
|
||||||
Setattr($$,"conversion_operator","1");
|
Setattr($$,"conversion_operator","1");
|
||||||
|
|
@ -4709,6 +4712,7 @@ cpp_conversion_operator : storage_class CONVERSIONOPERATOR type pointer LPAREN p
|
||||||
if ($9.qualifier) {
|
if ($9.qualifier) {
|
||||||
SwigType_push(decl,$9.qualifier);
|
SwigType_push(decl,$9.qualifier);
|
||||||
}
|
}
|
||||||
|
Setattr($$,"refqualifier",$9.refqualifier);
|
||||||
Setattr($$,"decl",decl);
|
Setattr($$,"decl",decl);
|
||||||
Setattr($$,"parms",$7);
|
Setattr($$,"parms",$7);
|
||||||
Setattr($$,"conversion_operator","1");
|
Setattr($$,"conversion_operator","1");
|
||||||
|
|
@ -4725,6 +4729,7 @@ cpp_conversion_operator : storage_class CONVERSIONOPERATOR type pointer LPAREN p
|
||||||
if ($7.qualifier) {
|
if ($7.qualifier) {
|
||||||
SwigType_push(t,$7.qualifier);
|
SwigType_push(t,$7.qualifier);
|
||||||
}
|
}
|
||||||
|
Setattr($$,"refqualifier",$7.refqualifier);
|
||||||
Setattr($$,"decl",t);
|
Setattr($$,"decl",t);
|
||||||
Setattr($$,"parms",$5);
|
Setattr($$,"parms",$5);
|
||||||
Setattr($$,"conversion_operator","1");
|
Setattr($$,"conversion_operator","1");
|
||||||
|
|
@ -4819,7 +4824,7 @@ cpp_vend : cpp_const SEMI {
|
||||||
Clear(scanner_ccode);
|
Clear(scanner_ccode);
|
||||||
$$.val = 0;
|
$$.val = 0;
|
||||||
$$.qualifier = $1.qualifier;
|
$$.qualifier = $1.qualifier;
|
||||||
$$.refqualifier = 0;
|
$$.refqualifier = $1.refqualifier;
|
||||||
$$.bitfield = 0;
|
$$.bitfield = 0;
|
||||||
$$.throws = $1.throws;
|
$$.throws = $1.throws;
|
||||||
$$.throwf = $1.throwf;
|
$$.throwf = $1.throwf;
|
||||||
|
|
@ -4829,7 +4834,7 @@ cpp_vend : cpp_const SEMI {
|
||||||
Clear(scanner_ccode);
|
Clear(scanner_ccode);
|
||||||
$$.val = $3.val;
|
$$.val = $3.val;
|
||||||
$$.qualifier = $1.qualifier;
|
$$.qualifier = $1.qualifier;
|
||||||
$$.refqualifier = 0;
|
$$.refqualifier = $1.refqualifier;
|
||||||
$$.bitfield = 0;
|
$$.bitfield = 0;
|
||||||
$$.throws = $1.throws;
|
$$.throws = $1.throws;
|
||||||
$$.throwf = $1.throwf;
|
$$.throwf = $1.throwf;
|
||||||
|
|
@ -4839,7 +4844,7 @@ cpp_vend : cpp_const SEMI {
|
||||||
skip_balanced('{','}');
|
skip_balanced('{','}');
|
||||||
$$.val = 0;
|
$$.val = 0;
|
||||||
$$.qualifier = $1.qualifier;
|
$$.qualifier = $1.qualifier;
|
||||||
$$.refqualifier = 0;
|
$$.refqualifier = $1.refqualifier;
|
||||||
$$.bitfield = 0;
|
$$.bitfield = 0;
|
||||||
$$.throws = $1.throws;
|
$$.throws = $1.throws;
|
||||||
$$.throwf = $1.throwf;
|
$$.throwf = $1.throwf;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue