mirror of https://github.com/swig/swig
141 lines
3.0 KiB
OpenEdge ABL
141 lines
3.0 KiB
OpenEdge ABL
%module fragments
|
|
|
|
|
|
%fragment("Hello","header") %{
|
|
/* hello!!! */
|
|
int foobar(int a)
|
|
{
|
|
return a;
|
|
}
|
|
%}
|
|
|
|
/*
|
|
this fragment include the previous fragment if needed.
|
|
*/
|
|
|
|
%fragment("Hi","header",fragment="Hello") %{
|
|
/* hi!!! */
|
|
int bar(int a)
|
|
{
|
|
return foobar(a);
|
|
}
|
|
%}
|
|
|
|
%typemap(in,fragment="Hi") int hola "$1 = 123;"
|
|
|
|
|
|
%inline %{
|
|
|
|
int bar(int a);
|
|
|
|
int foo(int hola)
|
|
{
|
|
return bar(hola);
|
|
}
|
|
|
|
%}
|
|
|
|
/* Instantiate multiple fragments at once using fragments in comma separated list */
|
|
typedef int comma_frag3;
|
|
|
|
%fragment("comma_frag1","header", noblock=1) {
|
|
typedef int comma_frag1;
|
|
}
|
|
|
|
%fragment("comma_frag2","header", noblock=1, noblock=1) {
|
|
typedef comma_frag1 comma_frag2;
|
|
}
|
|
|
|
%fragment("comma_frag3","header",
|
|
fragment="comma_frag1,comma_frag2")
|
|
%{typedef comma_frag2 comma_frag3;%}
|
|
|
|
%fragment("comma_frag3");
|
|
%inline %{
|
|
comma_frag3 my_comma_frag_int = 0;
|
|
%}
|
|
|
|
|
|
/* Instantiate multiple fragments at once using multiple keywords */
|
|
typedef int explicit_frag3;
|
|
|
|
%fragment("explicit_frag1","header", noblock=1) {
|
|
typedef int explicit_frag1;
|
|
}
|
|
|
|
%fragment("explicit_frag2","header", noblock=1) {
|
|
typedef explicit_frag1 explicit_frag2;
|
|
}
|
|
|
|
%fragment("explicit_frag3","header",
|
|
fragment="explicit_frag1", fragment="explicit_frag2")
|
|
%{typedef explicit_frag2 explicit_frag3;%}
|
|
|
|
%fragment("explicit_frag3");
|
|
%inline %{
|
|
explicit_frag3 my_int = 0;
|
|
%}
|
|
|
|
/* Test typemap's ability to instantiate multiple fragments on demand */
|
|
typedef int int_infrag1;
|
|
typedef int int_infrag2;
|
|
typedef int int_outfrag1;
|
|
typedef int int_outfrag2;
|
|
typedef int int_outfrag3;
|
|
|
|
%fragment("infrag2","runtime") %{
|
|
typedef int_infrag1 int_infrag2;
|
|
%}
|
|
|
|
%fragment("infrag1","runtime") %{
|
|
typedef int int_infrag1;
|
|
%}
|
|
%fragment("infrag2","runtime") %{
|
|
__second_infrag2_fragment_is_ignored_this_will_not_compile_if_emitted_
|
|
typedef int_infrag1 int_infrag2;
|
|
%}
|
|
|
|
%fragment("outfrag1","runtime") %{
|
|
typedef int int_outfrag1;
|
|
%}
|
|
%fragment("outfrag2","runtime") %{
|
|
typedef int_outfrag1 int_outfrag2;
|
|
%}
|
|
|
|
%fragment("tcfrag1","runtime") %{
|
|
typedef int int_tcfrag1;
|
|
%}
|
|
%fragment("tcfrag2","runtime") %{
|
|
typedef int_tcfrag1 int_tcfrag2;
|
|
%}
|
|
|
|
%fragment("outspecial"{bool},"runtime") %{
|
|
typedef int int_outfrag3_temp;
|
|
%}
|
|
%fragment("outfrag3","runtime") %{
|
|
typedef int_outfrag3_temp int_outfrag3;
|
|
%}
|
|
|
|
%typemap(in, fragment="infrag1", fragment="infrag2") int_infrag2
|
|
%{$typemap(in,int)%}
|
|
|
|
%typemap(check, fragment="tcfrag1", noblock=1, fragment="tcfrag2") int_infrag2
|
|
{(void)sizeof(int_tcfrag2);}
|
|
|
|
%typemap(out, fragment="outfrag1", fragment="outfrag2", noblock=1) int_outfrag2
|
|
{$typemap(out,int)}
|
|
|
|
/* Test another permutation of keyword order */
|
|
%typemap(out, noblock=1, fragment="outfrag1", fragment="outfrag2") int_outfrag1
|
|
{$typemap(out,int)}
|
|
|
|
/* Test fragment specialization */
|
|
%typemap(out, noblock=1, fragment="outspecial"{bool}, fragment="outfrag3") int_outfrag3
|
|
{$typemap(out,int)}
|
|
|
|
%inline %{
|
|
int identity_in(int_infrag2 inp) { return inp; }
|
|
int_outfrag2 identity_out(int inp) { return inp; }
|
|
int_outfrag3 identity_out_2(int inp) { return inp; }
|
|
%}
|