diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-09-01 23:44:51 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-09-01 23:55:56 +0900 |
| commit | 09a245679c8d01eaec71b22985a9895667280cad (patch) | |
| tree | f77024dbfb3f69d48bed3c7faaae994d0d9a173d /src/preprocess.c | |
| parent | 5c1716417609ac2cea1470b3d3bb38a6e758279a (diff) | |
| download | ducc-09a245679c8d01eaec71b22985a9895667280cad.tar.gz ducc-09a245679c8d01eaec71b22985a9895667280cad.tar.zst ducc-09a245679c8d01eaec71b22985a9895667280cad.zip | |
feat: partially support anonymous structs/unions/enums
Diffstat (limited to 'src/preprocess.c')
| -rw-r--r-- | src/preprocess.c | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/src/preprocess.c b/src/preprocess.c index 4b2bdaf..2fd334f 100644 --- a/src/preprocess.c +++ b/src/preprocess.c @@ -3,14 +3,13 @@ #include "parse.h" #include "sys.h" -enum MacroKind { +typedef enum { MacroKind_undef, MacroKind_obj, MacroKind_func, MacroKind_builtin_file, MacroKind_builtin_line, -}; -typedef enum MacroKind MacroKind; +} MacroKind; const char* macro_kind_stringify(MacroKind kind) { if (kind == MacroKind_undef) @@ -27,13 +26,12 @@ const char* macro_kind_stringify(MacroKind kind) { unreachable(); } -struct Macro { +typedef struct { MacroKind kind; const char* name; TokenArray parameters; TokenArray replacements; -}; -typedef struct Macro Macro; +} Macro; static int macro_find_param(Macro* macro, Token* tok) { if (tok->kind != TokenKind_ident) @@ -47,12 +45,11 @@ static int macro_find_param(Macro* macro, Token* tok) { return -1; } -struct MacroArray { +typedef struct { size_t len; size_t capacity; Macro* data; -}; -typedef struct MacroArray MacroArray; +} MacroArray; static MacroArray* macros_new() { MacroArray* macros = calloc(1, sizeof(MacroArray)); @@ -104,10 +101,9 @@ static void add_predefined_macros(MacroArray* macros) { define_macro_to_1(macros, "__LP64__"); } -struct MacroArg { +typedef struct { TokenArray tokens; -}; -typedef struct MacroArg MacroArg; +} MacroArg; void macroarg_build_json(JsonBuilder* builder, MacroArg* arg) { jsonbuilder_object_start(builder); @@ -117,12 +113,11 @@ void macroarg_build_json(JsonBuilder* builder, MacroArg* arg) { jsonbuilder_object_end(builder); } -struct MacroArgArray { +typedef struct { size_t len; size_t capacity; MacroArg* data; -}; -typedef struct MacroArgArray MacroArgArray; +} MacroArgArray; static MacroArgArray* macroargs_new() { MacroArgArray* macroargs = calloc(1, sizeof(MacroArgArray)); @@ -164,13 +159,12 @@ void macroargs_build_json(JsonBuilder* builder, MacroArgArray* macroargs) { jsonbuilder_object_end(builder); } -struct PpLexer { +typedef struct { InFile* src; BOOL at_bol; BOOL expect_header_name; TokenArray* pp_tokens; -}; -typedef struct PpLexer PpLexer; +} PpLexer; static PpLexer* pplexer_new(InFile* src) { PpLexer* ppl = calloc(1, sizeof(PpLexer)); @@ -559,15 +553,14 @@ static TokenArray* pp_tokenize(InFile* src) { return ppl->pp_tokens; } -struct Preprocessor { +typedef struct { TokenArray* pp_tokens; int pos; MacroArray* macros; int include_depth; StrArray include_paths; StrArray* included_files; -}; -typedef struct Preprocessor Preprocessor; +} Preprocessor; static TokenArray* do_preprocess(InFile* src, int depth, MacroArray* macros, StrArray* included_files); @@ -969,12 +962,11 @@ static BOOL expand_macro(Preprocessor* pp, BOOL skip_newline) { return TRUE; } -enum GroupDelimiterKind { +typedef enum { GroupDelimiterKind_normal, GroupDelimiterKind_after_if_directive, GroupDelimiterKind_after_else_directive, -}; -typedef enum GroupDelimiterKind GroupDelimiterKind; +} GroupDelimiterKind; static BOOL is_delimiter_of_current_group(GroupDelimiterKind delimiter_kind, TokenKind token_kind) { if (delimiter_kind == GroupDelimiterKind_normal) { |
