Fix static array. Add constant buffers. Beginning of textures.
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
//~ nbr: Error reporting TODOs
|
||||
//
|
||||
// [x] Improve error reporting on mismatched overloads when types don't match, but arity does
|
||||
// [ ] Improve error reporting for type mismatches in general. It seems like the expect node is no always correct.
|
||||
// [x] Improve error reporting for type mismatches in general. It seems like the expect node is not always correct.
|
||||
|
||||
#load "static_array.jai";
|
||||
#import "Hash_Table";
|
||||
@@ -920,9 +920,7 @@ declare_struct :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variab
|
||||
return declare_struct(checker, node, node.name);
|
||||
}
|
||||
|
||||
PROPERTIES_BUFFER_INDEX : u32 : 0;
|
||||
META_BUFFER_INDEX : u32 : PROPERTIES_BUFFER_INDEX + 1;
|
||||
current_custom_buffer_index : u32 = META_BUFFER_INDEX + 1;
|
||||
current_buffer_index : u32 = 0;
|
||||
|
||||
declare_properties :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variable_Handle {
|
||||
name := ifx node.name.count == 0 then "properties" else node.name;
|
||||
@@ -930,7 +928,8 @@ declare_properties :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Va
|
||||
var := h2tv(checker, type_var);
|
||||
var.type = .Properties;
|
||||
var.typename = "properties";
|
||||
var.buffer_index = PROPERTIES_BUFFER_INDEX;
|
||||
var.buffer_index = current_buffer_index;
|
||||
current_buffer_index += 1;
|
||||
return type_var;
|
||||
}
|
||||
|
||||
@@ -938,21 +937,12 @@ declare_cbuffer :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Varia
|
||||
type_var := declare_struct(checker, node);
|
||||
var := h2tv(checker, type_var);
|
||||
var.type = .CBuffer;
|
||||
current_custom_buffer_index += 1;
|
||||
var.buffer_index = current_custom_buffer_index;
|
||||
var.buffer_index = current_buffer_index;
|
||||
current_buffer_index += 1;
|
||||
array_add(*checker.result.constant_buffers, type_var);
|
||||
return type_var;
|
||||
}
|
||||
|
||||
declare_meta :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variable_Handle {
|
||||
name := ifx node.name.count == 0 then "meta" else node.name;
|
||||
type_var := declare_struct(checker, node, name);
|
||||
var := h2tv(checker, type_var);
|
||||
var.typename = name;
|
||||
var.buffer_index = META_BUFFER_INDEX;
|
||||
return type_var;
|
||||
}
|
||||
|
||||
get_actual_function_name :: (node : *AST_Node) -> string {
|
||||
name_to_check := node.name;
|
||||
if node.vertex_entry_point {
|
||||
@@ -1501,8 +1491,6 @@ traverse :: (checker : *Semantic_Checker, root : *AST_Node) {
|
||||
declare_properties(checker, declaration);
|
||||
} else if declaration.kind == .Struct {
|
||||
declare_struct(checker, declaration);
|
||||
} else if declaration.kind == .Meta {
|
||||
declare_meta(checker, declaration);
|
||||
} else if declaration.kind == .CBuffer {
|
||||
declare_cbuffer(checker, declaration);
|
||||
}
|
||||
@@ -1729,6 +1717,7 @@ type_check :: (checker : *Semantic_Checker, root : *AST_Node) {
|
||||
}
|
||||
|
||||
check :: (checker : *Semantic_Checker, root : *AST_Node) -> Semantic_Check_Result {
|
||||
current_buffer_index = 0;
|
||||
array_reserve(*checker.result.messages, 16);
|
||||
array_reserve(*checker.constraints, 1024);
|
||||
add_hlsl_builtins(checker);
|
||||
@@ -1745,18 +1734,6 @@ check :: (checker : *Semantic_Checker) -> Semantic_Check_Result {
|
||||
// ===========================================================
|
||||
// Pretty printing
|
||||
|
||||
pretty_print_children :: (checker : *Semantic_Checker, builder : *String_Builder, type : Type_Variable, indentation : int) {
|
||||
indent(builder, indentation);
|
||||
for 0..type.child_count - 1 {
|
||||
child_handle := type.children[it];
|
||||
child := h2tv(checker, child_handle);
|
||||
// if child.kind != .Function {
|
||||
// print_to_builder(builder, "% : %", child.name, type_to_string(child));
|
||||
// } else {
|
||||
// pretty_print_function(checker, builder, "", child, 0);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
type_to_string :: (type_variable : Type_Variable) -> string {
|
||||
if type_variable.type == {
|
||||
@@ -1842,7 +1819,6 @@ pretty_print_struct :: (checker : *Semantic_Checker, builder : *String_Builder,
|
||||
}
|
||||
}
|
||||
|
||||
pretty_print_children(checker, builder, struct_type, 0);
|
||||
append(builder, "}\n");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user