diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index f36eecc5a6..0f124156a1 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -1246,11 +1246,20 @@ std::vector decompile_bitfield_enum_from_int(const TypeSpec& type, assert(type_info); assert(type_info->is_bitfield()); + std::vector bit_sorted_names; for (auto& field : type_info->entries()) { - u64 mask = ((u64)1) << field.second; + bit_sorted_names.push_back(field.first); + } + std::sort(bit_sorted_names.begin(), bit_sorted_names.end(), + [&](const std::string& a, const std::string& b) { + return type_info->entries().at(a) < type_info->entries().at(b); + }); + + for (auto& field_name : bit_sorted_names) { + u64 mask = ((u64)1) << type_info->entries().at(field_name); if (value & mask) { reconstructed |= mask; - result.push_back(field.first); + result.push_back(field_name); } } diff --git a/test/decompiler/reference/engine/debug/menu_REF.gc b/test/decompiler/reference/engine/debug/menu_REF.gc index 7a5cb6dcf9..f283695fd7 100644 --- a/test/decompiler/reference/engine/debug/menu_REF.gc +++ b/test/decompiler/reference/engine/debug/menu_REF.gc @@ -782,11 +782,8 @@ ) (cond ((= s4-0 'menu) - (let ((s4-1 (new 'debug 'debug-menu arg0 (the-as string s5-1)))) - (set! - s5-0 - (new 'debug 'debug-menu-item-submenu (the-as string s5-1) s4-1) - ) + (let ((s4-1 (new 'debug 'debug-menu arg0 s5-1))) + (set! s5-0 (new 'debug 'debug-menu-item-submenu s5-1 s4-1)) (let* ((gp-1 (cdr (cdr arg1))) (a1-3 (car gp-1)) ) @@ -803,7 +800,7 @@ ) ) ((= s4-0 'main-menu) - (set! s5-0 (new 'debug 'debug-menu arg0 (the-as string s5-1))) + (set! s5-0 (new 'debug 'debug-menu arg0 s5-1)) (let* ((gp-2 (cdr (cdr arg1))) (a1-6 (car gp-2)) ) @@ -828,7 +825,7 @@ (new 'debug 'debug-menu-item-flag - (the-as string s5-1) + s5-1 (the-as symbol (car (cdr (cdr arg1)))) (debug-menu-func-decode (car (cdr (cdr (cdr arg1))))) ) @@ -837,7 +834,7 @@ (new 'debug 'debug-menu-item-function - (the-as string s5-1) + s5-1 (the-as int (car (cdr (cdr arg1)))) (debug-menu-func-decode (car (cdr (cdr (cdr arg1))))) ) @@ -846,7 +843,7 @@ (new 'debug 'debug-menu-item-var - (the-as string s5-1) + s5-1 (the-as int (car (cdr (cdr arg1)))) (the-as int (car (cdr (cdr (cdr arg1))))) ) @@ -861,7 +858,7 @@ (new 'debug 'debug-menu-item-var - (the-as string s5-1) + s5-1 (the-as int (car (cdr (cdr arg1)))) (the-as int (ref arg1 4)) ) @@ -898,7 +895,7 @@ (new 'debug 'debug-menu-item-var - (the-as string s5-1) + s5-1 (the-as int (car (cdr (cdr arg1)))) (the-as int (ref arg1 4)) ) @@ -933,7 +930,7 @@ (new 'debug 'debug-menu-item-var - (the-as string s5-1) + s5-1 (the-as int (car (cdr (cdr arg1)))) (the-as int (ref arg1 4)) ) diff --git a/test/decompiler/reference/engine/game/settings_REF.gc b/test/decompiler/reference/engine/game/settings_REF.gc index ec1ba65a45..a05af74d44 100644 --- a/test/decompiler/reference/engine/game/settings_REF.gc +++ b/test/decompiler/reference/engine/game/settings_REF.gc @@ -42,12 +42,9 @@ (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask progress)) ) - (let - ((v1-18 - ((method-of-type connection get-process) (the-as connection conn)) - ) - (a0-22 *progress-process*) - ) + (let ((v1-18 (get-process conn)) + (a0-22 *progress-process*) + ) (= v1-18 (if a0-22 (-> a0-22 0 self) ) diff --git a/test/decompiler/reference/engine/gfx/generic/generic_REF.gc b/test/decompiler/reference/engine/gfx/generic/generic_REF.gc index ae59c6a616..6cf27abe3c 100644 --- a/test/decompiler/reference/engine/gfx/generic/generic_REF.gc +++ b/test/decompiler/reference/engine/gfx/generic/generic_REF.gc @@ -93,8 +93,8 @@ (s2-0 (-> s0-0 base)) ) (if (>= s4-0 7) - (generic-init-buf s0-0 1 (the-as gs-zbuf s5-0)) - (generic-init-buf s0-0 1 (the-as gs-zbuf gp-0)) + (generic-init-buf s0-0 1 s5-0) + (generic-init-buf s0-0 1 gp-0) ) (generic-dma-foreground-sink-init s1-0) (let ((a3-0 (-> s0-0 base))) diff --git a/test/decompiler/reference/engine/nav/navigate-h_REF.gc b/test/decompiler/reference/engine/nav/navigate-h_REF.gc index cbf2886faa..5c35f8601c 100644 --- a/test/decompiler/reference/engine/nav/navigate-h_REF.gc +++ b/test/decompiler/reference/engine/nav/navigate-h_REF.gc @@ -557,10 +557,7 @@ ) (set! (-> obj max-spheres) sphere-count) (set! (-> obj flags) (nav-control-flags bit8 bit13)) - (set! - (-> obj mesh) - (nav-mesh-connect (-> shape process) shape (the-as nav-control obj)) - ) + (set! (-> obj mesh) (nav-mesh-connect (-> shape process) shape obj)) (let ((ent (-> shape process entity))) (set! (-> obj nearest-y-threshold) @@ -594,7 +591,7 @@ (defmethod should-display? nav-control ((obj nav-control)) (and *display-nav-marks* - (nonzero? (logand (-> obj flags) (nav-control-flags display-marks bit0))) + (nonzero? (logand (-> obj flags) (nav-control-flags bit0 display-marks))) ) ) diff --git a/test/decompiler/reference/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/levels/common/nav-enemy_REF.gc index 40f53811d2..e088a084a6 100644 --- a/test/decompiler/reference/levels/common/nav-enemy_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy_REF.gc @@ -3759,7 +3759,7 @@ nav-enemy-default-event-handler ) (logior! (-> obj nav flags) - (nav-control-flags display-marks bit0 bit3 bit5 bit6 bit7) + (nav-control-flags bit0 display-marks bit3 bit5 bit6 bit7) ) (set! (-> obj nav gap-event) 'jump) (dummy-26 (-> obj nav))