diff --git a/src/builtins/internal.c b/src/builtins/internal.c index 05839990..93ba1f7f 100644 --- a/src/builtins/internal.c +++ b/src/builtins/internal.c @@ -231,8 +231,8 @@ static NOINLINE B unshareShape(Arr* x) { arr_shReplace(x, xr, sh); return taga(x); } -static B unshare(B x) { - if (!isArr(x)) return x; +static B unshare(B x) { // doesn't consume + if (!isArr(x)) return inc(x); usz xia = IA(x); switch (TY(x)) { case t_bitarr: return unshareShape((Arr*)cpyBitArr(incG(x))); diff --git a/test/cases/system.bqn b/test/cases/system.bqn index 677b0890..79ae5830 100644 --- a/test/cases/system.bqn +++ b/test/cases/system.bqn @@ -413,5 +413,6 @@ a←⋈"Ai32"•internal.Variation ↕10 ⋄ •internal.Type ⊑•internal.Dee •internal.ClearRefs@ ⋄ •internal.Variation⟜(↕10)¨ 10⥊<"Ai32Inc" ⋄ •internal.ClearRefs "foo" %% 10 # •internal.Unshare •internal.Refc∘•internal.Unshare¨ ⟨↕0, "", ⟨⟩, ↕10⟩ %% 1‿1‿1‿1 +⟨a⟩‿b‿c ← •internal.Unshare ⟨{a⇐↕2},"hi",3⟩ ⋄ a‿b‿c %% ⟨0‿1, "hi", 3⟩ # •internal.EEqual %USE nan ⋄ a←1⌽nans∾•ParseFloat¨"0"‿"1.2"‿"-0" ⋄ a •internal.EEqual ⌽a %% 1