File: preproc_constants.i

package info (click to toggle)
swig 4.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 46,232 kB
  • sloc: cpp: 54,631; ansic: 29,122; java: 17,530; python: 12,505; cs: 10,369; ruby: 7,232; yacc: 6,477; makefile: 5,965; javascript: 5,520; sh: 5,415; perl: 4,187; php: 3,693; ml: 2,187; lisp: 2,056; tcl: 1,991; xml: 115
file content (141 lines) | stat: -rw-r--r-- 3,754 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
%module preproc_constants

#ifdef SWIGCSHARP
%csconst(1) CONST_STRING4;
#endif
#ifdef SWIGD
%dmanifestconst CONST_STRING4;
#endif
#ifdef SWIGJAVA
%javaconst(1) CONST_STRING4;
#endif

%{
#if defined(__clang__)
//Suppress: warning: use of logical '&&' with constant operand [-Wconstant-logical-operand]
#pragma clang diagnostic ignored "-Wconstant-logical-operand"
#endif
%}

// Note: C types are slightly different to C++ types as (a && b) is int in C and bool in C++

// Simple constants
#define CONST_INT1      10
#define CONST_INT2      0xFF

#define CONST_UINT1     10u
#define CONST_UINT2     10U
#define CONST_UINT3     0xFFu
#define CONST_UINT4     0xFFU

#define CONST_LONG1     10l
#define CONST_LONG2     10L
#define CONST_LONG3     0xFFl
#define CONST_LONG4     0xFFL

#define CONST_LLONG1    10LL
#define CONST_LLONG2    10ll
#define CONST_LLONG3    0xFFll
#define CONST_LLONG4    0xFFLL

#define CONST_ULLONG1   10ull
#define CONST_ULLONG2   10ULL
#define CONST_ULLONG3   0xFFull
#define CONST_ULLONG4   0xFFULL

#define CONST_DOUBLE1   10e1
#define CONST_DOUBLE2   10E1
#define CONST_DOUBLE3   12.3
#define CONST_DOUBLE4   12.

#define CONST_FLOAT1    12.3f
#define CONST_FLOAT2    12.3F

#define CONST_BOOL1     true
#define CONST_BOOL2     false

#define CONST_CHAR      'x'
#define CONST_STRING1   "const string"
#define CONST_STRING2   "const" " string"
#define CONST_STRING3   "log-revprops"
// Ideally we shouldn't truncate at a zero byte in target languages where the
// native string type allows strings to contain a zero byte.
#define CONST_STRING4   "zer\0" "zer\0"

// Expressions - runtime tests check the type for any necessary type promotions of the expressions

#define INT_AND_BOOL    0xFF & true
#define INT_AND_CHAR    0xFF & 'A'
#define INT_AND_INT     0xFF & 2
#define INT_AND_UINT    0xFF & 2u
#define INT_AND_LONG    0xFF & 2l
#define INT_AND_ULONG   0xFF & 2ul
#define INT_AND_LLONG   0xFF & 2ll
#define INT_AND_ULLONG  0xFF & 2ull

#define BOOL_AND_BOOL   true & true // Note integral promotion to type int
#define CHAR_AND_CHAR   'A' & 'B'   // Note integral promotion to type int 


#define EXPR_MULTIPLY    0xFF * 2
#define EXPR_DIVIDE      0xFF / 2
#define EXPR_MOD         0xFF % 2

#define EXPR_PLUS        0xFF + 2
#define EXPR_MINUS       0xFF - 2

#define EXPR_LSHIFT      0xFF << 2
#define EXPR_RSHIFT      0xFF >> 2
#define EXPR_LT          (0xFF < 255)
#define EXPR_GT          (0xFF > 255)
#define EXPR_LTE         0xFF <= 255
#define EXPR_GTE         0xFF >= 255
#define EXPR_INEQUALITY  0xFF != 255
#define EXPR_EQUALITY    0xFF == 255
#define EXPR_AND         0xFF & 1
#define EXPR_XOR         0xFF ^ 1
#define EXPR_OR          0xFF | 1
#define EXPR_LAND        0xFF && 1
#define EXPR_LOR         0xFF || 1
#define EXPR_CONDITIONAL true ? 2 : 2.2
#define EXPR_MIXED1      (0x80 + 11.1) - 1

#define EXPR_WCHAR_MAX   (0x7fffffff + L'\0')
#define EXPR_WCHAR_MIN   (-EXPR_WCHAR_MAX - 1)

#define EXPR_CHAR_COMPOUND_ADD 'A' + 12
#define EXPR_CHAR_COMPOUND_LSHIFT 'B' << 6
#define H_SUPPRESS_SCALING_MAGIC (('s'<<24) | ('u'<<16) | ('p'<<8) | 'p')

// https://sourceforge.net/p/swig/bugs/1168/
#define CHR(ch1,ch2,ch3,ch4) (((ch1)<<24)|((ch2)<<16)|((ch3)<<8)|(ch4))
#define DEFAULT_LANG CHR('d','f','l','t')
%constant DEFAULT_LANG_SIMPLIFIED = ('d')<<24;

/// constant assignment in enum
#if defined(SWIGCSHARP)
%csconstvalue("1<<2") kValue;
#elif defined(SWIGD)
%dconstvalue("1<<2") kValue;
#endif

%{
#define BIT(n) (1ULL << (n))

enum MyEnum {
  kValue = BIT(2)
};
%}

#define BIT(n) (1ULL << (n))

enum MyEnum {
  kValue = BIT(2)
};

// For detecting when test-suite is run with SWIGWORDSIZE64 defined
#ifdef SWIGWORDSIZE64
#define SWIGWORDSIZE64_enabled 1
#else
#define SWIGWORDSIZE64_enabled 0
#endif