@@ -54,6 +54,10 @@ typedef struct identifier_translation_context_t
5454 const uint32_t FunctionKey ;
5555 const metac_identifier_table_t * SrcTable ;
5656 metac_identifier_table_t * DstTable ;
57+
58+ const metac_identifier_table_t * SrcTableStrings ;
59+ metac_identifier_table_t * DstTableStrings ;
60+
5761} identifier_translation_context_t ;
5862
5963static inline void TranslateIdentifier (metac_identifier_table_t * dstTable ,
@@ -73,6 +77,7 @@ static inline int TranslateIdentifiers(metac_node_t node, void* ctx)
7377
7478 const metac_identifier_table_t * SrcTable = context -> SrcTable ;
7579 metac_identifier_table_t * DstTable = context -> DstTable ;
80+ xprintf ("Node seen %s\n" , MetaCNodeKind_toChars (node -> Kind ));
7681
7782 switch (node -> Kind )
7883 {
@@ -82,6 +87,12 @@ static inline int TranslateIdentifiers(metac_node_t node, void* ctx)
8287 if (var -> VarIdentifier .v && var -> VarIdentifier .v != empty_identifier .v )
8388 TranslateIdentifier (DstTable , SrcTable , & var -> VarIdentifier );
8489 } break ;
90+ case decl_function :
91+ {
92+ decl_function_t * func = (decl_function_t * ) node ;
93+ if (func -> Identifier .v != empty_identifier .v )
94+ TranslateIdentifier (DstTable , SrcTable , & func -> Identifier );
95+ } break ;
8596 case decl_type :
8697 {
8798 decl_type_t * type = (decl_type_t * ) node ;
@@ -121,7 +132,31 @@ static inline int TranslateIdentifiers(metac_node_t node, void* ctx)
121132 }
122133 } break ;
123134
124- default : break ;
135+
136+ case expr_string :
137+ {
138+ metac_expr_t * expr = cast (metac_expr_t * ) node ;
139+ if (expr -> StringPtr .v != empty_identifier .v )
140+ {
141+ TranslateIdentifier (context -> DstTableStrings , context -> SrcTableStrings , & expr -> StringPtr );
142+ }
143+ } break ;
144+
145+ case expr_identifier :
146+ {
147+ metac_expr_t * expr = cast (metac_expr_t * ) node ;
148+ if (expr -> IdentifierPtr .v != empty_identifier .v )
149+ {
150+ TranslateIdentifier (DstTable , SrcTable , & expr -> IdentifierPtr );
151+ }
152+ } break ;
153+
154+
155+ default : {xprintf ("No Identifier got Translated\n" );} break ;
156+ }
157+
158+ if ((node -> Kind > expr_invalid ) & (node -> Kind < expr_max ))
159+ {
125160 }
126161
127162 return 0 ;
@@ -579,11 +614,32 @@ bool Repl_Loop(repl_state_t* repl, repl_ui_context_t* context)
579614 {
580615 metac_filesystem_t * fs = uiInterface .GetFileSystem (uiState );
581616
582- repl -> ParseMode = repl_mode_lex_file ;
617+ metac_lpp_t tmpLpp = { 0 } ;
583618 const char * filename = repl -> Line + 3 ;
584- MSGF ("querying fileStorage for '%s'\n" , filename );
585- // metac_file_storage_t* fs = Global_GetFileStorage(worker);
586- metac_file_ptr_t f = MetaCFileStorage_LoadFile (fs , filename );
619+ MetaCLPP_Init (& tmpLpp , & repl -> Allocator , 0 );
620+ decl_array_t decls = ReadLexParse (filename , & tmpLpp , & repl -> Allocator );
621+ // after parsing we now transfer the declarations our global context;
622+ identifier_translation_context_t transCtx =
623+ {
624+ crc32c (~0 , "TranslateIdentifiers" , sizeof ("TranslateIdentifiers" ) - 1 ),
625+
626+ & tmpLpp .Parser .IdentifierTable ,
627+ & repl -> LPP .Parser .IdentifierTable ,
628+
629+ & tmpLpp .Parser .StringTable ,
630+ & repl -> LPP .Parser .StringTable
631+ };
632+
633+ for (uint32_t i = 0 ; i < decls .Length ; i ++ )
634+ {
635+ metac_decl_t * decl = decls .Ptr [i ];
636+
637+ MetaCNode_TreeWalk_Real (METAC_NODE (decl ), TranslateIdentifiers , & transCtx );
638+ MetaCPrinter_Reset (& repl -> Printer );
639+ PrintDecl (& repl -> Printer , decls .Ptr [i ], 1 );
640+ MSGF ("Got %.*s decls\n" , (int )repl -> Printer .StringMemoryCount , repl -> Printer .StringMemory );
641+ }
642+ MetaCPrinter_Reset (& repl -> Printer );
587643 }
588644 else
589645 {
0 commit comments