mirror of https://github.com/swig/swig
171 lines
5.3 KiB
OpenEdge ABL
171 lines
5.3 KiB
OpenEdge ABL
%module special_variable_attributes
|
|
|
|
// Special variable expansion and special variable macros, aka embedded typemaps - expansion tests
|
|
// Tests these are expanded within typemap attributes.
|
|
// Also tests that these are expanded when used together, so that the special variables
|
|
// can be used as the type passed to the special variable macro.
|
|
// C# is used for testing as it is one of the few languages that uses a lot of typemap attributes.
|
|
// Attributes in both 'in' and 'out' typemaps are needed, that is,
|
|
// typemaps targeting both parameters and return values respectively).
|
|
|
|
#ifdef SWIGCSHARP
|
|
// Check special variable expansion in typemap attributes.
|
|
// This changes return by reference into return by value.
|
|
// Takes advantage of the fact that 'int' is a valid type in both C and C#.
|
|
// This is not a realistic use, just a way to test the variable expansion in the 'out' attribute.
|
|
%typemap(ctype, out="$*1_ltype") int& getNumber1 "_not_used_"
|
|
%typemap(imtype, out="$*1_ltype") int& getNumber1 "_not_used_"
|
|
%typemap(cstype, out="$*1_ltype") int& getNumber1 "_not_used_"
|
|
%typemap(out) int& getNumber1 "$result = *$1;"
|
|
%typemap(csout, excode=SWIGEXCODE) int & getNumber1 {
|
|
int ret = $imcall;$excode
|
|
return ret;
|
|
}
|
|
#endif
|
|
|
|
%inline %{
|
|
int& getNumber1() {
|
|
static int num = 111;
|
|
return num;
|
|
}
|
|
%}
|
|
|
|
#ifdef SWIGCSHARP
|
|
// Check special variable macro expansion in typemap attributes.
|
|
// This changes return by reference into return by value.
|
|
%typemap(ctype, out="$typemap(ctype, int)") int& getNumber2 "_not_used_"
|
|
%typemap(imtype, out="$typemap(imtype, int)") int& getNumber2 "_not_used_"
|
|
%typemap(cstype, out="$typemap(cstype, int)") int& getNumber2 "_not_used_"
|
|
%typemap(out) int& getNumber2 "$result = *$1;"
|
|
%typemap(csout, excode=SWIGEXCODE) int & getNumber2 {
|
|
int ret = $imcall;$excode
|
|
return ret;
|
|
}
|
|
#endif
|
|
|
|
%inline %{
|
|
int& getNumber2() {
|
|
static int num = 222;
|
|
return num;
|
|
}
|
|
%}
|
|
|
|
|
|
#ifdef SWIGCSHARP
|
|
// Check special variable macro expansion and special variable expansion in typemap attributes.
|
|
// This changes return by reference into return by value.
|
|
%typemap(ctype, out="$typemap(ctype, $*1_ltype)") int& getNumber3 "_not_used_"
|
|
%typemap(imtype, out="$typemap(imtype, $*1_ltype)") int& getNumber3 "_not_used_"
|
|
%typemap(cstype, out="$typemap(cstype, $*1_ltype)") int& getNumber3 "_not_used_"
|
|
%typemap(out) int& getNumber3 "$result = *$1;"
|
|
%typemap(csout, excode=SWIGEXCODE) int & getNumber3 {
|
|
int ret = $imcall;$excode
|
|
return ret;
|
|
}
|
|
#endif
|
|
|
|
%inline %{
|
|
int& getNumber3() {
|
|
static int num = 333;
|
|
return num;
|
|
}
|
|
%}
|
|
|
|
#ifdef SWIGCSHARP
|
|
// Check special variable macro expansion in typemap attributes.
|
|
%typemap(csin,
|
|
pre=" $typemap(cstype, int) $csinput_scaled = 11;"
|
|
) int num1
|
|
%{$csinput * $csinput_scaled %}
|
|
#endif
|
|
|
|
%inline %{
|
|
int bounceNumber1(int num1) {
|
|
return num1;
|
|
}
|
|
%}
|
|
|
|
#ifdef SWIGCSHARP
|
|
// Check special variable expansion in typemap attributes.
|
|
%typemap(csin,
|
|
pre=" $1_type $csinput_scaled = 22;"
|
|
) int num2
|
|
%{$csinput * $csinput_scaled %}
|
|
#endif
|
|
|
|
%inline %{
|
|
int bounceNumber2(int num2) {
|
|
return num2;
|
|
}
|
|
%}
|
|
|
|
#ifdef SWIGCSHARP
|
|
// Check special variable and special variable macro expansion in typemap attributes.
|
|
%typemap(csin,
|
|
pre=" $typemap(cstype, $1_type) $csinput_scaled = 33;"
|
|
) int num3
|
|
%{$csinput * $csinput_scaled %}
|
|
#endif
|
|
|
|
%inline %{
|
|
int bounceNumber3(int num3) {
|
|
return num3;
|
|
}
|
|
%}
|
|
|
|
/////////////////////////////////
|
|
//// Multi-argument typemaps ////
|
|
/////////////////////////////////
|
|
|
|
// Test expansion of special variables
|
|
#ifdef SWIGCSHARP
|
|
%typemap(ctype) (int intvar, char charvar) "double"
|
|
%typemap(imtype) (int intvar, char charvar) "double"
|
|
%typemap(cstype) (int intvar, char charvar) "double"
|
|
%typemap(in) (int intvar, char charvar)
|
|
%{
|
|
// split double value a.b into two numbers, a and b*100
|
|
$1 = (int)$input;
|
|
$2 = (char)(($input - $1 + 0.005) * 100);
|
|
%}
|
|
%typemap(csin,
|
|
pre=" $1_type $csinput_$1_type = 50;\n" // $1_type should expand to int
|
|
" $2_type $csinput_$2_type = 'A';" // $2_type should expand to char
|
|
) (int intvar, char charvar)
|
|
%{$csinput + ($csinput_int - 50 + $csinput_char - 'A') + ($csinput_$1_type - 50 + $csinput_$2_type - 'A')%}
|
|
#endif
|
|
|
|
%inline %{
|
|
int multi1(int intvar, char charvar) {
|
|
return intvar + charvar;
|
|
}
|
|
%}
|
|
|
|
#ifdef SWIGCSHARP
|
|
%typemap(csin,
|
|
pre=" $typemap(cstype, int) $csinput_$typemap(cstype, int) = 50;\n" // also should expand to int
|
|
" $typemap(cstype, char) $csinput_$typemap(cstype, char) = 'A';" // also should expand to char
|
|
) (int intvar, char charvar)
|
|
%{55 + $csinput + ($csinput_int - 50 + $csinput_char - 'A') + ($csinput_$typemap(cstype, int) - 50 + $csinput_$typemap(cstype, char) - 'A')%}
|
|
#endif
|
|
|
|
%inline %{
|
|
int multi2(int intvar, char charvar) {
|
|
return intvar + charvar;
|
|
}
|
|
%}
|
|
|
|
#ifdef SWIGCSHARP
|
|
%typemap(csin,
|
|
pre=" $typemap(cstype, $1_type) $csinput_$typemap(cstype, $1_type) = 50;\n" // also should expand to int
|
|
" $typemap(cstype, $2_type) $csinput_$typemap(cstype, $2_type) = 'A';" // also should expand to char
|
|
) (int intvar, char charvar)
|
|
%{77 + $csinput + ($csinput_int - 50 + $csinput_char - 'A') + ($csinput_$typemap(cstype, $1_type) - 50 + $csinput_$typemap(cstype, $2_type) - 'A')%}
|
|
#endif
|
|
|
|
%inline %{
|
|
int multi3(int intvar, char charvar) {
|
|
return intvar + charvar;
|
|
}
|
|
%}
|