]> Nishi Git Mirror - gwion.git/commitdiff
:art: Fptr reference
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 12 Jul 2020 17:19:41 +0000 (19:19 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 12 Jul 2020 17:19:41 +0000 (19:19 +0200)
src/clean.c
src/import/fdef.c
src/parse/check.c
src/parse/scan0.c

index 361bcfd13f3893c4a52f4362c1f571f253c9839f..23798f02039962153d45fccd5db17ee242d56294 100644 (file)
@@ -315,6 +315,8 @@ ANN static void clean_union_def(Clean *a, Union_Def b) {
 
 ANN static void clean_fptr_def(Clean *a, Fptr_Def b) {
   clean_func_base(a, b->base);
+  if(b->type)
+    REM_REF(b->type, a->gwion)
 }
 
 ANN static void clean_type_def(Clean *a, Type_Def b) {
index 10af875ad8abdf6e67cc9113d37f0491b0738fd2..34140c18063925e210e76d9be94f323cf76b0952 100644 (file)
@@ -121,6 +121,8 @@ ANN Type gwi_fptr_end(const Gwi gwi, const ae_flag flag) {
     SET_FLAG(fptr->base->func, builtin);
   const Type t = ret > 0 ? fptr->type : NULL;
   free_fptr_def(gwi->gwion->mp, fptr);
+  if(fptr->type)
+    REM_REF(fptr->type, gwi->gwion)
   ck_end(gwi);
   return t;
 }
index ad2deb49ffd72ed073cfd1db75eacd0f7097b855..2b7123f90c8060dc2b9aa74bdd3bcfa69aec8e0c 100644 (file)
@@ -586,6 +586,8 @@ ANN static Func _find_template_match(const Env env, const Value v, const Exp_Cal
             nspc_add_type_front(v->from->owner, sym, actual_type(env->gwion, m_func->value_ref->type));
         }
         free_fptr_def(env->gwion->mp, fptr);
+        if(fptr->type)
+          REM_REF(fptr->type, env->gwion)
       }
     }
   } else {
index 5f2b6c5970535a6c5bcea37eb1fe3450918c6dcd..969388c7501bdcd00d587a48a4628bf88618e78a 100644 (file)
@@ -88,6 +88,7 @@ ANN m_bool scan0_fptr_def(const Env env, const Fptr_Def fptr) {
   SET_FLAG(fptr->value, func);
   add_type(env, t->e->owner, t);
   mk_class(env, t);
+  ADD_REF(t);
   return GW_OK;
 }