better printing for enum flags
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 23 Aug 2021 00:00:58 +0000 (19:00 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 23 Aug 2021 00:00:58 +0000 (19:00 -0500)
core/conv.onyx

index fba51cb1effc9133f7537b29d1fee5c4894eb50e..acf53c87d19e04006f7ec373837904ac037913d6 100644 (file)
@@ -577,7 +577,7 @@ str_format_va :: (format: str, buffer: [] u8, va: [] any) -> str {
                         case #default do assert(false, "Bad enum backing type");
                     }
 
-                    {
+                    if !e.is_flags {
                         for ^member: e.members {
                             if value == member.value {
                                 output->write(member.name);
@@ -586,6 +586,20 @@ str_format_va :: (format: str, buffer: [] u8, va: [] any) -> str {
                         }
 
                         output->write("UNKNOWN");
+
+                    } else {
+                        first := true;
+                        for ^member: e.members {
+                            if value & member.value != 0 {
+                                if !first do output->write(" | ");
+                                output->write(member.name);
+                                first = false;
+                            }
+                        }
+
+                        if first {
+                            output->write("None");
+                        }
                     }
                 }
             }