]> Nishi Git Mirror - gwion.git/commitdiff
:art: Few fixes
authorfennecdjay <astor.jeremie@wanadoo.fr>
Fri, 17 May 2019 13:25:06 +0000 (15:25 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Fri, 17 May 2019 13:25:15 +0000 (15:25 +0200)
src/parse/scanx.c
src/parse/template.c

index 5762760bcb733cd433e65425a1f5df2d1e596150..6d127b1005e4682e5811515fff997340937c0122 100644 (file)
@@ -15,10 +15,14 @@ ANN static inline m_bool _body(const Env e, Class_Body b, const _exp_func f) {
   return GW_OK;
 }
 
-ANN static inline m_uint _push(const Env e, const Class_Def c) {
-  const m_uint scope = env_push_type(e, c->base.type);
-  if(c->tmpl)
-    template_push_types(e, c->tmpl->list.list, c->tmpl->base);
+ANN static inline m_int _push(const Env env, const Class_Def c) {
+  const m_uint scope = env_push_type(env, c->base.type);
+  if(c->tmpl) {
+    if(!c->tmpl->base)
+      ERR_B(c->pos,
+        "you must provide template types for type '%s'", s_name(c->base.xid))
+    CHECK_BB(template_push_types(env, c->tmpl->list.list, c->tmpl->base))
+  }
   return scope;
 }
 
@@ -30,7 +34,8 @@ ANN static inline void _pop(const Env e, const Class_Def c, const m_uint s) {
 
 ANN m_bool
 scanx_body(const Env e, const Class_Def c, const _exp_func f, void* d) {
-  const m_uint scope = _push(e, c);
+  const m_int scope = _push(e, c);
+  CHECK_BB(scope)
   const m_bool ret =  _body(d, c->body, f);
   _pop(e, c, scope);
   return ret;
index 5c2206d01b4eb0b2624a6862ec9ae0607890d2a0..c9e75c26569046d4d9830b84759d00e130135c8d 100644 (file)
@@ -146,9 +146,6 @@ ANN Type scan_type(const Env env, const Type t, const Type_Decl* type) {
   if(GET_FLAG(t, template)) {
     if(GET_FLAG(t, ref))
       return t;
-    if(!type->types)
-      ERR_O(type->xid->pos,
-        "you must provide template types for type '%s'", t->name)
     if(template_match(t->e->def->tmpl->list.list, type->types) < 0)
       ERR_O(type->xid->pos, "invalid template types number")
     const Class_Def a = template_class(env, t->e->def, type->types);