diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | array.c | 15 |
2 files changed, 18 insertions, 1 deletions
@@ -1,3 +1,7 @@ +2021-03-20 Arnold D. Robbins <arnold@skeeve.com> + + * array.c (do_sort_up_value_type): Add logic for handling bools. + 2021-03-08 Arnold D. Robbins <arnold@skeeve.com> * awk.h (warn_bool, do_bool): Add function declarations. @@ -1209,11 +1209,24 @@ do_sort_up_value_type(const void *p1, const void *p2) (void) fixtype(n1); (void) fixtype(n2); + /* 3a. Bools first */ + if ((n1->flags & BOOL) != 0 && (n2->flags & BOOL) != 0) { + return cmp_numbers(n1, n2); + } + + /* 3b. Numbers next */ if ((n1->flags & NUMBER) != 0 && (n2->flags & NUMBER) != 0) { return cmp_numbers(n1, n2); } - /* 3. All numbers are less than all strings. This is aribitrary. */ + /* 3c. Bools before everything else */ + if ((n1->flags & BOOL) != 0 && (n2->flags & BOOL) == 0) { + return -1; + } else if ((n1->flags & BOOL) == 0 && (n2->flags & BOOL) != 0) { + return 1; + } + + /* 3d. All numbers are less than all strings. This is aribitrary. */ if ((n1->flags & NUMBER) != 0 && (n2->flags & STRING) != 0) { return -1; } else if ((n1->flags & STRING) != 0 && (n2->flags & NUMBER) != 0) { |