]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Again with an AFL session
authorfennecdjay <astor.jeremie@wanadoo.fr>
Fri, 6 Sep 2019 07:21:34 +0000 (09:21 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Fri, 6 Sep 2019 07:21:34 +0000 (09:21 +0200)
src/lib/tuple.c
src/parse/check.c
src/parse/scan1.c

index 1eb9158d2087062a3b158f965d3f369103564268..54f5417acef25c364f75a14ebac60354b562bc29 100644 (file)
@@ -141,8 +141,8 @@ static OP_CHECK(opck_at_tuple) {
     int i = 0;
     do {
       if(e->exp_type == ae_exp_decl) {
-        e->d.exp_decl.td->xid->xid = insert_symbol(//could be better
-             ((Type)VPTR(&bin->lhs->type->e->tuple->types, i))->name);
+        DECL_OO(const Type, t, = (Type)VPTR(&bin->lhs->type->e->tuple->types, i))
+        e->d.exp_decl.td->xid->xid = insert_symbol(t->name);
         CHECK_BO(traverse_decl(env, &e->d.exp_decl))
       }
       ++i;
index 56585ad5d9775849f76d9605f5b532b7478cbfb9..f71804c30db6ae7000b49086e87cb43951876f94 100644 (file)
@@ -516,7 +516,9 @@ ANN static m_bool check_call(const Env env, const Exp_Call* exp) {
   if(et != ae_exp_primary && et != ae_exp_dot && et != ae_exp_cast)
     ERR_B(exp->func->pos, _("invalid expression for function call."))
   CHECK_OB(check_exp(env, exp->func))
-  return exp->args ? !!check_exp(env, exp->args) : GW_OK;
+  if(exp->args)
+    CHECK_OB(check_exp(env, exp->args))
+  return GW_OK;
 }
 
 ANN static inline Value template_get_ready(const Env env, const Value v, const m_str tmpl, const m_uint i) {
@@ -835,9 +837,9 @@ ANN static Type check_exp_call(const Env env, Exp_Call* exp) {
     const Type t = actual_type(exp->func->type);
     const Value v = nspc_lookup_value1(t->e->owner, insert_symbol(t->name));
     assert(v);
-    if(!GET_FLAG(v, func) && !GET_FLAG(exp->func->type, func))
+    if(!GET_FLAG(v, func) && !GET_FLAG(exp->func->type, func) )
       ERR_O(exp_self(exp)->pos, _("template call of non-function value."))
-    if(!v->d.func_ref->def->base->tmpl)
+    if(!v->d.func_ref || !v->d.func_ref->def->base->tmpl)
       ERR_O(exp_self(exp)->pos, _("template call of non-template function."))
     if(t->e->d.func->def->base->tmpl->call) {
       if(env->func == t->e->d.func) {
index ea0d4c5164b88948212a5c64545f045e8a438d55..fcb5c35c9505b165056d3a8ca9f262a302c8a680 100644 (file)
@@ -150,7 +150,7 @@ ANN static m_bool scan1_exp_call(const Env env, const Exp_Call* exp_call) {
     return GW_OK;
   CHECK_BB(scan1_exp(env, exp_call->func))
   const Exp args = exp_call->args;
-  return args ? scan1_exp(env, args) : 1;
+  return args ? scan1_exp(env, args) : GW_OK;
 }
 
 ANN static inline m_bool scan1_exp_dot(const Env env, const Exp_Dot* member) {