Added inferred types and missing length function.

This commit is contained in:
2025-01-10 22:44:15 +01:00
parent 8bd766281e
commit ec31046d30
16 changed files with 218 additions and 13 deletions

View File

@@ -1241,9 +1241,14 @@ create_field :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variable
r := from_handle(checker, rhs);
assert(l.type != .Unresolved_Expression && r.type != .Unresolved_Expression);
if !types_compatible(checker, handle, rhs) {
type_mismatch(checker, l.source_node, r.source_node, rhs, handle);
return 0;
if l.type == .Unresolved_Variable {
l.type = r.type;
l.typename = r.typename;
} else {
if !types_compatible(checker, handle, rhs) {
type_mismatch(checker, l.source_node, r.source_node, rhs, handle);
return 0;
}
}
}
@@ -1419,7 +1424,6 @@ check_node :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variable_H
}
}
case .TOKEN_ASSIGN; {
if !types_compatible(checker, lhs_var, rhs_var, true) {
type_mismatch(checker, node.parent, node.children[1], lhs_var, rhs_var);
return 0;
@@ -1614,7 +1618,7 @@ add_hlsl_builtins :: (checker : *Semantic_Checker) {
append(*sb, "/");
}
append(*sb, "hlsl_builtin.shd");
append(*sb, "hlsl_builtin.ink");
path := builder_to_string(*sb);
@@ -1685,12 +1689,14 @@ check :: (result : *Compile_Result) {
array_reserve(*checker.result.messages, 16);
init_semantic_checker(*checker, file.ast_root, file.file.path);
// @Performance: Should have this built in stuff done earlier and only once
add_hlsl_builtins(*checker);
type_check(*checker, file.ast_root);
file.semantic_check_result = checker.result;
result.had_error |= checker.result.had_error;
copy_messages(checker.result.messages, *result.messages);
}
}