Much better allocation strategy with new ncore arenas. Add more builtin node gen stuff. It's kind of wonky.
This commit is contained in:
@@ -149,9 +149,6 @@ Semantic_Checker :: struct {
|
||||
current_sampler_index : u32 = 0;
|
||||
current_texture_index : u32 = 0;
|
||||
|
||||
messages : [..]Compiler_Message;
|
||||
message_arena : Arena;
|
||||
message_allocator : Allocator;
|
||||
had_error : bool;
|
||||
}
|
||||
|
||||
@@ -595,7 +592,7 @@ record_error :: (checker : *Semantic_Checker, error_string : string, locations :
|
||||
error.message = error_string;
|
||||
|
||||
checker.had_error = true;
|
||||
array_add(*checker.messages, error);
|
||||
array_add(*checker.result.messages, error);
|
||||
}
|
||||
|
||||
is_proper :: (var : Type_Variable) -> bool {
|
||||
@@ -727,7 +724,7 @@ new_builtin_struct :: (checker : *Semantic_Checker, name : string, members : []A
|
||||
// @Incomplete: Skip for now. This is solely for error reporting?
|
||||
// At least let's not make a big deal out of it for now.
|
||||
// We could report builtin nodes in a special way instead of with an actual source location.
|
||||
// builtin_node := new_builtin_struct_node(checker.result.nodes, members, checker.result.allocator;
|
||||
builtin_node := new_builtin_struct_node(checker.result, name, members, checker.result.allocator);
|
||||
|
||||
symbol : Defined_Symbol;
|
||||
symbol.name = name;
|
||||
@@ -807,16 +804,15 @@ init_semantic_checker :: (checker : *Semantic_Checker, root : *AST_Node, path :
|
||||
checker.current_buffer_index = 0;
|
||||
checker.current_sampler_index = 0;
|
||||
checker.current_texture_index = 0;
|
||||
|
||||
array_reserve(*checker.messages, 16);
|
||||
|
||||
checker.program_root = root;
|
||||
checker.path = path;
|
||||
|
||||
// @Incomplete(niels): Use other allocator and/or add static array with convenience functions
|
||||
checker.result.type_variables.allocator = checker.result.allocator;
|
||||
array_reserve(*checker.result.type_variables, 2048);
|
||||
|
||||
checker.result.scope_stack.allocator = make_arena(*checker.result.scope_stack.arena);
|
||||
checker.result.scope_stack.allocator = make_arena(Megabytes(8));
|
||||
array_reserve(*checker.result.scope_stack.stack, 256);
|
||||
|
||||
global_scope, global_handle := push_scope(checker, kind = .Global);
|
||||
@@ -1780,9 +1776,9 @@ add_builtins_new :: (checker : *Semantic_Checker) {
|
||||
|
||||
checker.state = .Adding_Builtins;
|
||||
float_name := Typenames[Type_Kind.Float];
|
||||
// new_builtin_struct(checker, "float2", .[.{"x", float_name}, .{"y", float_name}]);
|
||||
// new_builtin_struct(checker, "float3", .[.{"x", float_name}, .{"y", float_name}, .{"z", float_name}]);
|
||||
// new_builtin_struct(checker, "float4", .[.{"x", float_name}, .{"y", float_name}, .{"z", float_name}, .{"w", float_name}]);
|
||||
new_builtin_struct(checker, "float2", .[.{"x", float_name}, .{"y", float_name}]);
|
||||
new_builtin_struct(checker, "float3", .[.{"x", float_name}, .{"y", float_name}, .{"z", float_name}]);
|
||||
new_builtin_struct(checker, "float4", .[.{"x", float_name}, .{"y", float_name}, .{"z", float_name}, .{"w", float_name}]);
|
||||
|
||||
checker.state = .Type_Checking;
|
||||
}
|
||||
@@ -1814,9 +1810,22 @@ add_builtins :: (checker : *Semantic_Checker) {
|
||||
checker.state = .Adding_Builtins;
|
||||
|
||||
checker.result.file = make_file_from_string(BUILTIN);
|
||||
checker.result.allocator = make_arena(*checker.result.arena);
|
||||
checker.result.allocator = make_arena(Megabytes(128));
|
||||
|
||||
lexer : Lexer;
|
||||
prev_file := checker.result.file;
|
||||
prev_root := checker.result.root;
|
||||
prev_tokens := checker.result.tokens;
|
||||
|
||||
checker.result.root = null;
|
||||
|
||||
tokens : [..]Token;
|
||||
scratch := get_scratch(checker.result);
|
||||
defer scratch_end(scratch);
|
||||
tokens.allocator = scratch.allocator;
|
||||
array_reserve(*tokens, 1024 * 1024);
|
||||
checker.result.tokens = tokens;
|
||||
|
||||
checker.result.tokens.count = 0;
|
||||
|
||||
lex(checker.result);
|
||||
parse(checker.result);
|
||||
@@ -1826,7 +1835,11 @@ add_builtins :: (checker : *Semantic_Checker) {
|
||||
type_var.builtin = true;
|
||||
}
|
||||
|
||||
checker.state = .Type_Checking;
|
||||
checker.state = .Type_Checking;
|
||||
|
||||
checker.result.file = prev_file;
|
||||
checker.result.root = prev_root;
|
||||
checker.result.tokens = prev_tokens;
|
||||
}
|
||||
|
||||
type_check :: (checker : *Semantic_Checker, root : *AST_Node) {
|
||||
@@ -1845,23 +1858,14 @@ check :: (result : *Compile_Result) {
|
||||
checker.current_texture_index = 0;
|
||||
checker.result = result;
|
||||
|
||||
file := result.file;
|
||||
root := result.root;
|
||||
array_reserve(*checker.messages, 32);
|
||||
|
||||
result.root = null;
|
||||
add_builtins_new(*checker);
|
||||
add_builtins(*checker);
|
||||
|
||||
init_semantic_checker(*checker, result.root, result.file.path);
|
||||
|
||||
checker.result.file = file;
|
||||
result.root = root;
|
||||
|
||||
// add_builtins_new(*checker);
|
||||
add_builtins(*checker);
|
||||
|
||||
type_check(*checker, result.root);
|
||||
|
||||
result.had_error |= checker.had_error;
|
||||
copy_messages(checker.messages, *result.messages);
|
||||
}
|
||||
|
||||
// ===========================================================
|
||||
|
||||
Reference in New Issue
Block a user