blob: aa1db046107d1413a4a61b10679893947a5bf803 [file] [log] [blame]
%module(directors="1") special_variables
%include <std_string.i>
// will fail to compile if $symname is not expanded
%typemap(argout) int i {
$symname(99);
}
%{
#define KKK_testmethod testmethod
#define KKK_teststaticmethod KKK::teststaticmethod
%}
%inline %{
void testmethod(int i) {}
struct KKK {
void testmethod(int i) {}
static void teststaticmethod(int i) {}
};
%}
%{
std::string ExceptionVars(double i, double j) {
return "a1";
}
%}
%rename(ExceptionVars) Space::exceptionvars;
%exception Space::exceptionvars %{
$action
result = $symname(1.0,2.0); // Should expand to ExceptionVars
result = $name(3.0,4.0); // Should expand to Space::exceptionvars
// above will not compile if the variables are not expanded properly
result = "$action $name $symname $overname $wrapname $parentclassname $parentclasssymname";
%}
%inline %{
namespace Space {
std::string exceptionvars(double i, double j) {
return "b2";
}
}
%}
%exception Space::overloadedmethod %{
$action
result = Space::$symname(1.0);
result = $name();
result = $name(2.0);
// above will not compile if the variables are not expanded properly
result = "$action $name $symname $overname $wrapname $parentclassname $parentclasssymname";
// $decl
%}
%inline %{
namespace Space {
std::string overloadedmethod(double j) {
return "c3";
}
std::string overloadedmethod() {
return "d4";
}
}
std::string declaration;
%}
%exception {
$action
declaration = "$fulldecl $decl";
}
%inline %{
namespace SpaceNamespace {
struct ABC {
ABC(int a, double b) {}
ABC() {}
static short * staticmethod(int x, bool b) { return 0; }
short * instancemethod(int x, bool b = false) { return 0; }
short * constmethod(int x) const { return 0; }
};
template<typename T> struct Template {
std::string tmethod(T t) { return ""; }
};
void globtemplate(Template<ABC> t) {}
}
%}
%template(TemplateABC) SpaceNamespace::Template<SpaceNamespace::ABC>;
/////////////////////////////////// directors /////////////////////////////////
%{
void DirectorTest_director_testmethod(int i) {}
void DirectorTest_director_testmethodSwigExplicitDirectorTest(int i) {}
%}
%typemap(directorargout) int i {
$symname(99);
}
%feature("director") DirectorTest;
%inline %{
void director_testmethod(int i) {}
struct DirectorTest {
virtual void director_testmethod(int i) {}
virtual ~DirectorTest() {}
};
%}
/////////////////////////////////// parentclasssymname parentclassname /////////////////////////////////
%exception instance_def {
$action
$parentclasssymname_aaa();
$parentclassname_bbb();
// above will not compile if the variables are not expanded properly
}
%exception static_def {
$action
$parentclasssymname_aaa();
$parentclassname_bbb();
// above will not compile if the variables are not expanded properly
}
%{
void DEFNewName_aaa() {}
namespace SpaceNamespace {
void DEF_bbb() {}
}
%}
%rename(DEFNewName) DEF;
%inline %{
namespace SpaceNamespace {
struct DEF : ABC {
void instance_def() {}
static void static_def() {}
};
}
%}