]> Nishi Git Mirror - gwion.git/commitdiff
:art: proper constructor checking wrt super
authorfennecdjay <fennecdjay@gmail.com>
Thu, 8 Dec 2022 13:33:37 +0000 (14:33 +0100)
committerfennecdjay <fennecdjay@gmail.com>
Thu, 8 Dec 2022 13:33:37 +0000 (14:33 +0100)
src/parse/check.c

index fe3563977330eb5a5da51646eeee7874459116b9..d6844c6950ce4e3edff2dd3c99c7284a43b6e41c 100644 (file)
@@ -1817,10 +1817,17 @@ ANN m_bool check_fdef(const Env env, const Func_Def fdef) {
 
 ANN static m_bool check_ctor(const Env env, const Func func) {
   if(!func->def->builtin && !GET_FLAG(func, const)) {
-    const Value v = nspc_lookup_value0(env->class_def->info->parent->nspc, insert_symbol("new"));
-    if(v && !GET_FLAG(v, abstract))
-      ERR_B(func->def->base->pos, "missing call to parent constructor");
+    const Type_Decl *td = env->class_def->info->cdef->base.ext;
+    const m_uint depth = !td || !td->array
+      ? 1 : td->array->exp->d.prim.d.num;
+    if(depth) { // check if size is 0
+      const Type parent = env->class_def->info->parent;
+      const Value v = nspc_lookup_value0(parent->nspc, insert_symbol("new"));
+      if(v && !GET_FLAG(v->d.func_ref->def->base, abstract))
+        ERR_B(func->def->base->pos, "missing call to parent constructor");
+    }
   }
+
   return GW_OK;
 }