Skip to content

Commit eaf03b6

Browse files
committed
Some Refactoring and adding decl_preproc
1 parent b3169e5 commit eaf03b6

File tree

5 files changed

+40
-10
lines changed

5 files changed

+40
-10
lines changed

TODO

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
2+
high prio: @annotation parsing for parameters and other declarations
3+
4+
===========================================
5+
16
- Forign langauge blocks
27
- Checking for initialisation functions before use of struct
38

make_header/make_header.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#define NO_FIBERS
44
#define NO_SEMANTIC
5+
#define OLD_PARSER
56

67
#include "../os/compat.h"
78
#include "../driver/metac_driver.c"

parser/metac_node.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
\
4040
M(decl_function) \
4141
\
42+
M(decl_preproc) \
43+
\
4244
M(decl_label) \
4345
M(decl_comment)
4446

parser/metac_parser.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1751,18 +1751,24 @@ metac_decl_t* MetaCParser_ParseDecl(metac_parser_t* self, metac_decl_t* parent)
17511751
decl_type_t* type = 0;
17521752

17531753
#ifndef NO_PREPROCESSOR
1754+
decl_preproc_t* preProcDecl = AllocNewDecl(decl_preproc, &result);
1755+
preProcDecl->DirectiveKind = pp_invalid;
1756+
17541757
if (MetaCParser_PeekMatch(self, tok_hash, 1))
17551758
{
17561759
metac_preprocessor_directive_t dirc =
17571760
MetaCParser_ParsePreprocDirective(self, self->Preprocessor);
1761+
preProcDecl->DirectiveKind = dirc;
1762+
17581763
if (dirc == pp_include)
17591764
{
17601765
MetaCPreProcessor_Include(self->Preprocessor, self);
17611766
}
17621767
else if (dirc == pp_define)
17631768
{
1764-
metac_preprocessor_define_ptr_t define_ =
1769+
metac_preprocessor_define_ptr_t definePtr =
17651770
MetaCPreProcessor_ParseDefine(self->Preprocessor, self);
1771+
preProcDecl->DefinePtr = definePtr;
17661772
}
17671773
else if (dirc == pp_ifdef)
17681774
{
@@ -1809,7 +1815,7 @@ metac_decl_t* MetaCParser_ParseDecl(metac_parser_t* self, metac_decl_t* parent)
18091815
printf("Saw preprocssor directive %s\n", Preprocessor_Directive_toChars(dirc));
18101816
}
18111817

1812-
return (metac_decl_t*) emptyPointer;
1818+
return result;
18131819
// MetaCParser_HandlePreprocessorDirective(self, dirc);
18141820
}
18151821
#endif
@@ -1873,15 +1879,13 @@ metac_decl_t* MetaCParser_ParseDecl(metac_parser_t* self, metac_decl_t* parent)
18731879

18741880
if (tokenType == tok_kw_typedef)
18751881
{
1876-
MetaCParser_Match(self, tok_kw_typedef);
1877-
currentToken = MetaCParser_PeekToken(self, 1);
1878-
tokenType =
1879-
(currentToken ? currentToken->TokenType : tok_invalid);
18801882
uint32_t hash = typedef_key;
1881-
18821883
decl_type_typedef_t* typdef = AllocNewDecl(decl_type_typedef, &result);
18831884
// typedefs are exactly like variables
1884-
decl_variable_t* var = (decl_variable_t*)MetaCParser_ParseDecl(self, (metac_decl_t*) typdef);
1885+
decl_variable_t* var;
1886+
MetaCParser_Match(self, tok_kw_typedef);
1887+
var = (decl_variable_t*)MetaCParser_ParseDecl(self, (metac_decl_t*) typdef);
1888+
18851889
MetaCParser_Match(self, tok_semicolon);
18861890

18871891
typdef->Type = var->VarType;
@@ -2004,7 +2008,7 @@ metac_decl_t* MetaCParser_ParseDecl(metac_parser_t* self, metac_decl_t* parent)
20042008
}
20052009
else
20062010
{
2007-
ParseErrorF(loc, "A declaration is expected to start with a type CurrentToken %s\n", MetaCTokenEnum_toChars(tokenType));
2011+
ParseErrorF(loc, "A declaration is expected to start with a type. But CurrentToken %s\n", MetaCTokenEnum_toChars(tokenType));
20082012
}
20092013
LendDecl:
20102014
return result;

parser/metac_parsetree.h

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77

88
#include "metac_node.h"
99
#include "metac_lexer.h"
10-
10+
#ifndef NO_PREPROCESSOR
11+
# include "metac_preproc.h"
12+
#endif
1113
#pragma pack(push, 1)
1214

1315
typedef enum number_flags_t
@@ -496,6 +498,22 @@ typedef struct decl_parameter_list_t
496498
bool IsVariadic;
497499
} decl_parameter_list_t;
498500

501+
#ifndef NO_PREPROCESSOR
502+
503+
typedef struct decl_preproc_t
504+
{
505+
DECL_HEADER
506+
507+
metac_preprocessor_directive_t DirectiveKind;
508+
509+
union
510+
{
511+
metac_preprocessor_define_ptr_t DefinePtr;
512+
};
513+
} decl_preproc_t;
514+
515+
#endif
516+
499517
typedef struct decl_function_t
500518
{
501519
DECL_HEADER

0 commit comments

Comments
 (0)