@@ -9,8 +9,12 @@ Template_Parameter :: struct {
99}
1010
1111Template :: struct {
12- using header : Template_Header ;
13- render : * void ;
12+ using header : * Template_Header ;
13+
14+ render_proc_info : Procedure_Info ;
15+ thread_locals_type : Type ;
16+
17+ render : * void ;
1418}
1519
1620Template_Header :: struct {
@@ -20,15 +24,6 @@ Template_Header :: struct {
2024 export_name : string ;
2125 notes : [] string ;
2226 tags : [] string ;
23-
24- render_proc_type : Type ;
25- thread_locals_type : Type ;
26-
27- flags : Flags ;
28- Flags :: enum_flags {
29- NONE :: 0 ;
30- HAS_THREAD_LOCALS :: 1 ;
31- }
3227}
3328
3429Template_Call :: struct {
@@ -288,10 +283,6 @@ compile_headers :: ($templates: [] Raw_Template, $uuid_start: int) -> [] Templat
288283 % 5
289284 };
290285 JAI , it_index , uuid , it .source_path , it .output_file_extension , header_text );
291-
292- if get_named_block (it , " THREAD_LOCALS" ) {
293- print (* builder , " headers[%1 ].flags |= .HAS_THREAD_LOCALS;\n " , it_index );
294- }
295286 }
296287 append (* builder , " return headers;" );
297288
@@ -309,8 +300,8 @@ generate_template_render_proc :: (builder: *String_Builder, raw_template: Raw_Te
309300 append (builder , " using Template_Generation_Helpers;\n " );
310301 append (builder , " using Template_Runtime_Helpers;\n " );
311302
312- if header . flags & . HAS_THREAD_LOCALS {
313- print (builder , " using context.thread_locals .__template_% ;" , header .uuid );
303+ if get_named_block ( raw_template , " THREAD_LOCALS " ) {
304+ print (builder , " using context.site_thread_locals .__template_% ;" , header .uuid );
314305 }
315306
316307 append (builder , raw_template .preamble );
@@ -416,20 +407,6 @@ call_template :: (using template_call: Template_Call) -> bool {
416407 return true ;
417408}
418409
419- // TODO: make_template_call :: (code: Code) -> Template_Call
420- // takes the code for the procedure call and automatically generates a Template_Call using the current values for each thing passed
421-
422- // make_template_call :: (code: Code) -> Template_Call {
423- // #insert -> string {
424- // root := Compiler.compiler_get_nodes(code).(*Code_Procedure_Call);
425- // assert(root.kind == .PROCEDURE_CALL);
426-
427- // // determine exaclty which procedure overload would be called in this procedure call
428- // // collect
429- // }
430-
431- // }
432-
433410Template_Runtime_Helpers :: struct {
434411 // shorthand for call_template to make life easier, also uses backticked return to invisibly propogate errors
435412 call :: (name : string , parameters : ..Template_Parameter ) #expand {
@@ -491,10 +468,20 @@ get_page_output_path :: (page: Template) -> string {
491468 return join (output_path , page .output_file_extension , separator = " ." ,, temp );;
492469}
493470
471+ get_template_header :: (uuid : u64 ) -> * Template_Header {
472+ for * TEMPLATE_HEADERS if it .uuid == uuid return it ;
473+ for * PAGE_HEADERS if it .uuid == uuid return it ;
474+ return null ;
475+ }
476+
494477
495478// this is basically the entire metaprogram, i guess
496479// TODO: probably take in some config here as parameter
497- generate_site :: () -> string {
480+ generate_site :: () -> (
481+ site_insert_string : string ,
482+ template_headers : [] Template_Header ,
483+ page_headers : [] Template_Header
484+ ) {
498485 // don't bother to load any other config atm. build config can just be put directly in the source
499486 config .working_directory = get_working_directory ();
500487
@@ -545,21 +532,13 @@ generate_site :: () -> string {
545532 }
546533 }
547534
548- append_template_data :: (builder : * String_Builder , header : Template_Header ) {
535+ append_template_data :: (builder : * String_Builder , header : Template_Header , raw_template : Raw_Template ) {
549536 print (builder , " .{\n " );
550- append (builder , " header = .{\n " );
551- print (builder , " export_name = \" % \" ,\n " , header .export_name );
552- print (builder , " source_path = \" % \" ,\n " , header .source_path );
553- print (builder , " output_file_extension = \" % \" ,\n " , header .output_file_extension );
554- if header .notes print (builder , " notes = % ,\n " , header .notes );
555- if header .tags print (builder , " tags = % ,\n " , header .tags );
556- if header .export_name print (builder , " export_name = \" % \" ,\n " , header .export_name );
557- print (builder , " render_proc_type = type_of(__render_template_% ),\n " , header .uuid );
558- print (builder , " render_proc_info = #run get_procedure_info(__render_template_% ),\n " , header .uuid );
537+ print (builder , " header = get_template_header(% ),\n " , header .uuid );
538+ print (builder , " render_proc_info = #run get_procedure_info(__render_template_% ),\n " , header .uuid );
559539
560- if header .flags & .HAS_THREAD_LOCALS
561- print (builder , " thread_locals_type = type_of(Thread_Locals.__template_% ),\n " , header .uuid );
562- append (builder , " },\n " );
540+ if get_named_block (raw_template , " THREAD_LOCALS" )
541+ print (builder , " thread_locals_type = type_of(Thread_Locals.__template_% ),\n " , header .uuid );
563542
564543 // TODO: should put a get_thread_locals proc directly on here like we do for the render proc?
565544 print (builder , " render = xx __render_template_% ,\n " , header .uuid );
@@ -575,14 +554,14 @@ generate_site :: () -> string {
575554 print (* builder , " Site.templates = array_copy(Template.[\n " , template_headers .count );
576555 for raw_templates {
577556 header := template_headers [it_index ];
578- append_template_data (* builder , header );
557+ append_template_data (* builder , header , it );
579558 }
580559 append (* builder , " ]);\n " );
581560
582561 append (* builder , " Site.pages = array_copy(Template.[\n " );
583562 for raw_pages {
584563 header := page_headers [it_index ];
585- append_template_data (* builder , header );
564+ append_template_data (* builder , header , it );
586565 }
587566 append (* builder , " ]);\n " );
588567
@@ -617,13 +596,13 @@ generate_site :: () -> string {
617596 for raw_templates {
618597 header := template_headers [it_index ];
619598 if get_named_block (it , " THREAD_LOCALS" ) {
620- print (* builder , " if template_render_proc == xx __render_template_%1 return context.thread_locals .__template_%1 ;\n " , header .uuid );
599+ print (* builder , " if template_render_proc == xx __render_template_%1 return context.site_thread_locals .__template_%1 ;\n " , header .uuid );
621600 }
622601 }
623602 for raw_pages {
624603 header := page_headers [it_index ];
625604 if get_named_block (it , " THREAD_LOCALS" ) {
626- print (* builder , " if template_render_proc == xx __render_template_%1 return context.thread_locals .__template_%1 ;\n " , header .uuid );
605+ print (* builder , " if template_render_proc == xx __render_template_%1 return context.site_thread_locals .__template_%1 ;\n " , header .uuid );
627606 }
628607 }
629608 append (* builder , " return Any.{};\n }\n " );
@@ -643,10 +622,12 @@ generate_site :: () -> string {
643622
644623 append (* builder , " #add_context site_thread_locals: *Site.Thread_Locals;" );
645624
646- return builder_to_string (* builder );
625+ return builder_to_string (* builder ), template_headers , page_headers ;
647626}
648627
649- #insert #run generate_site ();
628+ SITE_INSERT_STRING , TEMPLATE_HEADERS , PAGE_HEADERS :: #run generate_site ();
629+
630+ #insert SITE_INSERT_STRING ;
650631
651632main :: () {
652633 Site .init ();
0 commit comments