fix JIT not allocating stack capacity for empty arrays
This commit is contained in:
parent
c17280d96d
commit
1ab511f657
@ -387,22 +387,27 @@ static OptRes opt(u32* bc0) {
|
||||
break;
|
||||
}
|
||||
case LSTO: case LSTM: { i32 len = *bc++;
|
||||
bool allNum = len>0;
|
||||
for (i32 i = 0; i < len; i++) { S(c,i);
|
||||
if(c.p==-1) goto defIns;
|
||||
allNum&= isNum(c.v);
|
||||
if (len == 0) {
|
||||
TSADD(stk, SREF(bi_emptyHVec, pos));
|
||||
cact = 0;
|
||||
} else {
|
||||
bool allNum = len>0;
|
||||
for (i32 i = 0; i < len; i++) { S(c,i);
|
||||
if(c.p==-1) goto defIns;
|
||||
allNum&= isNum(c.v);
|
||||
}
|
||||
TSSIZE(stk)-= len-1; // huh, doing this beforehand works out nicely
|
||||
HArr_p h = m_harrUv(len);
|
||||
for (i32 i = 0; i < len; i++) { S(c,-i);
|
||||
h.a[i] = inc(c.v);
|
||||
RM(c.p);
|
||||
}
|
||||
NOGC_E;
|
||||
B r = allNum? squeeze_numNew(h.b) : h.b;
|
||||
cact = 5;
|
||||
TSADD(data, r.u);
|
||||
stk[TSSIZE(stk)-1] = SREF(r, pos);
|
||||
}
|
||||
TSSIZE(stk)-= len-1; // huh, doing this beforehand works out nicely
|
||||
HArr_p h = m_harrUv(len);
|
||||
for (i32 i = 0; i < len; i++) { S(c,-i);
|
||||
h.a[i] = inc(c.v);
|
||||
RM(c.p);
|
||||
}
|
||||
NOGC_E;
|
||||
B r = allNum? squeeze_numNew(h.b) : h.b;
|
||||
cact = 5;
|
||||
TSADD(data, r.u);
|
||||
stk[TSSIZE(stk)-1] = SREF(r, pos);
|
||||
break;
|
||||
}
|
||||
case RETN: case RETD:
|
||||
@ -416,6 +421,7 @@ static OptRes opt(u32* bc0) {
|
||||
}
|
||||
#undef S
|
||||
#undef L64
|
||||
assert(stk_o->size <= stk_o->cap);
|
||||
TSADD(actions, cact);
|
||||
if (ret) break;
|
||||
bc = nextBC(sbc);
|
||||
|
||||
1
src/vm.c
1
src/vm.c
@ -58,6 +58,7 @@ void print_BCStream(FILE* f, u32* p) {
|
||||
if (*p == RETD || *p == RETN) return;
|
||||
p = nextBC(p);
|
||||
}
|
||||
fflush(f);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -83,3 +83,7 @@ X←1‿2{a⇐𝕘-𝕗}3‿4 ⋄ ⟨a⟩←x ⋄ +´a %% 4
|
||||
{𝕊: a←"ab" ⋄ ⟨(a⋈↩"c")‿"d", a⟩}¨ ↕4 %% 4⥊<⟨⟨"ab","c"⟩‿"d", ⟨"ab","c"⟩⟩
|
||||
{𝕊: a←"ab" ⋄ ⟨(a↩"c")‿"d", a⟩}¨ ↕4 %% 4⥊<⟨"c"‿"d", "c"⟩
|
||||
{𝕊: a←"ab" ⋄ ⟨(b←"c")‿"d", a, b⟩}¨ ↕4 %% 4⥊<⟨"c"‿"d", "ab", "c"⟩
|
||||
|
||||
# optimizer bug
|
||||
{𝕏¨ ↕5}¨ •BQN '⟩'∾˜ '⟨'∾∾ {",{𝕊:"∾"⟨⟩}"∾˜(2×𝕩)⥊"𝕩‿"}¨↕50 %% {𝕊i: {⋈⁼⍟(i=0) ⟨⟨⟩⟩∾˜i⥊𝕩}¨ ↕5}¨ ↕50
|
||||
{𝕏¨ ↕5}¨ •BQN '⟩'∾˜ '⟨'∾∾ {",{𝕊:"∾"⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩}"∾˜(2×𝕩)⥊"𝕩‿"}¨↕50 %% {𝕊i: {(i⥊𝕩)∾12⥊<⟨⟩}¨ ↕5}¨ ↕50
|
||||
|
||||
Loading…
Reference in New Issue
Block a user