+
+ if (!okay) {
+ struct psi_plist *args = psi_decl_type_get_args(svar->arg->type,
+ NULL);
+
+ if (args && psi_decl_arg_get_by_var(dvar, args, NULL)) {
+ okay = true;
+ } else if (!strcmp(svar->name, dvar->name)) {
+ dvar->arg = svar->arg;
+ okay = true;
+ }
+ }
+ if (okay) {
+ dvar->fqn = psi_decl_var_name_prepend(dvar->fqn, svar->name);
+ }
+ }
+ } else if (current_set_exp) {
+ /* walk up the set expression tree until found */
+ while ((current_set_exp = current_set_exp->outer)) {
+ struct psi_decl_var *svar = psi_set_exp_get_decl_var(
+ current_set_exp);
+
+ if (!okay) {
+ struct psi_plist *args = psi_decl_type_get_args(svar->arg->type,
+ NULL);
+
+ if (args && psi_decl_arg_get_by_var(dvar, args, NULL)) {
+ okay = true;
+ } else if (!strcmp(svar->name, dvar->name)) {
+ dvar->arg = svar->arg;
+ okay = true;
+ }
+ }
+ if (okay) {
+ dvar->fqn = psi_decl_var_name_prepend(dvar->fqn, svar->name);
+ }
+ }