From f0744f16d07080adf9072706ed4857f37a9d3432 Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 22 May 2023 00:11:21 +0300 Subject: [PATCH] fix erroring variable read --- src/vm.c | 8 ++++---- test/cases/syntax.bqn | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/vm.c b/src/vm.c index e6d6b66c..be3bab36 100644 --- a/src/vm.c +++ b/src/vm.c @@ -604,10 +604,9 @@ NOINLINE B v_getF(Scope* pscs[], B s) { VTY(s, t_harr); usz ia = IA(s); B* sp = harr_ptr(s); - HArr_p r = m_harrUv(ia); - for (u64 i = 0; i < ia; i++) r.a[i] = v_get(pscs, sp[i], true); - NOGC_E; - return r.b; + M_HARR(r, ia); + for (u64 i = 0; i < ia; i++) HARR_ADD(r, i, v_get(pscs, sp[i], true)); + return HARR_FV(r); } else if (isExt(s)) { Scope* sc = pscs[V_DEPTH(s)]; B r = sc->ext->vars[V_POS(s)]; @@ -1724,6 +1723,7 @@ NOINLINE void freeThrown() { } NOINLINE NORETURN void thrM(char* s) { + NOGC_CHECK("throwing during noAlloc"); thr(utf8Decode0(s)); } NOINLINE NORETURN void thrOOM() { diff --git a/test/cases/syntax.bqn b/test/cases/syntax.bqn index d76cadbd..dd8c8666 100644 --- a/test/cases/syntax.bqn +++ b/test/cases/syntax.bqn @@ -33,6 +33,9 @@ a←"zero"‿"one" ⋄ !a≡a⊸{𝕩?1⊑𝕨;0⊑𝕨}¨0‿1 !"↩: Reading variable that hasn't been set" % {a⊢↩↕10} ⋄ a←2 !"↩: Updating variable that hasn't been set" % {a↩↕10} ⋄ a←2 !"↩: Reading variable that hasn't been set" % {a (↕10)˙↩} ⋄ a←2 +!"↩: Reading variable that hasn't been set" % a←1 ⋄ {a‿b⊢↩↕2} ⋄ b←2 +!"↩: Updating variable that hasn't been set" % a←1 ⋄ {a‿b↩↕2} ⋄ b←2 +!"↩: Reading variable that hasn't been set" % a←1 ⋄ {a‿b (↕10)˙↩} ⋄ b←2 !"Assignment: Mismatched shape for spread assignment" % a‿b←1 !"Assignment: Mismatched shape for spread assignment" % a‿b←1‿2‿3 !"Assignment: Mismatched shape for spread assignment" % ⟨a⟩←<1