From 262f0d632a498684e8b4803a32b50a8c17377eda Mon Sep 17 00:00:00 2001 From: Niels Bross Date: Wed, 12 Jun 2024 12:31:30 +0200 Subject: [PATCH] Fix properties renaming. --- Codegen.jai | 5 +---- README.md | 3 +-- Semantic_Analysis.jai | 2 +- test/codegen/property_rename.golden | 15 +++++++++++++++ 4 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 test/codegen/property_rename.golden diff --git a/Codegen.jai b/Codegen.jai index ba178ea..bea238f 100644 --- a/Codegen.jai +++ b/Codegen.jai @@ -49,7 +49,6 @@ emit_field :: (state : *Codegen_State, node : *AST_Node, indentation : int) { print_to_builder(*state.builder, "%", node.name); for i :0..node.children.count - 1 { - child := node.children[i]; print_to_builder(*state.builder, " = "); @@ -278,8 +277,7 @@ emit_node :: (state : *Codegen_State, node : *AST_Node, indentation : int) { indent(*state.builder, indentation); type_var := h2tv(state.type_variables, node.type_variable); - print("type: %\n", type_var.typename); - is_properties := node.name == "properties"; + is_properties := type_var.typename == "properties"; if !is_properties { print_to_builder(*state.builder, "%", node.name); @@ -394,7 +392,6 @@ codegen :: (state : *Codegen_State) -> Codegen_Result { state.result.result_text = builder_to_string(*state.builder); - print("%\n", state.result.result_text); return state.result; } diff --git a/README.md b/README.md index bf6eed1..c96fb16 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,6 @@ p :: properties { ... } ``` -But this is not yet supported 100%. ## Jai Usage Example @@ -171,7 +170,7 @@ Hint_Kind :: enum { ## Notable missing features -- Control flow: if/else, for, while etc. +- Control flow: if/else, for, while, switch etc. - Arrays - Textures and samplers - Multiple render targets diff --git a/Semantic_Analysis.jai b/Semantic_Analysis.jai index 2fe5ca3..0baedc9 100644 --- a/Semantic_Analysis.jai +++ b/Semantic_Analysis.jai @@ -1204,7 +1204,7 @@ create_variable :: (checker : *Semantic_Checker, node : *AST_Node, field_parent field_access_on_primitive_type(checker, node, find_result.type_variable); return 0; } else { - lookup_name : string; + lookup_name : string = variable.typename; if variable.typename == "properties" { lookup_name = variable.name; } diff --git a/test/codegen/property_rename.golden b/test/codegen/property_rename.golden new file mode 100644 index 0000000..a6f2e53 --- /dev/null +++ b/test/codegen/property_rename.golden @@ -0,0 +1,15 @@ +cbuffer __PROPERTIES : register(b0) +{ + float4 color; +} + +float4 vs_main(float4 pos : POSITION) : SV_POSITION +{ + return pos; +} + +float4 ps_main() : SV_TARGET +{ + return color; +} +