diff options
Diffstat (limited to 'byterun/compare.c')
-rw-r--r-- | byterun/compare.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/byterun/compare.c b/byterun/compare.c index 1c9919edf..99c26321d 100644 --- a/byterun/compare.c +++ b/byterun/compare.c @@ -42,6 +42,18 @@ static long compare_val(v1, v2) double d2 = Double_val(v2); if (d1 == d2) return 0; else if (d1 < d2) return -1; else return 1; } + case Double_array_tag: { + mlsize_t sz1 = Wosize_val(v1); + mlsize_t sz2 = Wosize_val(v2); + mlsize_t i; + if (sz1 != sz2) return sz1 - sz2; + for (i = 0; i < sz1; i++) { + double d1 = Double_field(v1, i); + double d2 = Double_field(v2, i); + if (d1 != d2) { if (d1 < d2) return -1; else return 1; } + } + return 0; + } case Abstract_tag: case Final_tag: invalid_argument("equal: abstract value"); |