~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/libs/wpp/wpp_private.h

Version: ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  * Copyright 1998 Bertho A. Stultiens (BS)
  3  * Copyright 2002 Alexandre Julliard
  4  *
  5  * This library is free software; you can redistribute it and/or
  6  * modify it under the terms of the GNU Lesser General Public
  7  * License as published by the Free Software Foundation; either
  8  * version 2.1 of the License, or (at your option) any later version.
  9  *
 10  * This library is distributed in the hope that it will be useful,
 11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 13  * Lesser General Public License for more details.
 14  *
 15  * You should have received a copy of the GNU Lesser General Public
 16  * License along with this library; if not, write to the Free Software
 17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 18  */
 19 
 20 #ifndef __WINE_WPP_PRIVATE_H
 21 #define __WINE_WPP_PRIVATE_H
 22 
 23 #ifndef __WINE_CONFIG_H
 24 # error You must include config.h to use this header
 25 #endif
 26 
 27 #include <stdio.h>
 28 #include <string.h>
 29 
 30 struct pp_entry;        /* forward */
 31 /*
 32  * Include logic
 33  * A stack of files which are already included and
 34  * are protected in the #ifndef/#endif way.
 35  */
 36 typedef struct includelogicentry {
 37         struct includelogicentry *next;
 38         struct includelogicentry *prev;
 39         struct pp_entry *ppp;           /* The define which protects the file */
 40         char            *filename;      /* The filename of the include */
 41 } includelogicentry_t;
 42 
 43 /*
 44  * The arguments of a macrodefinition
 45  */
 46 typedef enum {
 47         arg_single,
 48         arg_list
 49 } def_arg_t;
 50 
 51 typedef struct marg {
 52         def_arg_t       type;   /* Normal or ... argument */
 53         char            *arg;   /* The textual argument */
 54         int             nnl;    /* Number of newlines in the text to subst */
 55 } marg_t;
 56 
 57 /*
 58  * The expansiontext of a macro
 59  */
 60 typedef enum {
 61         exp_text,       /* Simple text substitution */
 62         exp_concat,     /* Concat (##) operator requested */
 63         exp_stringize,  /* Stringize (#) operator requested */
 64         exp_subst       /* Substitute argument */
 65 } def_exp_t;
 66 
 67 typedef struct mtext {
 68         struct mtext    *next;
 69         struct mtext    *prev;
 70         def_exp_t       type;
 71         union {
 72                 char    *text;
 73                 int     argidx;         /* For exp_subst and exp_stringize reference */
 74         } subst;
 75 } mtext_t;
 76 
 77 /*
 78  * The define descriptor
 79  */
 80 typedef enum {
 81         def_none,       /* Not-a-define; used as return value */
 82         def_define,     /* Simple defines */
 83         def_macro,      /* Macro defines */
 84         def_special     /* Special expansions like __LINE__ and __FILE__ */
 85 } def_type_t;
 86 
 87 typedef struct pp_entry {
 88         struct pp_entry *next;
 89         struct pp_entry *prev;
 90         def_type_t      type;           /* Define or macro */
 91         char            *ident;         /* The key */
 92         marg_t          **margs;        /* Macro arguments array or NULL if none */
 93         int             nargs;
 94         union {
 95                 mtext_t *mtext;         /* The substitution sequence or NULL if none */
 96                 char    *text;
 97         } subst;
 98         int             expanding;      /* Set when feeding substitution into the input */
 99         char            *filename;      /* Filename where it was defined */
100         int             linenumber;     /* Linenumber where it was defined */
101         includelogicentry_t *iep;       /* Points to the include it protects */
102 } pp_entry_t;
103 
104 
105 /*
106  * If logic
107  */
108 #define MAXIFSTACK      64      /* If this isn't enough you should alter the source... */
109 
110 typedef enum {
111         if_false,
112         if_true,
113         if_elif,
114         if_elsefalse,
115         if_elsetrue,
116         if_ignore,
117         if_error
118 } pp_if_state_t;
119 
120 
121 /*
122  * Trace the include files to prevent double reading.
123  * This save 20..30% of processing time for most stuff
124  * that uses complex includes.
125  * States:
126  * -1   Don't track or seen junk
127  *  0   New include, waiting for "#ifndef __xxx_h"
128  *  1   Seen #ifndef, waiting for "#define __xxx_h ..."
129  *  2   Seen #endif, waiting for EOF
130  */
131 typedef struct
132 {
133     int state;
134     char *ppp;             /* The define to be set from the #ifndef */
135     int ifdepth;           /* The level of ifs at the #ifdef */
136     int seen_junk;         /* Set when junk is seen */
137 } include_state_t;
138 
139 
140 /*
141  * If the configure says we have long long then we can use it.  Presumably
142  * if we have long long then we have strtoull and strtoll too.  If that is
143  * not the case we will need to add to the configure tests.
144  * If we do not have long long , then we revert to a simple 'long' for now.
145  * This should prevent most unexpected things with other compilers than
146  * gcc and egcs for now.
147  * In the future it should be possible to use another way, like a
148  * structure, so that we can emulate the MS compiler.
149  */
150 #ifdef HAVE_LONG_LONG
151 typedef long long wrc_sll_t;
152 typedef unsigned long long wrc_ull_t;
153 #else
154 typedef long wrc_sll_t;
155 typedef unsigned long wrc_ull_t;
156 #endif
157 
158 #define SIZE_CHAR       1
159 #define SIZE_SHORT      2
160 #define SIZE_INT        3
161 #define SIZE_LONG       4
162 #define SIZE_LONGLONG   5
163 #define SIZE_MASK       0x00ff
164 #define FLAG_SIGNED     0x0100
165 
166 typedef enum {
167 #if 0
168         cv_schar  = SIZE_CHAR + FLAG_SIGNED,
169         cv_uchar  = SIZE_CHAR,
170         cv_sshort = SIZE_SHORT + FLAG_SIGNED,
171         cv_ushort = SIZE_SHORT,
172 #endif
173         cv_sint   = SIZE_INT + FLAG_SIGNED,
174         cv_uint   = SIZE_INT,
175         cv_slong  = SIZE_LONG + FLAG_SIGNED,
176         cv_ulong  = SIZE_LONG,
177         cv_sll    = SIZE_LONGLONG + FLAG_SIGNED,
178         cv_ull    = SIZE_LONGLONG
179 } ctype_t;
180 
181 typedef struct cval {
182         ctype_t type;
183         union {
184 #if 0
185                 signed char     sc;     /* Explicitly signed because compilers are stupid */
186                 unsigned char   uc;
187                 short           ss;
188                 unsigned short  us;
189 #endif
190                 int             si;
191                 unsigned int    ui;
192                 long            sl;
193                 unsigned long   ul;
194                 wrc_sll_t       sll;
195                 wrc_ull_t       ull;
196         } val;
197 } cval_t;
198 
199 
200 
201 void *pp_xmalloc(size_t);
202 void *pp_xrealloc(void *, size_t);
203 char *pp_xstrdup(const char *str);
204 pp_entry_t *pplookup(const char *ident);
205 int pp_push_define_state(void);
206 void pp_pop_define_state(void);
207 pp_entry_t *pp_add_define(char *def, char *text);
208 pp_entry_t *pp_add_macro(char *ident, marg_t *args[], int nargs, mtext_t *exp);
209 void pp_del_define(const char *name);
210 void *pp_open_include(const char *name, const char *parent_name, char **newpath);
211 void pp_push_if(pp_if_state_t s);
212 void pp_next_if_state(int);
213 pp_if_state_t pp_pop_if(void);
214 pp_if_state_t pp_if_state(void);
215 int pp_get_if_depth(void);
216 
217 #ifndef __GNUC__
218 #define __attribute__(x)  /*nothing*/
219 #endif
220 
221 extern const struct wpp_callbacks *wpp_callbacks;
222 
223 int ppy_error(const char *s, ...) __attribute__((format (printf, 1, 2)));
224 int ppy_warning(const char *s, ...) __attribute__((format (printf, 1, 2)));
225 void pp_internal_error(const char *file, int line, const char *s, ...) __attribute__((format (printf, 3, 4)));
226 
227 /* current preprocessor state */
228 /* everything is in this structure to avoid polluting the global symbol space */
229 struct pp_status
230 {
231     const char *input;  /* current input file name */
232     void *file;         /* current input file descriptor */
233     int line_number;    /* current line number */
234     int char_number;    /* current char number in line */
235     int state;          /* current error state */
236     int pedantic;       /* pedantic option */
237     int debug;          /* debug messages flag */
238 };
239 
240 extern struct pp_status pp_status;
241 extern include_state_t pp_incl_state;
242 extern includelogicentry_t *pp_includelogiclist;
243 
244 /*
245  * From ppl.l
246  */
247 extern FILE *ppy_in;
248 extern FILE *ppy_out;
249 extern char *ppy_text;
250 extern int pp_flex_debug;
251 int ppy_lex(void);
252 
253 void pp_do_include(char *fname, int type);
254 void pp_push_ignore_state(void);
255 void pp_pop_ignore_state(void);
256 
257 void pp_writestring(const char *format, ...) __attribute__((format (printf, 1, 2)));
258 
259 /*
260  * From ppy.y
261  */
262 int ppy_parse(void);
263 extern int ppy_debug;
264 
265 #endif  /* __WINE_WPP_PRIVATE_H */
266 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.