]> Nishi Git Mirror - gwion.git/commitdiff
Fix nested templates/typedefs
authorJérémie Astor <fennecdjay@gmail.com>
Sun, 3 Apr 2022 21:52:44 +0000 (23:52 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Sun, 3 Apr 2022 21:52:44 +0000 (23:52 +0200)
src/env/envset.c
src/lib/tmpl_info.c
src/parse/template.c

index 6e03141b68d2881e20e4684067c7f56d4ad8b373..ac0d37b1c6e11dc8a2174470c617a0b8ef07d1bf 100644 (file)
@@ -43,8 +43,8 @@ ANN2(1, 3)
 m_bool envset_push(struct EnvSet *es, const Type t, const Nspc nspc) {
   if (t) {
     check(es, t);
-    if(es->run && type_global(es->env, t))
-      env_push_global(es->env);
+//    if(es->run && type_global(es->env, t))
+//      env_push_global(es->env);
     return es->run ? push(es, t) : GW_OK;
   }
   if (nspc != es->env->curr) {
@@ -68,8 +68,8 @@ ANN2(1) static void _envset_pop(struct EnvSet *es, const Type t) {
 
 ANN2(1) void envset_pop(struct EnvSet *es, const Type t) {
   _envset_pop(es, t);
-  if(t && type_global(es->env, t))
-    env_pop(es->env, es->scope);
+//  if(t && type_global(es->env, t))
+//    env_pop(es->env, es->scope);
   if (es->_ctx) es->env->context = es->_ctx;
   if (es->_filename) es->env->name = es->_filename;
 }
index 4b294af51c72f3108da31ed498367bee303536da..65705889d525e96d4bbb5c1b44db33a754a278e5 100644 (file)
@@ -47,6 +47,7 @@ ANN static ssize_t template_size(const Env env, struct tmpl_info *info) {
   const size_t tmpl_sz = tmpl_set(info, str);
   const m_str  base    = type2str(env->gwion, info->base, info->td->pos);
   return tmpl_sz + tmpl_set(info, base) + 4;
+//  return tmpl_sz + tmpl_set(info, info->base->name) + 4;
 }
 
 ANEW ANN static Symbol _template_id(const Env env, struct tmpl_info *const info,
index eaf5b67b27a31944513d40926bcab5af977111e8..69d3d53cc363cdf6fc48c26f8d2d0300fe1dca04 100644 (file)
@@ -119,9 +119,11 @@ ANN static Type _scan_type(const Env env, const Type t, Type_Decl *td) {
     if(!td->types) {
       const Type new_type = nspc_lookup_type1(env->curr, td->xid);
       Type_Decl *new_td = type2td(env->gwion, new_type, td->pos);
-      if(!new_td->types)
+      Type_Decl *d = new_td;
+      while(d->next) d = d->next;
+      if(!d->types)
         ERR_N(td->pos, _("you must provide template types for type '%s' !!!"), t->name);
-      const Type ret = _scan_type(env, t, new_td);
+      const Type ret = _scan_type(env, t, d);
       free_type_decl(env->gwion->mp, new_td);
       return ret;
     }