]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve fptr template parsing
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Tue, 12 May 2020 16:17:14 +0000 (18:17 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Tue, 12 May 2020 17:30:44 +0000 (19:30 +0200)
src/parse/check.c
src/parse/scan1.c
src/parse/scan2.c

index e29b959fb4dfc5e599693b892384895e9db02949..9270a82d7ff084a4e63bf084e3e388ee94f938a1 100644 (file)
@@ -581,7 +581,8 @@ ANN Func find_template_match(const Env env, const Value value, const Exp_Call* e
     return f;
   Type t = value->from->owner_class;
   while(t && t->nspc) {
-    const Value v = nspc_lookup_value0(t->nspc, value->d.func_ref->def->base->xid);
+    Func_Def fdef = value->d.func_ref ? value->d.func_ref->def : value->type->e->d.func->def;
+    const Value v = nspc_lookup_value0(t->nspc, fdef->base->xid);
     if(!v)
       goto next;
      const Func f = _find_template_match(env, v, exp);
index 6bac630a06366454daacd51ccbb53890f65fa676..8a6bbf32a2d08dd375acb26ca90f0add41344263 100644 (file)
@@ -322,10 +322,7 @@ ANN m_bool scan1_fptr_def(const Env env, const Fptr_Def fptr) {
   CHECK_OB((fdef->base->ret_type = scan1_type(env, fdef->base->td)))
   if(!fdef->base->args)
     return GW_OK;
-  ++env->scope->depth;
-  const m_bool ret = scan1_args(env, fdef->base->args);
-  --env->scope->depth;
-  return ret;
+  RET_NSPC(scan1_args(env, fdef->base->args))
 }
 
 ANN m_bool scan1_type_def(const Env env, const Type_Def tdef) {
index 7e9bde947fe7802ba987809641e11c3cd0d1569d..b0a6c336b3000fe8c5eabb1d020d7b5a387bd991 100644 (file)
@@ -74,10 +74,7 @@ ANN m_bool scan2_fptr_def(const Env env NUSED, const Fptr_Def fptr) {
   if(!tmpl_base(fptr->base->tmpl)) {
     const Func_Def def = fptr->type->e->d.func->def;
     if(def->base->args) {
-      ++env->scope->depth;
-      const m_bool ret = scan2_args(def);
-      --env->scope->depth;
-      return ret;
+      RET_NSPC(scan2_args(def))
     }
   } else
     SET_FLAG(fptr->type, func);