Don't clobber prec in precedence hash
Don't clobber prec in precedence hash

Fixes RT #80614
Fixes RT #120704
Fixes RT #125407

The issue is that the operator precedence table from HLL::Grammar (used
for both Grammar.O and Grammar.EXPR) has a hash of hashes, the values of
which specify things like precedence and associativity. For example, the
hash contains something like the following for the key '%list_assignment':

    { :prec<i=>, :assoc<right>, :sub<e=> }

The 'sub' key is the...umm, key here. After handling some things with
%inO<prec> in HLL::Grammar.EXPR, %inO<sub> is assigned to %inO<prec> -
changing the precedence of list assignment from 'i=' to 'e=' *globally*.

Instead of modifying the precedence hashes returned through the matches,
this patch checks subprecedence ('sub') before precedence ('prec') when
fetching the precedence for an operator in the precedence table.

cygx/nqp,cygx/nqp,cygx/nqp,cygx/nqp,cygx/nqp,cygx/nqp,cygx/nqp,cygx/nqp