]> Nishi Git Mirror - gwion.git/commitdiff
:art: Copy Global class defs
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Mon, 13 Apr 2020 16:42:49 +0000 (18:42 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Mon, 13 Apr 2020 16:42:49 +0000 (18:42 +0200)
src/env/type.c
src/parse/scan0.c

index df5828880771d0762b2cafa2a35f3b300e206d9c..1249dd30164f69bf68918c68599f668fa02c5e51 100644 (file)
@@ -7,7 +7,8 @@
 #include "gwion.h"
 
 ANN static inline m_bool freeable(const Type a) {
-  return !GET_FLAG(a, nonnull) && GET_FLAG(a, template);
+  return !GET_FLAG(a, nonnull) &&
+      (GET_FLAG(a, template) || GET_FLAG(a, global));
 }
 
 ANN static void free_type(Type a, Gwion gwion) {
index 2481ff82ac3e51740d7f8af5d3d3b52c44095893..6d4cb056ac71f0145850ae249f4e446ab0840ddc 100644 (file)
@@ -382,7 +382,7 @@ ANN m_bool scan0_class_def(const Env env, const Class_Def cdef) {
   if(GET_FLAG(cdef, global))
     env->curr = (Nspc)vector_pop(&env->scope->nspc_stack);
   CHECK_BB(ret)
-  if(cdef->base.tmpl && !cdef->base.tmpl->call) {
+  if(GET_FLAG(cdef, global) || (cdef->base.tmpl && !cdef->base.tmpl->call)) {
     const Class_Def c = cpy_class_def(env->gwion->mp, cdef);
     c->base.type = cdef->base.type;
     c->base.type->e->def = c;