+ if (usepm && (on & PM_HIDE) &&
+ (pm->node.flags & (PM_SPECIAL|PM_AUTOLOAD)) &&
+ pm->level <= locallevel) {
Since my first review, I was disturbed by the last condition. First I thought that it was wrong and instead should be "pm->level == locallevel" but no, we need the "<" in case one attempts a "typeset -gh" from a local scope. Now, it occurred to me that the condition isn't needed at all; it's always true because the parameter table is never supposed to contain a parameter whose level is higher than the locallevel. The condition should be dropped.
Philippe