import "@std/debug" import "@std/mem" import "@source/diagnostics" import "@source/strpool" import "@source/lexer" import "@source/ast" import "@source/parser" ast_renderer :: import "@source/ast/renderer" test import "@std/enummap" test import "@std/arraylist" test import "@std/hashmap" test import "@std/strmap" test import "@std/meta" test import "@source/diagnostics" test import "@source/strpool" test import "@source/lexer" test import "@source/ast" test import "@source/ast/renderer" test import "@source/parser" program :: `# literals `x float :: 123.9 `y int := 43 `z :: "hello" ` `a := 1 + 2 * 3 `b :: -3 / 2 + 1 ` `empty proc() void {} `grouped proc(a, b T, c U) void { ` value int :: 1 `} main proc() void! { strpool.STRINGS = strpool.init(mem.c_allocator) defer strpool.deinit(&strpool.STRINGS) diagnostic_store := diagnostics.init(mem.c_allocator) defer diagnostics.deinit(&diagnostic_store) scan_state := lexer.init(mem.c_allocator) defer lexer.deinit(&scan_state) try lexer.scan(&scan_state, program, &diagnostic_store) tree := try parser.parse( scan_state.tokens.items, program, &diagnostic_store, mem.c_allocator, ) defer ast.deinit(&tree) renderer := ast_renderer.init(mem.c_allocator) defer ast_renderer.deinit(&renderer) try ast_renderer.render(&renderer, &tree) debug.print("{s}", {renderer.bytes.items}) debug.print("diagnostics: {}\n", {diagnostics.count(&diagnostic_store)}) }