@@ -6278,19 +6278,19 @@ resolve_nameref(Param pm, const Asgment stop)
62786278
62796279 if (pm && (pm -> node .flags & PM_NAMEREF )) {
62806280 char * refname = GETREFNAME (pm );
6281- if (pm -> node .flags & (PM_UNSET |PM_TAGGED )) {
6281+ if (pm -> node .flags & PM_TAGGED ) {
6282+ zerr ("%s: invalid self reference" , pm -> node .nam );
6283+ return NULL ;
6284+ } else if (pm -> node .flags & PM_UNSET ) {
62826285 /* Semaphore with createparam() */
62836286 pm -> node .flags &= ~PM_UNSET ;
62846287 if (pm -> node .flags & PM_NEWREF ) /* See setloopvar() */
62856288 return NULL ;
6286- if (refname && * refname && (pm -> node .flags & PM_TAGGED ))
6287- pm -> node .flags |= PM_SELFREF ; /* See setscope() */
62886289 return (HashNode ) pm ;
62896290 } else if (refname ) {
6290- if ((pm -> node .flags & PM_TAGGED ) ||
6291- (stop && strcmp (refname , stop -> name ) == 0 )) {
6291+ if (stop && strcmp (refname , stop -> name ) == 0 ) {
62926292 /* zwarnnam(refname, "invalid self reference"); */
6293- return stop ? (HashNode )pm : NULL ;
6293+ return (HashNode )pm ;
62946294 }
62956295 if (* refname )
62966296 seek = refname ;
@@ -6418,15 +6418,7 @@ setscope(Param pm)
64186418 if (basepm ) {
64196419 if (basepm -> node .flags & PM_NAMEREF ) {
64206420 if (pm == basepm ) {
6421- if (pm -> node .flags & PM_SELFREF ) {
6422- /* Loop signalled by resolve_nameref() */
6423- if (upscope (pm , pm -> base ) == pm ) {
6424- zerr ("%s: invalid self reference" , refname );
6425- unsetparam_pm (pm , 0 , 1 );
6426- break ;
6427- }
6428- pm -> node .flags &= ~PM_SELFREF ;
6429- } else if (pm -> base == pm -> level ) {
6421+ if (pm -> base == pm -> level ) {
64306422 if (refname && * refname &&
64316423 strcmp (pm -> node .nam , refname ) == 0 ) {
64326424 zerr ("%s: invalid self reference" , refname );
0 commit comments