From 9cb0ab2fbb75aaeb07ae6ed12566c678899d735b Mon Sep 17 00:00:00 2001 From: dzaima Date: Thu, 8 Feb 2024 19:25:30 +0200 Subject: [PATCH] Use getRange_fns for repeat_bounds --- src/builtins/md2.c | 23 +++++++++++++---------- test/cases/prims.bqn | 6 ++++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/builtins/md2.c b/src/builtins/md2.c index 876a241e..f5d545c3 100644 --- a/src/builtins/md2.c +++ b/src/builtins/md2.c @@ -1,6 +1,7 @@ #include "../core.h" #include "../utils/each.h" #include "../utils/talloc.h" +#include "../utils/calls.h" #include "../nfns.h" #include "../builtins.h" @@ -55,23 +56,25 @@ B catch_c2(Md2D* d, B w, B x) { return c2(d->f, w,x); } extern GLOBAL B rt_undo; void repeat_bounds(i64* bound, B g) { // doesn't consume - #define UPD_BOUNDS(I) ({ i64 i_ = (I); if (i_bound[1]) bound[1] = i_; }) + #define UPD_BOUNDS(B,I) ({ i64 i_ = (I); if (i_bound[1]) bound[1] = i_; }) if (isArr(g)) { usz ia = IA(g); - u8 xe = TI(g,elType); - if (elNum(xe)) { - incG(g); - if (xebound[1]) bound[1] = bres[1]; } else { SGetU(g) for (usz i = 0; i < ia; i++) repeat_bounds(bound, GetU(g, i)); } } else if (isNum(g)) { - UPD_BOUNDS(o2i64(g)); - } else thrM("⍟: 𝔾 contained a non-number atom"); + if (!q_i64(g)) thrM("⍟: 𝔾 contained non-integer (or integer was out of range)"); + i64 c = o2i64G(g); + if (cbound[1]) bound[1] = c; + } else thrM("⍟: 𝔾 contained non-number"); } B repeat_replaceR(B g, B* q); FORCE_INLINE B repeat_replace(B g, B* q) { // doesn't consume diff --git a/test/cases/prims.bqn b/test/cases/prims.bqn index cd2a805f..86a1f90e 100644 --- a/test/cases/prims.bqn +++ b/test/cases/prims.bqn @@ -323,6 +323,12 @@ w←1β€Ώ1β₯Š1 β‹„ x←2β₯Š1 β‹„ wβ€Ώx <¨↩ β‹„ {! (βˆΎβŸ¨β€’Repr𝕩,": Expe %USE eqvar β‹„ a←¯5+↕10 β‹„ {1⊸+βŸπ•© β‹ˆ10}_eqvar a %% β‹ˆΒ¨ 5+↕10 %USE eqvar β‹„ a←¯5+↕10 β‹„ {1+βŸπ•© β‹ˆ10}_eqvar a %% β‹ˆΒ¨ 5+↕10 %USE eqvar β‹„ a←¯5+↕10 β‹„ {1+⍟(𝕩{!π•©β‰‘β‹ˆ10 β‹„ 𝕗}) β‹ˆ10}_eqvar a %% β‹ˆΒ¨ 5+↕10 +!"Calling a modifier" % 1⊸+⍟{∘} 0 +!"⍟: 𝔾 contained non-number" % 1⊸+⍟⟨1,∘,3⟩ 0 +!"Expected integer, got 1.5" % 1⊸+⍟1.5 0 +!"Integer out of range: 1e20" % 1⊸+⍟1e20 0 +!"⍟: 𝔾 contained non-integer (or integer was out of range)" % %USE evar β‹„ {1⊸+βŸπ•© 0}_evar ⟨1.5⟩ +!"⍟: 𝔾 contained non-integer (or integer was out of range)" % %USE evar β‹„ {1⊸+βŸπ•© 0}_evar ⟨1e20⟩ # β—Ά !"β—Ά: π•˜ must have rank 1 when index is a number" % 1β—Ά[1β€Ώ2,3β€Ώ4] 3