P99
Main Page
Related Pages
Modules
Data Structures
Data Structures
Data Structure Index
Data Fields
All
a
c
d
e
f
i
l
m
n
r
s
t
w
Functions
c
e
f
i
n
r
Variables
Typedefs
Related Functions
Files
File List
Globals
All
0
1
2
3
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Functions
_
a
b
c
d
e
f
i
j
l
m
n
p
r
s
t
u
v
w
Variables
Typedefs
_
b
c
d
e
f
i
l
m
o
p
r
s
t
u
v
Enumerations
Enumerator
Macros
0
1
2
3
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Examples
•
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
p99
p99_classification.h
Go to the documentation of this file.
1
/* This may look like nonsense, but it really is -*- mode: C; coding: utf-8 -*- */
2
/* */
3
/* Except for parts copied from previous work and as explicitly stated below, */
4
/* the authors and copyright holders for this work are as follows: */
5
/* (C) copyright 2010-2011 Jens Gustedt, INRIA, France */
6
/* (C) copyright 2012 William Morris */
7
/* */
8
/* This file is free software; it is part of the P99 project. */
9
/* */
10
/* Licensed under the Apache License, Version 2.0 (the "License"); */
11
/* you may not use this file except in compliance with the License. */
12
/* You may obtain a copy of the License at */
13
/* */
14
/* http://www.apache.org/licenses/LICENSE-2.0 */
15
/* */
16
/* Unless required by applicable law or agreed to in writing, software */
17
/* distributed under the License is distributed on an "AS IS" BASIS, */
18
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
19
/* See the License for the specific language governing permissions and */
20
/* limitations under the License. */
21
/* */
22
#ifndef P99_CLASSIFICATION_H_
23
# define P99_CLASSIFICATION_H_
24
25
#include "
p99_map.h
"
26
47
#define P00_BUILTIN_TYPE_V P00_BUILTIN_TYPE_v
48
#define P00_BUILTIN_TYPE_B P00_BUILTIN_TYPE_b
49
#define P00_BUILTIN_TYPE_C P00_BUILTIN_TYPE_c
50
#define P00_BUILTIN_TYPE_D P00_BUILTIN_TYPE_d
51
#define P00_BUILTIN_TYPE_DC P00_BUILTIN_TYPE_dc
52
#define P00_BUILTIN_TYPE_DI P00_BUILTIN_TYPE_di
53
#define P00_BUILTIN_TYPE_Dc P00_BUILTIN_TYPE_dc
54
/* #define P00_BUILTIN_TYPE_Di P00_BUILTIN_TYPE_di */
55
#define P00_BUILTIN_TYPE_F P00_BUILTIN_TYPE_f
56
#define P00_BUILTIN_TYPE_FC P00_BUILTIN_TYPE_fc
57
#define P00_BUILTIN_TYPE_FI P00_BUILTIN_TYPE_fi
58
#define P00_BUILTIN_TYPE_Fc P00_BUILTIN_TYPE_fc
59
/* #define P00_BUILTIN_TYPE_Fi P00_BUILTIN_TYPE_fi */
60
#define P00_BUILTIN_TYPE_H P00_BUILTIN_TYPE_h
61
#define P00_BUILTIN_TYPE_HH P00_BUILTIN_TYPE_hh
62
#define P00_BUILTIN_TYPE_Hh P00_BUILTIN_TYPE_hh
63
#define P00_BUILTIN_TYPE_I P00_BUILTIN_TYPE_i
64
#define P00_BUILTIN_TYPE_L P00_BUILTIN_TYPE_l
65
#define P00_BUILTIN_TYPE_LD P00_BUILTIN_TYPE_ld
66
#define P00_BUILTIN_TYPE_LDC P00_BUILTIN_TYPE_ldc
67
#define P00_BUILTIN_TYPE_LDI P00_BUILTIN_TYPE_ldi
68
#define P00_BUILTIN_TYPE_LDc P00_BUILTIN_TYPE_ldc
69
/* #define P00_BUILTIN_TYPE_LDi P00_BUILTIN_TYPE_ldi */
70
#define P00_BUILTIN_TYPE_LL P00_BUILTIN_TYPE_ll
71
#define P00_BUILTIN_TYPE_Ld P00_BUILTIN_TYPE_ld
72
#define P00_BUILTIN_TYPE_LdC P00_BUILTIN_TYPE_ldc
73
/* #define P00_BUILTIN_TYPE_LdI P00_BUILTIN_TYPE_ldi */
74
#define P00_BUILTIN_TYPE_Ldc P00_BUILTIN_TYPE_ldc
75
/* #define P00_BUILTIN_TYPE_Ldi P00_BUILTIN_TYPE_ldi */
76
#define P00_BUILTIN_TYPE_Ll P00_BUILTIN_TYPE_ll
77
#define P00_BUILTIN_TYPE_U P00_BUILTIN_TYPE_u
78
#define P00_BUILTIN_TYPE_UH P00_BUILTIN_TYPE_uh
79
#define P00_BUILTIN_TYPE_UHH P00_BUILTIN_TYPE_uhh
80
#define P00_BUILTIN_TYPE_UHh P00_BUILTIN_TYPE_uhh
81
#define P00_BUILTIN_TYPE_UL P00_BUILTIN_TYPE_ul
82
#define P00_BUILTIN_TYPE_ULL P00_BUILTIN_TYPE_ull
83
#define P00_BUILTIN_TYPE_ULl P00_BUILTIN_TYPE_ull
84
#define P00_BUILTIN_TYPE_Uh P00_BUILTIN_TYPE_uh
85
#define P00_BUILTIN_TYPE_UhH P00_BUILTIN_TYPE_uhh
86
#define P00_BUILTIN_TYPE_Uhh P00_BUILTIN_TYPE_uhh
87
#define P00_BUILTIN_TYPE_Ul P00_BUILTIN_TYPE_ul
88
#define P00_BUILTIN_TYPE_UlL P00_BUILTIN_TYPE_ull
89
#define P00_BUILTIN_TYPE_Ull P00_BUILTIN_TYPE_ull
90
#define P00_BUILTIN_TYPE_dC P00_BUILTIN_TYPE_dc
91
/* #define P00_BUILTIN_TYPE_dI P00_BUILTIN_TYPE_di */
92
#define P00_BUILTIN_TYPE_fC P00_BUILTIN_TYPE_fc
93
/* #define P00_BUILTIN_TYPE_fI P00_BUILTIN_TYPE_fi */
94
#define P00_BUILTIN_TYPE_hH P00_BUILTIN_TYPE_hh
95
#define P00_BUILTIN_TYPE_lD P00_BUILTIN_TYPE_ld
96
#define P00_BUILTIN_TYPE_lDC P00_BUILTIN_TYPE_ldc
97
/* #define P00_BUILTIN_TYPE_lDI P00_BUILTIN_TYPE_ldi */
98
#define P00_BUILTIN_TYPE_lDc P00_BUILTIN_TYPE_ldc
99
/* #define P00_BUILTIN_TYPE_lDi P00_BUILTIN_TYPE_ldi */
100
#define P00_BUILTIN_TYPE_lL P00_BUILTIN_TYPE_ll
101
#define P00_BUILTIN_TYPE_ldC P00_BUILTIN_TYPE_ldc
102
/* #define P00_BUILTIN_TYPE_ldI P00_BUILTIN_TYPE_ldi */
103
#define P00_BUILTIN_TYPE_uH P00_BUILTIN_TYPE_uh
104
#define P00_BUILTIN_TYPE_uHH P00_BUILTIN_TYPE_uhh
105
#define P00_BUILTIN_TYPE_uHh P00_BUILTIN_TYPE_uhh
106
#define P00_BUILTIN_TYPE_uL P00_BUILTIN_TYPE_ul
107
#define P00_BUILTIN_TYPE_uLL P00_BUILTIN_TYPE_ull
108
#define P00_BUILTIN_TYPE_uLl P00_BUILTIN_TYPE_ull
109
#define P00_BUILTIN_TYPE_uhH P00_BUILTIN_TYPE_uhh
110
#define P00_BUILTIN_TYPE_ulL P00_BUILTIN_TYPE_ull
111
112
113
#define P00_DETECT_PAREN(...) ,
114
118
#define P99_HAS_NO_PAREN(...) \
119
/* Use of P00_NARG is important to avoid false trigger when __VA_ARGS__ is empty */
\
120
P99_IS_EQ(P00_NARG(__VA_ARGS__), P00_NARG(P00_DETECT_PAREN __VA_ARGS__))
121
#define P00_REMOVE_PAREN_(...) __VA_ARGS__
122
123
#define P00_REMOVE_PAREN(ARG) P00_REMOVE_PAREN_ ARG
124
128
#define P99_REMOVE_PAREN(...) \
129
P99_IF_ELSE(P99_HAS_NO_PAREN(__VA_ARGS__))(__VA_ARGS__)(P00_REMOVE_PAREN(__VA_ARGS__))
130
131
#define P00_TYPE_NORMALIZE_(CODE, CONS, VOLA, SEQ) \
132
P99_IF_EMPTY(CODE) \
133
(P99_IF_EMPTY(SEQ)(void)(SEQ)) \
134
(P99_BUILTIN_TYPE(CODE) \
135
CONS \
136
VOLA \
137
)
138
139
#define P00_TYPE_NORMALIZE(N, CODE, SEQ) \
140
P00_TYPE_NORMALIZE_(CODE, \
141
P00_CONST_CLASSIFY_(N, SEQ), \
142
P00_VOLATILE_CLASSIFY_(N, SEQ), \
143
SEQ \
144
)
145
152
#define P99_VOID_NORMALIZE(SEQ) \
153
P00_TYPE_NORMALIZE(P99_VOID_QUAL_LEN(SEQ), P00_VOID_CLASSIFY(SEQ), SEQ)
154
162
#define P99_BOOL_NORMALIZE(SEQ) \
163
P00_TYPE_NORMALIZE(P99_BOOL_QUAL_LEN(SEQ), P00_BOOL_CLASSIFY(SEQ), SEQ)
164
175
#define P99_INTEGER_NORMALIZE(SEQ) \
176
P00_TYPE_NORMALIZE(P99_INTEGER_QUAL_LEN(SEQ), P00_INTEGER_CLASSIFY(SEQ), SEQ)
177
189
#define P99_FLOAT_NORMALIZE(SEQ) \
190
P00_TYPE_NORMALIZE(P99_FLOAT_QUAL_LEN(SEQ), P00_FLOAT_CLASSIFY(SEQ), SEQ)
191
192
199
#endif
/* !P99_CLASSIFICATION_H_ */
p99_map.h
macros to produce lists of statements or declarations.
Generated by
1.8.17