diff --git a/Codegen.jai b/Codegen.jai index 5a980a7..e380144 100644 --- a/Codegen.jai +++ b/Codegen.jai @@ -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, "=="); } diff --git a/Semantic_Analysis.jai b/Semantic_Analysis.jai index 5255fc2..619f7f3 100644 --- a/Semantic_Analysis.jai +++ b/Semantic_Analysis.jai @@ -1506,7 +1506,11 @@ check_node :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variable_H body_var := check_block(checker, node.children[1]); if node.children.count == 3 { - else_var := check_node(checker, node.children[2]); + if node.children[2].kind == .If { + check_node(checker, node.children[2]); + } else { + check_block(checker, node.children[2]); + } } } case .Variable; { diff --git a/hlsl_builtin.ink b/hlsl_builtin.ink index e77b01b..d5c5b99 100644 --- a/hlsl_builtin.ink +++ b/hlsl_builtin.ink @@ -285,3 +285,5 @@ int4x4 :: struct { #foreign lerp :: (float2, float2, float) -> float2; #foreign lerp :: (float3, float3, float) -> float3; #foreign lerp :: (float4, float4, float) -> float4; + +#foreign fmod :: (float, float) -> float;