2 ** C declaration parser.
3 ** Copyright (C) 2005-2011 Mike Pall. See Copyright Notice in luajit.h
14 /* C parser limits. */
15 #define CPARSE_MAX_BUF 32768 /* Max. token buffer size. */
16 #define CPARSE_MAX_DECLSTACK 100 /* Max. declaration stack depth. */
17 #define CPARSE_MAX_DECLDEPTH 20 /* Max. recursive declaration depth. */
18 #define CPARSE_MAX_PACKSTACK 7 /* Max. pack pragma stack depth. */
20 /* Flags for C parser mode. */
21 #define CPARSE_MODE_MULTI 1 /* Process multiple declarations. */
22 #define CPARSE_MODE_ABSTRACT 2 /* Accept abstract declarators. */
23 #define CPARSE_MODE_DIRECT 4 /* Accept direct declarators. */
24 #define CPARSE_MODE_FIELD 8 /* Accept field width in bits, too. */
25 #define CPARSE_MODE_NOIMPLICIT 16 /* Reject implicit declarations. */
27 typedef int CPChar
; /* C parser character. Unsigned ext. from char. */
28 typedef int CPToken
; /* C parser token. */
30 /* C parser internal value representation. */
31 typedef struct CPValue
{
33 int32_t i32
; /* Value for CTID_INT32. */
34 uint32_t u32
; /* Value for CTID_UINT32. */
36 CTypeID id
; /* C Type ID of the value. */
40 typedef struct CPState
{
41 CPChar c
; /* Current character. */
42 CPToken tok
; /* Current token. */
43 CPValue val
; /* Token value. */
44 GCstr
*str
; /* Interned string of identifier/keyword. */
45 CType
*ct
; /* C type table entry. */
46 const char *p
; /* Current position in input buffer. */
47 SBuf sb
; /* String buffer for tokens. */
48 lua_State
*L
; /* Lua state. */
49 CTState
*cts
; /* C type state. */
50 const char *srcname
; /* Current source name. */
51 BCLine linenumber
; /* Input line counter. */
52 int depth
; /* Recursive declaration depth. */
53 uint32_t tmask
; /* Type mask for next identifier. */
54 uint32_t mode
; /* C parser mode. */
55 uint8_t packstack
[CPARSE_MAX_PACKSTACK
]; /* Stack for pack pragmas. */
56 uint8_t curpack
; /* Current position in pack pragma stack. */
59 LJ_FUNC
int lj_cparse(CPState
*cp
);