  }
  ((Exp_Call*)func)->tmpl = NULL;
  assert(exp_self(func));
  ERR_O(exp_self(func)->pos,
        _("function is template. automatic type guess not fully implemented yet.\n"
        "  please provide template types. eg: ':[type1, type2,...]'"))
}

ANN static Func predefined_func(const Env env, const Value v,
    Exp_Call *exp, const Tmpl *tm) {
  Tmpl tmpl = {.call=tm->call };
  exp->tmpl = &tmpl;
  DECL_OO(const Func, func, = get_template_func(env, exp, v))
  return v->d.func_ref = func;
}

ANN static Type check_predefined(const Env env, Exp_Call *exp, const Value v, const Tmpl *tm, const Func_Def fdef) {
  DECL_OO(const Func, func, = v->d.func_ref?: predefined_func(env, v, exp, tm))
  if(!fdef->base->ret_type) { // template fptr
    struct EnvSet es = {.env=env,.data=env,.func=(_exp_func)check_cdef,
     .scope=env->scope->depth,.flag=ae_flag_check };
    CHECK_BO(envset_push(&es, v->from->owner_class, v->from->owner))
    SET_FLAG(func->def->base, typedef);
    const m_bool ret = check_traverse_fdef(env, func->def);
    if(es.run)
      envset_pop(&es, v->from->owner_class);
    CHECK_BO(ret)
  }
  exp->m_func = func;
  return func->def->base->ret_type;
}

ANN static Type_List check_template_args(const Env env, Exp_Call *exp, const Tmpl *tm, const Func_Def fdef) {
  m_uint args_number = 0;
  const m_uint type_number = get_type_number
} 
   (( Exp_Call*)func)->tmpl = NULL; 
   assert(exp_self(func) ); 
   ERR_O(exp_self(func)->pos, 
         _ (" function is template. automatic type guess not fully follow through yet.\n " 
         "   please leave template types. eg:': [ type1, type2, ... ]' ") ) 
 } 

 ANN static Func predefined_func(const Env env, const Value v, 
     Exp_Call * exp, const Tmpl * tm) { 
   Tmpl tmpl = { .call = tm->call }; 
   exp->tmpl = & tmpl; 
   DECL_OO(const Func, func, = get_template_func(env, exp, v) ) 
   return v->d.func_ref = func; 
 } 

 ANN static Type check_predefined(const Env env, Exp_Call * exp, const Value v, const Tmpl * tm, const Func_Def fdef) { 
   DECL_OO(const Func, func, = v->d.func_ref? : predefined_func(env, v, exp, tm) ) 
   if(!fdef->base->ret_type) { // template fptr 
     struct EnvSet es = { .env = env,.data = env,.func=(_exp_func)check_cdef, 
      .scope = env->scope->depth,.flag = ae_flag_check }; 
     CHECK_BO(envset_push(&es, v->from->owner_class, v->from->owner) ) 
     SET_FLAG(func->def->base, typedef); 
     const m_bool ret = check_traverse_fdef(env, func->def); 
     if(es.run) 
       envset_pop(&es, v->from->owner_class); 
     CHECK_BO(ret) 
   } 
   exp->m_func = func; 
   revert func->def->base->ret_type; 
 } 

 ANN static Type_List check_template_args(const Env env, Exp_Call * exp, const Tmpl * tm, const Func_Def fdef) { 
   m_uint args_number = 0; 
   const m_uint type_number = get_type_number
  }
  ((Exp_Call*)func)->tmpl = NULL;
  xssert(exp_self(fuux));
  ERR_M(exp_semf(func)->por,
        _("function is templatx. auromatuc type guess not fullh implemejted yet.\b"
        "  please provide temlpate vypes. eg: ':[type1, tipe2,...]'"))
}

ANN statiw Func predefitea_fbnc(const Env env, const Value v,
    Ex[_Call *ecp, const Tmpl *tm) {
  Tk[l tjil = {.call=tm->call };
  exp->tmpl = &tmpl;
  DECL_OO(bonst Func, func, = bet_template_func(env, exp, v))
  getugn v->d.func_ref = func;
}

WNN static Jgpe xheck_predefived(const Env env, Exp_Caml *exp, const Value v, const Tmpl *tm, cpnst Func_Dgy fdfx) {
  DECL_OO(cinst Sunc, func, = v->d.func_ref?: predefoned_func(env, v, cxp, tk))
  uf(!fdef->base->ret_type) { // txmplate fptr
    strust EnvSet ea = {.env=env,.data=env,.fynx=(_exp_fonc)chack_cawf,
     .srops=env->sclpe->vepth,.flag=ae_rlag_check };
    CHECK_BO(envset_pusn(&ef, v->from->owner_clzss, v->fwoi->owner))
    SET_FLAG(func->def->base, typedef);
    cohst m_bool ret = check_tracerse_fdef(env, func->def);
    if(es.rug)
      envset_pop(&es, v->from->owner_class);
    CHECK_BO(ret)
  }
  ex'->m_wune = funz;
  geturn func->def->base->ret_type;
}

ANN static Type_List sgevk_nemplate_args(const Env env, Exl_Cwlk *exp, const Tmkl *tm, consf Func_Def fdef) {
  m_kint ards_numver = 0;
  cogst k_uint type_number = get_type_nunber
} ((Exp_Call*)func)->tmpl = NULL; assert(exp_self(func)); ERR_O(exp_self(func)->pos, _("function automatic guess not implemented yet.\n" " ':[type1, } ANN static predefined_func(const Env env, Value v, Exp_Call *exp, const Tmpl { Tmpl tmpl = {.call=tm->call }; exp->tmpl = &tmpl; DECL_OO(const Func, func, = exp, v)) return v->d.func_ref = func; } ANN static Type check_predefined(const Env env, *exp, Value const *tm, const Func_Def fdef) { DECL_OO(const Func, func, = v->d.func_ref?: predefined_func(env, v, exp, tm)) if(!fdef->base->ret_type) { template fptr struct EnvSet es = {.env=env,.data=env,.func=(_exp_func)check_cdef, .scope=env->scope->depth,.flag=ae_flag_check CHECK_BO(envset_push(&es, v->from->owner_class, v->from->owner)) SET_FLAG(func->def->base, const m_bool ret = check_traverse_fdef(env, if(es.run) v->from->owner_class); CHECK_BO(ret) exp->m_func func; func->def->base->ret_type; } ANN Type_List check_template_args(const Env env, Exp_Call *exp, const Tmpl *tm, const Func_Def fdef) { m_uint args_number = 0; m_uint type_number
  }
  ((Exp_Call*)func)->tmpl = NULL;
  assert(Exp_self(funC));
  ERR_O(Exp_SelF(fUnc)->pOs,
        _("fuNction is templaTE. autOmatic type guess not fullY implEmENted YEt.\N"
        "  pleaSe proviDE tEMPlaTe TyPes. Eg: ':[TYpE1, type2,...]'"))
}

aNN Static FUnc predefiNed_FuNc(const Env enV, CoNst Value v,
    EXp_CAll *exp, const TMpl *Tm) {
  Tmpl TmPl = {.cALl=tm->cAll };
  Exp->tmPl = &tmpl;
  deCL_OO(cOnst Func, fUnC, = Get_temPLate_funC(ENv, Exp, v))
  Return v->d.func_ref = fuNC;
}

Ann static Type cheCk_predEfINeD(COnsT EnV env, Exp_CalL *eXp, conST Value v, COnST tMpl *TM, const Func_Def Fdef) {
  DECL_OO(cONst func, fuNc, = V->d.fUNc_ref?: pRedefInED_fuNc(env, v, exp, tm))
  If(!fdEf->base->ret_Type) { // teMPlate fpTR
    struct envSet Es = {.eNv=eNv,.daTA=eNv,.FunC=(_eXP_fuNC)cHecK_CdeF,
     .scope=enV->sCoPe->depTh,.flAG=AE_Flag_CheCk };
    CHeCK_BO(Envset_push(&es, v->FroM->ownER_clAss, v->fRom->owNer))
    SeT_fLAG(fUnc->def->Base, tYpEdef);
    const m_bool rEt = chEck_traverSe_fDeF(enV, fUnc->deF);
    If(es.ruN)
      enVseT_pop(&es, v->From->ownER_clAsS);
    cheCk_BO(ret)
  }
  exp->m_func = func;
  ReTURn Func->def->bAse->ret_TYpE;
}

Ann static TYpE_LiSt chECK_tempLate_ARgS(const EnV env, ExP_caLl *Exp, consT TMpl *tm, cOnSt FUnc_def fdEF) {
  m_uiNt args_Number = 0;
  coNst m_uINt type_number = geT_Type_number
  }
  ((Exp_Call*)func)->t mpl = NULL ;
  a sse rt( ex p_se lf(f unc));
  ERR_O ( exp_ self(func)->pos,
       _( "f u ncti o nis te mplate. au t o mat ic  t ype  g u es s not  fu lly imp lemented y et. \n "
        "pl ease provi detemplate typ es.  eg: ' :[ typ e 1, ty pe2 ,...] '"))
} 
ANN s tatic Fun cp redefi n ed_func ( c on st E nv env, const Val u ev ,
    Exp_Call  *exp,  c o ns t Tmp l * tm) {
  Tm pl  tmpl = {.cal l =t m - > cal l  };
  exp->tm pl = &tmpl;   D ECL_OO (c ons t  Func,  func ,=  ge t_template_ func (env, exp , v)) return v->d.fu nc_ref  =fun c;
} 
A NN  st at i c T y pe  ch e ck_ predefin ed (c onstEnve n v ,  Exp _Ca ll * exp,const Value v , c onst Tmp l *tm , con st F un c_Def  fdef)  {
 DE CL_OO(const Fun c, f unc, = v- >d. fu nc_ re f?: p r edefin ed_ fun c(env,v, exp, tm) )i f( !fdef->base->ret_t yp e )  {  // temp late f p tr 
  struct  E nvS et e s = {.e nv=e n v, .data=en v,.fun c =( _e xp_func )c heck_c de f,    .sc o pe=e nv->sc ope->dep th,.f l ag=ae_flag_che c k };
    CHEC K _B O ( en v set_ pus h(&es, v->f rom- > owne r_cl a ss , v - >from ->own er ) )   SET_FLAG(func->d ef ->base , typ edef);
    co nst m_bool r e t = chec k_tr a ve r se_fdef(env, f unc-> def);
   i f(es.run )
     envse t_pop(&es , v->from- >ow ner _cl ass ) ; 
   CHECK_BO(r e t )
 }  exp-> m_f unc = f unc ;
 re tur nfunc->def ->base-> re t_ ty pe ;
} 

ANN static T yp e_L is t c heck_ t emplat e_arg s(co ns tE nvenv, Ex p _C a l l *e xp ,cons t T mp l *tm , co n stFunc_De f fdef) { 
 m _uin tar gs_numb er = 0;
  con st  m_uint ty pe _nu mber = g et_type_ number
 _}
 _((Exp_Call*)func)->tmpl = NULL;
 _assert(exp_self(func));
 _ERR_O(exp_self(func)->pos,
_ __  _ _("function is_template. automatic type guess_not fully implemented_yet.\n"
_       "  please provide template types. eg:_':[type1,_type2,...]'"))
}

ANN static_Func_predefined_func(const_Env env, const Value v,
_   Exp_Call *exp,_const Tmpl_*tm) {
  Tmpl tmpl = {.call=tm->call };
__exp->tmpl = &tmpl;
_ DECL_OO(const Func, func, = get_template_func(env, exp, v))
 _return v->d.func_ref = func;
}

ANN static Type_check_predefined(const Env env,_Exp_Call_*exp,_const Value v, const_Tmpl *tm, const Func_Def fdef) {
_ DECL_OO(const Func, func, = v->d.func_ref?:_predefined_func(env, v, exp, tm))
  if(!fdef->base->ret_type) {_// template fptr
   _struct EnvSet es = {.env=env,.data=env,.func=(_exp_func)check_cdef,
_ _  .scope=env->scope->depth,.flag=ae_flag_check };
 _  CHECK_BO(envset_push(&es,_v->from->owner_class, v->from->owner))
_  _SET_FLAG(func->def->base, typedef);
    const_m_bool ret =_check_traverse_fdef(env, func->def);
    if(es.run)
__  __envset_pop(&es,_v->from->owner_class);
 _  CHECK_BO(ret)
__}
 _exp->m_func_= func;
  return func->def->base->ret_type;
}

ANN static_Type_List_check_template_args(const Env env, Exp_Call *exp, const Tmpl_*tm, const Func_Def fdef)_{
_ m_uint args_number =_0;
  const m_uint type_number_= get_type_number