diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2021-03-20 21:37:35 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2021-03-20 21:37:35 +0200 |
commit | e1b7b04b63a83913f62e4bfff645b940eacf7803 (patch) | |
tree | 77d9b3b261682c796dd7935ade6922fc913abecf /array.c | |
parent | 40cd3b0df6128e5b111c9b7c5c9892eac13a3497 (diff) | |
download | egawk-e1b7b04b63a83913f62e4bfff645b940eacf7803.tar.gz egawk-e1b7b04b63a83913f62e4bfff645b940eacf7803.tar.bz2 egawk-e1b7b04b63a83913f62e4bfff645b940eacf7803.zip |
Handle bools for array sorting.
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -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) { |