diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/all_types.hpp | 1 | ||||
| -rw-r--r-- | src/codegen.cpp | 3 | ||||
| -rw-r--r-- | src/parser.cpp | 11 | ||||
| -rw-r--r-- | src/parser.hpp | 3 |
4 files changed, 12 insertions, 6 deletions
diff --git a/src/all_types.hpp b/src/all_types.hpp index d1e59ab79f..b7cdc6a413 100644 --- a/src/all_types.hpp +++ b/src/all_types.hpp @@ -890,6 +890,7 @@ struct CodeGen { LLVMValueRef memcpy_fn_val; LLVMValueRef memset_fn_val; bool error_during_imports; + uint32_t next_node_index; }; struct VariableTableEntry { diff --git a/src/codegen.cpp b/src/codegen.cpp index 4d52dd2d2e..b6736a4475 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -2658,7 +2658,8 @@ static ImportTableEntry *codegen_add_code(CodeGen *g, Buf *abs_full_path, import_entry->path = full_path; import_entry->fn_table.init(32); - import_entry->root = ast_parse(source_code, tokenization.tokens, import_entry, g->err_color); + import_entry->root = ast_parse(source_code, tokenization.tokens, import_entry, g->err_color, + &g->next_node_index); assert(import_entry->root); if (g->verbose) { ast_print(import_entry->root, 0); diff --git a/src/parser.cpp b/src/parser.cpp index 1215e82855..2886c5e8f7 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -401,7 +401,7 @@ struct ParseContext { ZigList<AstNode *> *directive_list; ImportTableEntry *owner; ErrColor err_color; - uint32_t next_create_index; + uint32_t *next_node_index; }; __attribute__ ((format (printf, 4, 5))) @@ -457,8 +457,8 @@ static AstNode *ast_create_node_no_line_info(ParseContext *pc, NodeType type) { AstNode *node = allocate<AstNode>(1); node->type = type; node->owner = pc->owner; - node->create_index = pc->next_create_index; - pc->next_create_index += 1; + node->create_index = *pc->next_node_index; + *pc->next_node_index += 1; return node; } @@ -2724,12 +2724,15 @@ static AstNode *ast_parse_root(ParseContext *pc, int *token_index) { return node; } -AstNode *ast_parse(Buf *buf, ZigList<Token> *tokens, ImportTableEntry *owner, ErrColor err_color) { +AstNode *ast_parse(Buf *buf, ZigList<Token> *tokens, ImportTableEntry *owner, + ErrColor err_color, uint32_t *next_node_index) +{ ParseContext pc = {0}; pc.err_color = err_color; pc.owner = owner; pc.buf = buf; pc.tokens = tokens; + pc.next_node_index = next_node_index; int token_index = 0; pc.root = ast_parse_root(&pc, &token_index); return pc.root; diff --git a/src/parser.hpp b/src/parser.hpp index debe406594..c8209fae4d 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -17,7 +17,8 @@ void ast_token_error(Token *token, const char *format, ...); // This function is provided by generated code, generated by parsergen.cpp -AstNode * ast_parse(Buf *buf, ZigList<Token> *tokens, ImportTableEntry *owner, ErrColor err_color); +AstNode * ast_parse(Buf *buf, ZigList<Token> *tokens, ImportTableEntry *owner, ErrColor err_color, + uint32_t *next_node_index); const char *node_type_str(NodeType node_type); |
