Added inferred types and missing length function.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user