]> Nishi Git Mirror - gwion.git/commitdiff
:art: mk_dtor is now public
authorfennecdjay <fennecdjay@gmail.com>
Fri, 29 Mar 2024 13:37:27 +0000 (14:37 +0100)
committerfennecdjay <fennecdjay@gmail.com>
Fri, 29 Mar 2024 13:37:27 +0000 (14:37 +0100)
include/import/cdef.h
src/import/import_cdef.c
src/lib/array.c
src/lib/dict.c

index 255ba710b6e5559086d16232b2f86140f1d22672..1486f2ee995b3d8b6db9cc854901c7856e7299e1 100644 (file)
@@ -4,6 +4,7 @@ ANN2(1, 2) Type gwi_class_ini(const Gwi gwi, const m_str, const m_str parent);
 ANN2(1, 2) Type gwi_struct_ini(const Gwi gwi, const m_str);
 ANN2(1)
 void      gwi_class_xtor(const Gwi gwi, const f_xtor ctor, const f_xtor dtor);
+ANN void mk_dtor(MemPool p, const Type t, const f_xtor d);
 ANN bool gwi_class_end(const Gwi gwi);
 #define gwi_struct_end(a) gwi_class_end(a)
 ANN void inherit(const Type);
index b7e2270305ceeca81e43a352ec8ab655649e4bde..d453bf9c253d6246dfc55d653733c34fe1962c11 100644 (file)
@@ -17,7 +17,7 @@
 #include "specialid.h"
 #include "template.h"
 
-ANN static void mk_dtor(MemPool p, const Type t, const m_uint d) {
+ANN void mk_dtor(MemPool p, const Type t, const f_xtor d) {
   VM_Code code = t->nspc->dtor = new_vmcode(p, NULL, NULL, t->name, SZ_INT, true, false);
   code->native_func = (m_uint)d;
   set_tflag(t, tflag_dtor);
@@ -43,7 +43,7 @@ ANN2(1) void add_template(const Env env, const Type t) {
 ANN2(1)
 void gwi_class_xtor(const Gwi gwi, const f_xtor ctor, const f_xtor dtor) {
   const Type t = gwi->gwion->env->class_def;
-  if (dtor) mk_dtor(gwi->gwion->mp, t, (m_uint)dtor);
+  if (dtor) mk_dtor(gwi->gwion->mp, t, dtor);
   if (ctor) {
     gwi_func_ini(gwi, "void", "@ctor");
     gwi_func_end(gwi, ctor, ae_flag_none);
index 2d4142517eb585bad7044121e60e3cdbe6e89ad8..ad81b1387e61d798012aa14837003895f071a003 100644 (file)
@@ -861,12 +861,8 @@ static OP_CHECK(opck_array_scan) {
   array_func(env, t, "foldl", vm_vector_foldl);
   array_func(env, t, "foldr", vm_vector_foldr);
 
-  if (tflag(base, tflag_compound)) {
-    t->nspc->dtor = new_vmcode(env->gwion->mp, NULL, NULL,
-                               "array component dtor", SZ_INT, true, false);
-    set_tflag(t, tflag_dtor);
-    t->nspc->dtor->native_func = (m_uint)get_dtor(base);
-  }
+  if (tflag(base, tflag_release))
+    mk_dtor(env->gwion->mp, t, get_dtor(base));
   return t;
 }
 
index a0fd7dfe6643336f1601e79947558ca7ba803a34..3864b3e3019183b09d198e666e6d52a8c8aa27ca 100644 (file)
@@ -584,11 +584,8 @@ static OP_CHECK(opck_dict_scan) {
   }
   HMapInfo *const hinfo = (HMapInfo*)t->nspc->class_data;
   hmapinfo_init(hinfo, key, val);
-  if(tflag(key, tflag_release) || tflag(val, tflag_release)) {
-    t->nspc->dtor = new_vmcode(env->gwion->mp, NULL, NULL, "@dtor", SZ_INT, true, false);
-    t->nspc->dtor->native_func = (m_uint)dict_clear_dtor;
-    set_tflag(t, tflag_dtor);
-  }
+  if(tflag(key, tflag_release) || tflag(val, tflag_release))
+    mk_dtor(env->gwion->mp, t, dict_clear_dtor);
   struct Op_Func opfunc = { .ck = opck_dict_access, .em = opem_dict_access };
   struct Op_Import opi = { .lhs = key, .rhs = t, .ret = val, .op = insert_symbol("[]"), .func = &opfunc };
   add_op(env->gwion, &opi);