Fix a bunch of ifdirective related issues in Ink. Load the UI rect shader in ensom.

This commit is contained in:
2025-10-01 21:43:52 +02:00
parent 39d2fe6ad0
commit afced44abe
16 changed files with 172 additions and 152 deletions

View File

@@ -1047,12 +1047,18 @@ lookup_type :: (checker : *Checker, scope : Scope_Handle, node : *AST_Node, type
return lookup_type(checker, scope, type_string, typename);
}
check_block :: (checker : *Checker, node : *AST_Node) {
push_scope(checker, kind = Scope_Kind.Block);
check_block :: (checker : *Checker, node : *AST_Node, skip_scope : bool = false) {
if !skip_scope {
push_scope(checker, kind = Scope_Kind.Block);
}
for child : node.children {
check_node(checker, child);
}
pop_scope(checker);
if !skip_scope {
pop_scope(checker);
}
}
declare_struct :: (checker : *Checker, node : *AST_Node, name : string) -> Type_Variable_Handle {
@@ -1082,13 +1088,23 @@ declare_struct :: (checker : *Checker, node : *AST_Node, name : string) -> Type_
for child : node.children {
if child.kind == .FieldList {
for field : child.children {
type_var := check_field(checker, field);
for child : child.children {
if child.kind == .Field {
type_var := check_field(checker, child);
if type_var > 0 {
from_handle(checker, type_var).scope = scope_handle;
add_child(checker, handle, type_var);
if type_var > 0 {
from_handle(checker, type_var).scope = scope_handle;
add_child(checker, handle, type_var);
}
} else if child.kind == .If_Directive && child.children.count > 0 {
tv_start_index := checker.ctx.type_variables.count - 1;
check_if_directive(checker, child);
for i : tv_start_index..checker.ctx.type_variables.count - 1 {
add_child(checker, handle, xx (i + 1));
}
}
}
}
}
@@ -1325,7 +1341,7 @@ check_function :: (checker : *Checker, node : *AST_Node) {
}
if statement.kind == .If_Directive {
break;
continue;
}
}
}
@@ -1872,11 +1888,7 @@ check_if_directive :: (checker : *Checker, directive : *AST_Node) {
if checker.current_scope == 1 {
traverse(checker, first_child);
} else {
check_block(checker, first_child);
}
for child : directive.children[1].children {
add_child(parent, child);
check_block(checker, first_child, skip_scope=true);
}
if directive.children.count > 2 {
@@ -1889,10 +1901,6 @@ check_if_directive :: (checker : *Checker, directive : *AST_Node) {
if else_branch.kind == .If_Directive {
check_if_directive(checker, else_branch);
} else {
for child : else_branch.children {
add_child(parent, child);
}
if checker.current_scope == 1 {
if else_branch.kind == .If_Directive {
check_declaration(checker, else_branch);