]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Fix array concat emission (type check)
authorJérémie Astor <fennecdjay@gmail.com>
Sat, 7 Aug 2021 01:09:51 +0000 (03:09 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Sat, 7 Aug 2021 01:09:51 +0000 (03:09 +0200)
src/lib/array.c

index 90a06d79d020b0224c23ec3bf1881807e42f83af..cba963e0afdd9eb0da344b0d3ffda533563e60d6 100644 (file)
@@ -128,6 +128,11 @@ static OP_CHECK(opck_array_at) {
   return bin->rhs->type;
 }
 
+ANN static inline bool shift_match(const Type base, const Type more) {
+  return isa(more, base) > 0 &&
+    get_depth(base) == get_depth(more);
+}
+
 ANN static Type check_array_shift(const Env env, const Exp a, const Exp b,
                                   const m_str str, const loc_t pos) {
   /*  if(a->type == env->gwion->type[et_error] &&
@@ -136,7 +141,7 @@ ANN static Type check_array_shift(const Env env, const Exp a, const Exp b,
   ARRAY_OPCK(a, b, pos)
   if (a->type->array_depth == b->type->array_depth + 1)
     return a->type;
-  else if (a->type->array_depth == b->type->array_depth)
+  else if (shift_match(a->type, b->type))
     return a->type;
   ERR_N(pos, "array depths do not match for '%s'.", str);
 }
@@ -200,11 +205,6 @@ static INSTR(ArrayConcatRight) {
   memmove(ARRAY_PTR(base), ARRAY_PTR(more), ARRAY_LEN(more) * sz);
 }
 
-ANN static inline bool shift_match(const Type base, const Type more) {
-  return isa(more, base) > 0 &&
-    get_depth(base) == get_depth(more);
-}
-
 static OP_EMIT(opem_array_sr) {
   const Exp_Binary *bin = (Exp_Binary *)data;
   if (shift_match(bin->lhs->type, bin->rhs->type))