Skip to content

Commit 14f478c

Browse files
committed
Update main.jai
1 parent e6834a7 commit 14f478c

File tree

1 file changed

+32
-51
lines changed

1 file changed

+32
-51
lines changed

source/main.jai

Lines changed: 32 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@ Template_Parameter :: struct {
99
}
1010

1111
Template :: 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

1620
Template_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

3429
Template_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-
433410
Template_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

651632
main :: () {
652633
Site.init();

0 commit comments

Comments
 (0)