Fix a bunch of ifdirective related issues in Ink. Load the UI rect shader in ensom.
This commit is contained in:
44
check.jai
44
check.jai
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user