mirror of https://github.com/swig/swig
126 lines
2.0 KiB
OpenEdge ABL
126 lines
2.0 KiB
OpenEdge ABL
%module preproc_defined
|
|
|
|
// Check 'defined' passes through the preprocessor without being processed like '#if defined(ABC)' would be (SF bug #1940536)
|
|
|
|
%define DEFINED_MACRO
|
|
%{
|
|
int defined(int b) {
|
|
return b > 10;
|
|
}
|
|
int vvv = -1;
|
|
void fn(int val) {
|
|
if (defined(val))
|
|
vvv = 1;
|
|
else
|
|
vvv = 0;
|
|
}
|
|
%}
|
|
%enddef
|
|
|
|
DEFINED_MACRO
|
|
|
|
%{
|
|
int checking(void) {
|
|
int okay;
|
|
fn(11);
|
|
okay = (vvv == 1);
|
|
fn(9);
|
|
okay = okay && (vvv == 0);
|
|
return okay; /* should be 1 */
|
|
}
|
|
%}
|
|
|
|
%inline %{
|
|
int call_checking(void) {
|
|
return checking();
|
|
}
|
|
%}
|
|
|
|
/*****************************************************************************/
|
|
/* Check #if/#elif defined() macro expansions
|
|
Also checks #if/#elif defined() works correctly within macros... this is not
|
|
standard C, but is now relied on in the SWIG library. */
|
|
/*****************************************************************************/
|
|
|
|
#define AAA
|
|
#define BBB
|
|
#define CCC
|
|
|
|
#if defined(AAA)\
|
|
&& defined(BBB) \
|
|
&& defined(CCC)
|
|
%{
|
|
void thing(int i) {}
|
|
void stuff(int i) {}
|
|
struct Defined {
|
|
int defined;
|
|
};
|
|
void bumpf(int i) {}
|
|
%}
|
|
#else
|
|
#endif
|
|
|
|
%define ANOTHER_MACRO(TYPE)
|
|
|
|
#if defined(AAA) && defined(BBB) && defined(CCC)
|
|
void thing(TYPE) {}
|
|
#else
|
|
void thing_not(TYPE) {}
|
|
#endif
|
|
|
|
#if defined(AAA) &&\
|
|
defined(BBB) \\
|
|
&& defined(CCC)
|
|
void stuff(TYPE) {}
|
|
#else
|
|
void stuff_not(TYPE);
|
|
#endif
|
|
|
|
#if defined(0)
|
|
void defined_not(TYPE);
|
|
#elif defined(AAA) && defined( BBB ) && defined(CCC)
|
|
struct Defined {
|
|
int defined;
|
|
};
|
|
#else
|
|
void defined_not(TYPE);
|
|
#endif
|
|
|
|
#if !( defined(AAA) \
|
|
defined(BBB) \\
|
|
&& defined(CCC) )
|
|
void bumpf_not(TYPE);
|
|
#else
|
|
void bumpf(TYPE) {}
|
|
#endif
|
|
|
|
%enddef
|
|
|
|
ANOTHER_MACRO(int)
|
|
|
|
%{
|
|
void another_macro_checking(void) {
|
|
struct Defined d;
|
|
d.defined = 10;
|
|
(void)d;
|
|
thing(10);
|
|
stuff(10);
|
|
bumpf(10);
|
|
}
|
|
%}
|
|
|
|
/* Check that unknown preprocessor directives are ignored inside an inactive
|
|
* conditional (github issue #394).
|
|
*/
|
|
#ifdef APPLE_OPENGL
|
|
# import <OpenGLES/ES1/gl.h>
|
|
#endif
|
|
#ifdef AAA
|
|
# define B
|
|
#else
|
|
# wibble wibble
|
|
#endif
|
|
#if 0
|
|
# wobble wobble
|
|
#endif
|