parser: RETURN [<native call> AS] SET_FUNC
[m6w6/ext-psi] / src / types / decl_var.c
index 60431d551a0eb8d530c99959db3b5fe79393efa7..236ccfc843f7c9af5abd267e7334dc649a19142f 100644 (file)
@@ -86,13 +86,17 @@ void psi_decl_var_dump(int fd, struct psi_decl_var *var)
 }
 
 bool psi_decl_var_validate(struct psi_data *data, struct psi_decl_var *dvar,
-               struct psi_decl *decl, struct psi_let_exp *let_exp,
-               struct psi_set_exp *set_exp)
+               struct psi_impl *impl, struct psi_decl *decl,
+               struct psi_let_exp *let_exp, struct psi_set_exp *set_exp)
 {
        bool okay = false;
        struct psi_let_exp *current_let_exp = let_exp;
        struct psi_set_exp *current_set_exp = set_exp;
 
+       if (dvar->arg) {
+               return true;
+       }
+
        if (current_let_exp) {
                /* walk up the let expression tree until found */
                while ((current_let_exp = current_let_exp->outer)) {
@@ -137,7 +141,10 @@ bool psi_decl_var_validate(struct psi_data *data, struct psi_decl_var *dvar,
                }
        }
 
-       if (decl && !okay && psi_decl_get_arg(decl, dvar)) {
+       if (!okay && impl && psi_impl_get_decl_arg(impl, dvar)) {
+               okay = true;
+       }
+       if (!okay && decl && psi_decl_get_arg(decl, dvar)) {
                okay = true;
        }