|
10 | 10 |
|
11 | 11 | /* definitions */ |
12 | 12 |
|
| 13 | +/* Common macro functions */ |
| 14 | +#define is_newline(c) (c == '\r' || c == '\n') |
| 15 | + |
13 | 16 | /* Limitations */ |
14 | 17 | #define MAX_TOKEN_LEN 256 |
15 | 18 | #define MAX_ID_LEN 64 |
|
26 | 29 | #define MAX_BB_DOM_SUCC 64 |
27 | 30 | #define MAX_BB_RDOM_SUCC 256 |
28 | 31 | #define MAX_GLOBAL_IR 256 |
29 | | -#define MAX_SOURCE 1048576 |
30 | 32 | #define MAX_CODE 262144 |
31 | 33 | #define MAX_DATA 262144 |
32 | 34 | #define MAX_SYMTAB 65536 |
33 | 35 | #define MAX_STRTAB 65536 |
34 | 36 | #define MAX_HEADER 1024 |
35 | 37 | #define MAX_PROGRAM_HEADER 1024 |
36 | 38 | #define MAX_SECTION 1024 |
37 | | -#define MAX_ALIASES 128 |
38 | 39 | #define MAX_SECTION_HEADER 1024 |
39 | 40 | #define MAX_SHSTR 1024 |
40 | 41 | #define MAX_INTERP 1024 |
|
56 | 57 | #define SMALL_ARENA_SIZE 65536 /* 64 KiB - for small allocations */ |
57 | 58 | #define LARGE_ARENA_SIZE 524288 /* 512 KiB - for instruction arena */ |
58 | 59 | #define DEFAULT_FUNCS_SIZE 64 |
59 | | -#define DEFAULT_INCLUSIONS_SIZE 16 |
| 60 | +#define DEFAULT_SRC_FILE_COUNT 8 |
60 | 61 |
|
61 | 62 | /* Arena compaction bitmask flags for selective memory reclamation */ |
62 | 63 | #define COMPACT_ARENA_BLOCK 0x01 /* BLOCK_ARENA - variables/blocks */ |
@@ -131,6 +132,7 @@ typedef struct { |
131 | 132 | /* lexer tokens */ |
132 | 133 | typedef enum { |
133 | 134 | T_start, /* FIXME: Unused, intended for lexer state machine init */ |
| 135 | + T_eof, /* end-of-file (EOF) */ |
134 | 136 | T_numeric, |
135 | 137 | T_identifier, |
136 | 138 | T_comma, /* , */ |
@@ -179,7 +181,6 @@ typedef enum { |
179 | 181 | T_question, /* ? */ |
180 | 182 | T_colon, /* : */ |
181 | 183 | T_semicolon, /* ; */ |
182 | | - T_eof, /* end-of-file (EOF) */ |
183 | 184 | T_ampersand, /* & */ |
184 | 185 | T_return, |
185 | 186 | T_if, |
@@ -211,38 +212,36 @@ typedef enum { |
211 | 212 | T_cppd_endif, |
212 | 213 | T_cppd_ifdef, |
213 | 214 | T_cppd_ifndef, |
214 | | - T_cppd_pragma |
215 | | -} token_t; |
| 215 | + T_cppd_pragma, |
| 216 | + /* C pre-processor specific, these kinds |
| 217 | + * will be removed after pre-processing is done. |
| 218 | + */ |
| 219 | + T_newline, |
| 220 | + T_backslash, |
| 221 | + T_whitespace, |
| 222 | + T_tab |
| 223 | +} token_kind_t; |
216 | 224 |
|
217 | 225 | /* Source location tracking for better error reporting */ |
218 | 226 | typedef struct { |
| 227 | + int pos; /* raw source file position */ |
| 228 | + int len; /* length of token */ |
219 | 229 | int line; |
220 | 230 | int column; |
221 | 231 | char *filename; |
222 | 232 | } source_location_t; |
223 | 233 |
|
224 | | -/* Token structure with metadata for enhanced lexing */ |
225 | | -typedef struct token_info { |
226 | | - token_t type; |
227 | | - char value[MAX_TOKEN_LEN]; |
| 234 | +typedef struct token { |
| 235 | + token_kind_t kind; |
| 236 | + char *literal; |
228 | 237 | source_location_t location; |
229 | | - struct token_info *next; /* For freelist management */ |
230 | | -} token_info_t; |
231 | | - |
232 | | -/* Token freelist for memory reuse */ |
233 | | -typedef struct { |
234 | | - token_info_t *freelist; |
235 | | - int allocated_count; |
236 | | -} token_pool_t; |
| 238 | + struct token *next; |
| 239 | +} token_t; |
237 | 240 |
|
238 | | -/* Token buffer for improved lookahead */ |
239 | | -#define TOKEN_BUFFER_SIZE 8 |
240 | | -typedef struct { |
241 | | - token_info_t *tokens[TOKEN_BUFFER_SIZE]; |
242 | | - int head; |
243 | | - int tail; |
244 | | - int count; |
245 | | -} token_buffer_t; |
| 241 | +typedef struct token_stream { |
| 242 | + token_t *head; |
| 243 | + token_t *tail; |
| 244 | +} token_stream_t; |
246 | 245 |
|
247 | 246 | /* String pool for identifier deduplication */ |
248 | 247 | typedef struct { |
@@ -387,7 +386,7 @@ struct var { |
387 | 386 | int in_loop; |
388 | 387 | struct var *base; |
389 | 388 | int subscript; |
390 | | - struct var *subscripts[64]; |
| 389 | + struct var *subscripts[128]; |
391 | 390 | int subscripts_idx; |
392 | 391 | rename_t rename; |
393 | 392 | ref_block_list_t ref_block_list; /* blocks which kill variable */ |
@@ -417,25 +416,13 @@ struct var { |
417 | 416 | bool is_compound_literal; |
418 | 417 | }; |
419 | 418 |
|
420 | | -typedef struct { |
421 | | - char name[MAX_VAR_LEN]; |
422 | | - bool is_variadic; |
423 | | - int start_source_idx; |
424 | | - var_t param_defs[MAX_PARAMS]; |
425 | | - int num_param_defs; |
426 | | - int params[MAX_PARAMS]; |
427 | | - int num_params; |
428 | | - bool disabled; |
429 | | -} macro_t; |
430 | | - |
431 | 419 | typedef struct func func_t; |
432 | 420 |
|
433 | 421 | /* block definition */ |
434 | 422 | struct block { |
435 | 423 | var_list_t locals; |
436 | 424 | struct block *parent; |
437 | 425 | func_t *func; |
438 | | - macro_t *macro; |
439 | 426 | struct block *next; |
440 | 427 | }; |
441 | 428 |
|
@@ -499,13 +486,6 @@ typedef struct { |
499 | 486 | type_t *type; |
500 | 487 | } lvalue_t; |
501 | 488 |
|
502 | | -/* alias for #defines */ |
503 | | -typedef struct { |
504 | | - char alias[MAX_VAR_LEN]; |
505 | | - char value[MAX_VAR_LEN]; |
506 | | - bool disabled; |
507 | | -} alias_t; |
508 | | - |
509 | 489 | /* constants for enums */ |
510 | 490 | typedef struct { |
511 | 491 | char alias[MAX_VAR_LEN]; |
|
0 commit comments