%module preproc %warnfilter(SWIGWARN_RUBY_WRONG_NAME) one; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) two; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) three; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) __GMP_HAVE_CONST; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) __GMP_HAVE_PROTOTYPES; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) __GMP_HAVE_TOKEN_PASTE; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) __GMP_HAVE_TOKEN_PASTE; /* Ruby, wrong constant name */ #pragma SWIG nowarn=890 /* lots of Go name conflicts */ #pragma SWIG nowarn=206 /* Unexpected tokens after #endif directive. */ /* Regression test: in SWIG < 4.1.0 this triggered the two #error cases. * Github issue #1384 */ #if "" != "" #endif #if 1 && (!0) // Should go here #else # error BUG #endif #if ((("" == ""))) || (1 && (!1)) // Should go here #else # error BUG #endif %{ #if defined(__clang__) /*Suppress: warning: use of logical '&&' with constant operand [-Wconstant-logical-operand]*/ #pragma clang diagnostic ignored "-Wconstant-logical-operand" #endif #if defined(_MSC_VER) #pragma warning(disable: 4003) /* not enough actual parameters for macro 'FOO2' */ #endif %} #ifdef SWIGOCAML %warnfilter(SWIGWARN_PARSE_KEYWORD) method; %warnfilter(SWIGWARN_PARSE_KEYWORD) val; #endif /* check __cplusplus case */ %header %{ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* C code */ #ifdef __cplusplus } #endif /* __cplusplus */ %} /* This interface file tests whether SWIG's extended C preprocessor is working right. In this example, SWIG 1.3.6 chokes on "//" in a #define with a syntax error. */ #define SLASHSLASH "//" /* This SWIG -*- c -*- interface is to test for some strange preprocessor bug. I get syntax errors unless I remove the apostrophe in the comment or the sharp-sign substitution. (The apostrophe seems to disable sharp-sign substitution.) */ %define TYPEMAP_LIST_VECTOR_INPUT_OUTPUT(SCM_TYPE) /* Don't check for NULL pointers (override checks). */ %typemap(argout, doc="($arg <vector of <" #SCM_TYPE ">>)") int *VECTORLENOUTPUT { } %enddef TYPEMAP_LIST_VECTOR_INPUT_OUTPUT(boolean) /* preproc_3 */ #define Sum( A, B, \ C) \ A + B + C /* preproc_4 */ %{ int hello0() { return 0; } int hello1() { return 1; } int hello2() { return 2; } int f(int min) { return min; } %} #define ARITH_RTYPE(A1, A2) A2 #define HELLO_TYPE(A, B) ARITH_RTYPE(A, ARITH_RTYPE(A,B)) int hello0(); ARITH_RTYPE(double,int) hello1(); /* This doesn't work with 1.3.17+ ( but it was ok in 1.3.16 ) it gets expanded as (using -E) ARITH_RTYPE(double,int) hello2(); */ HELLO_TYPE(double,int) hello2(); #define min(x,y) ((x) < (y)) ? (x) : (y) int f(int min); /* preproc_5 */ %warnfilter(SWIGWARN_PARSE_REDEFINED) A5; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) a5; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) b5; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) c5; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) d5; /* Ruby, wrong constant name */ /* Various preprocessor bits of nastiness. */ /* Test argument name substitution */ #define foo(x,xx) #x #xx #define bar(x,xx) x + xx %constant char *a5 = foo(hello,world); %constant int b5 = bar(3,4); /* Wrap your brain around this one ;-) */ %{ #define cat(x,y) x ## y %} #define cat(x,y) x ## y /* This should expand to cat(1,2); See K&R, p. 231 */ %constant int c5 = cat(cat(1,2),;) #define xcat(x,y) cat(x,y) /* This expands to 123. See K&R, p. 231 */ %constant int d5 = xcat(xcat(1,2),3); #define C1\ "hello" #define C2 #define C3 C2 #define ALONG_\ NAME 42 #define C4"Hello" /* preproc_6 */ %warnfilter(SWIGWARN_PARSE_REDEFINED) A6; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) a6; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) b6; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) c6; /* Ruby, wrong constant name */ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) d6; /* Ruby, wrong constant name */ #define add(a, b) (a + b) #define times(a, b) (a * b) #define op(x) x(1, 5) /* expand to (1 + 5) */ %constant int a6 = op(add); /* expand to (1 * 5) */ %constant int b6 = op(times); /* expand to ((1 + 5) * 5) */ %constant int c6 = times(add(1, 5), 5); /* expand to ((1 + 5) * 5) */ %constant int d6 = times(op(add), 5); /* This interface file tests whether SWIG's extended C preprocessor is working right. In this example, SWIG 1.3a5 reports missing macro arguments, which is bogus. */ %define MACRO1(C_TYPE, GETLENGTH) /* nothing */ %enddef %define MACRO2(XYZZY) MACRO1(XYZZY, 1) %enddef MACRO2(int) /* cpp_macro_noarg. Tests to make sure macros with no arguments work right. */ #define MACROWITHARG(x) something(x) typedef int MACROWITHARG; /* This testcase tests for embedded defines and embedded %constants */ %inline %{ typedef struct EmbeddedDefines { int dummy; #define EMBEDDED_DEFINE 44 #ifdef SWIG %constant EMBEDDED_SWIG_CONSTANT = 55; #endif } EmbeddedDefines; %} /* This testcase tests operators for defines */ #define A1 1 + 2 #define A2 3 - 4 #define A3 5 * 6 #define A4 7 / 8 #define A5 9 >> 10 #define A6 11 << 12 #define A7 13 & 14 #define A8 15 | 16 #define A9 17 ^ 18 #define A10 1 && 0 #define A11 1 || 0 #define A12 ~22 #define A13 !23 #ifdef __cplusplus #define %mangle_macro(...) #@__VA_ARGS__ #define %mangle_macro_str(...) ##@__VA_ARGS__ %define my_func(...) inline const char* mangle_macro ## #@__VA_ARGS__ () { return %mangle_macro_str(__VA_ARGS__); } %enddef %inline { my_func(class Int) ; my_func(std::pair<double, std::complex< double > >*) ; } #endif #if defined (__cplusplus) \ || defined (_AIX) \ || defined (__DECC) \ || (defined (__mips) && defined (_SYSTYPE_SVR4)) \ || defined (_MSC_VER) \ || defined (_WIN32) #define __GMP_HAVE_CONST 1 #define __GMP_HAVE_PROTOTYPES 1 #define __GMP_HAVE_TOKEN_PASTE 1 #else #define __GMP_HAVE_CONST 0 #define __GMP_HAVE_PROTOTYPES 0 #define __GMP_HAVE_TOKEN_PASTE 0 #endif /* empty TWO() macro is broken */ #define ONE 1 #define TWO() 2 #define THREE(FOO) 3 #define one ONE #define two TWO() #define three THREE(42) #if defined(one) /* hello */ #else /* chiao */ #endif; #ifdef SWIGRUBY %rename(ddefined) defined; #endif #ifdef SWIGPHP %rename(endif_) endif; #endif %inline %{ const int endif = 1; const int define = 1; const int defined = 1; int test(int defined) { return defined; } %} #pragma SWIG nowarn=SWIGWARN_PP_CPP_WARNING #warning "Some warning" /* check that #error can be turned into a warning, but suppress the warning message for the test-suite! */ #pragma SWIG nowarn=SWIGWARN_PP_CPP_ERROR #pragma SWIG cpperraswarn=1 #error "Some error" #define MASK(shift, size) (((1 << (size)) - 1) <<(shift)) #define SOME_MASK_DEF (80*MASK(8, 10)) /* some constants */ #define BOLTZMANN (1.380658e-23) #define AVOGADRO (6.0221367e23) #define RGAS (BOLTZMANN*AVOGADRO) #define RGASX (BOLTZMANN*AVOGADRO*BOLTZMANN) %{ #define TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(TYPE) \ struct TypeNameTraits { \ int val; \ } \ %} #define TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(TYPE) \ struct TypeNameTraits { \ int val; \ } \ %inline %{ TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(int); %} %inline %{ int method(struct TypeNameTraits tnt) { return tnt.val; } %} /* Null directive */ # /* comment 1 */ # // comment 2 # /** comment 3 */ # /* comment 4 */ /*comment 5*/ # /** comment 6 # # more comment 6 */ # # # int methodX(int x); %{ int methodX(int x) { return x+100; } %} /* Comma in macro - https://github.com/swig/swig/issues/974 (for C comments) and https://github.com/swig/swig/pull/1166 (for //) Also see preproc_cpp.i */ %inline %{ #define swig__attribute__(x) #define TCX_PACKED(d) d swig__attribute__ ((__packed__)) TCX_PACKED (typedef struct tcxMessageTestImpl { int mHeader; /**< comment */ }) tcxMessageTest; TCX_PACKED (typedef struct tcxMessageBugImpl { int mBid; /**< Bid price and size, check PresentMap if available in message */ }) tcxMessageBug; %} /* Regression tests for https://github.com/swig/swig/pull/1111 */ %{ static int foo_func(int x) { return x; } static int foo_func2() { return 0; } static int bar_func() { return 0; } static int baz_func(int a, int b, int c) { return a + b - c; } %} %inline %{ #define FOO(X) int foo_func(X); #define FOO2(X) int foo_func2(X); #define BAR() int bar_func(); #define BAR2() int bar_func2() #define BAZ(A,B,C) baz_func(A+0,B,C) #define FOOVAR(...) foo_func(__VA_ARGS__) #define BARVAR(...) bar_func(__VA_ARGS__) #define BAZVAR(...) baz_func(__VA_ARGS__) /* This has probably always worked, but make sure that the fix to accept an empty X doesn't cause this case to be incorrectly expanded:*/ const int FOO = 7; /* BAR was incorrectly expanded here, causing: Error: Syntax error in input(1). */ const int BAR = 6; /* This has probably always worked, but make sure that the fix to accept an empty X doesn't stop a non-empty X from working: */ FOO(int x) /* FOO() didn't used to get expanded here, causing: Syntax error in input(1). */ FOO2() /* Check BAR2() still gets expanded here. */ BAR2() { /* Regression test - this used to fail with: Error: Macro 'BAZ' expects 3 arguments */ BAZ(,2,3); BARVAR(); FOOVAR(1); BAZVAR(1,2,3); return 0; } %}
Generated by dwww version 1.15 on Tue Jul 2 00:38:13 CEST 2024.