64 lines
1.5 KiB
Plaintext
64 lines
1.5 KiB
Plaintext
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/enums/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)})
|
|
}
|