Add missing codegen for minusequals and etc. Do proper type checking on else blocks. Spread single arg constructors not supported in hlsl.

This commit is contained in:
2025-01-23 22:47:09 +01:00
parent 8ce8651d6b
commit cd167d1560
3 changed files with 41 additions and 2 deletions

View File

@@ -190,6 +190,24 @@ emit_call :: (state : *Codegen_State, node : *AST_Node, indentation : int) {
append(*state.builder, ", ");
}
}
} else if starts_with(node.name, "float") && node.children[0].children.count == 1 {
args := node.children[0];
print_to_builder(*state.builder, "%(", node.name);
number : string;
number.data = *node.name.data[5];
number.count = node.name.count - 5;
count := parse_int(*number, s32);
for i : 0..count - 1 {
child := args.children[0];
emit_node(state, child, 0);
if i != count - 1 {
append(*state.builder, ", ");
}
}
} else {
print_to_builder(*state.builder, "%(", node.name);
@@ -353,7 +371,22 @@ emit_operator :: (state : *Codegen_State, op_kind : Token_Kind) {
}
case .TOKEN_SLASH; {
append(*state.builder, "/");
}
}
case .TOKEN_MINUSEQUALS; {
append(*state.builder, "-=");
}
case .TOKEN_PLUSEQUALS; {
append(*state.builder, "+=");
}
case .TOKEN_DIVEQUALS; {
append(*state.builder, "/=");
}
case .TOKEN_TIMESEQUALS; {
append(*state.builder, "*=");
}
case .TOKEN_MODEQUALS; {
append(*state.builder, "%=");
}
case .TOKEN_ISEQUAL; {
append(*state.builder, "==");
}