Commit ca4b0bd1241611c7d752a602e26296be5595f470

Thomas de Grivel 2024-09-23T15:04:57

fix compare_tag Uw vs other number

diff --git a/libkc3/compare.c b/libkc3/compare.c
index a3a7d68..8956a3e 100644
--- a/libkc3/compare.c
+++ b/libkc3/compare.c
@@ -1047,6 +1047,61 @@ s8 compare_tag (const s_tag *a, const s_tag *b) {
       break;
     }
     break;
+  case TAG_UW:
+    switch (b->type) {
+    case TAG_F32: return compare_f32((f32) a->data.uw, b->data.f32);
+    case TAG_F64: return compare_f64((f64) a->data.uw, b->data.f64);
+    case TAG_F128:
+      return compare_f128((f128) a->data.uw, b->data.f128);
+    case TAG_INTEGER:
+      integer_init_uw(&tmp, a->data.uw);
+      r = compare_integer(&tmp, &b->data.integer);
+      integer_clean(&tmp);
+      return r;
+    case TAG_S8:
+      integer_init_uw(&tmp, a->data.uw);
+      integer_init_s8(&tmp2, b->data.s8);
+      r = compare_integer(&tmp, &tmp2);
+      integer_clean(&tmp2);
+      integer_clean(&tmp);
+      return r;
+    case TAG_S16:
+      integer_init_uw(&tmp, a->data.uw);
+      integer_init_s16(&tmp2, b->data.s16);
+      r = compare_integer(&tmp, &tmp2);
+      integer_clean(&tmp2);
+      integer_clean(&tmp);
+      return r;
+    case TAG_S32:
+      integer_init_uw(&tmp, a->data.uw);
+      integer_init_s32(&tmp2, b->data.s32);
+      r = compare_integer(&tmp, &tmp2);
+      integer_clean(&tmp2);
+      integer_clean(&tmp);
+      return r;
+    case TAG_S64:
+      integer_init_uw(&tmp, a->data.uw);
+      integer_init_s64(&tmp2, b->data.s64);
+      r = compare_integer(&tmp, &tmp2);
+      integer_clean(&tmp2);
+      integer_clean(&tmp);
+      return r;
+    case TAG_SW:
+      integer_init_uw(&tmp, a->data.uw);
+      integer_init_sw(&tmp2, b->data.sw);
+      r = compare_integer(&tmp, &tmp2);
+      integer_clean(&tmp2);
+      integer_clean(&tmp);
+      return r;
+    case TAG_U8:  return compare_uw(a->data.uw, (uw) b->data.u8);
+    case TAG_U16: return compare_uw(a->data.uw, (uw) b->data.u16);
+    case TAG_U32: return compare_uw(a->data.uw, (uw) b->data.u32);
+    case TAG_U64: return compare_uw(a->data.uw, b->data.u64);
+    case TAG_UW:  return compare_uw(a->data.uw, (uw) b->data.uw);
+    default:
+      break;
+    }
+    break;
   default:
     break;
   }