]> Nishi Git Mirror - gwion.git/commitdiff
:art: Ensure array extensions use literals
authorfennecdjay <fennecdjay@gmail.com>
Thu, 8 Dec 2022 13:31:47 +0000 (14:31 +0100)
committerfennecdjay <fennecdjay@gmail.com>
Thu, 8 Dec 2022 13:31:47 +0000 (14:31 +0100)
src/parse/scan0.c

index 751d0739f93532fa08e20ddb852a7cd3a2ab6c29..6c71530e168a8b291ccf5a3063261df676b8dfae 100644 (file)
@@ -296,6 +296,12 @@ ANN static inline Type scan0_final(const Env env, Type_Decl *td) {
 ANN static Type cdef_parent(const Env env, const Class_Def cdef) {
   if (cflag(cdef, cflag_struct)) return env->gwion->type[et_compound];
   if (!cdef->base.ext) return env->gwion->type[et_object];
+  Exp e = cdef->base.ext->array ? cdef->base.ext->array->exp : NULL;
+  while(e) {
+    if(!is_prim_int(e))
+      ERR_O(e->pos, "non null array type extension must be literal");
+    e = e->next;
+  }
   if (tmpl_base(cdef->base.tmpl)) return get_parent_base(env, cdef->base.ext);
   const bool tmpl = !!cdef->base.tmpl;
   if (tmpl) template_push_types(env, cdef->base.tmpl);