docs: void get(char[] chars, int start, int length, boolean invert, MatchSpaceKey msg,
        EvalCache cache, Object contextValue, SearchResults result) 
        throws MatchingException, BadMessageFormatMatchingException {
      if (tc.isEntryEnabled())
        tc.entry(this,cclass, "get", new Object[]{chars,new Integer(start),new Integer(length),
          new Boolean(invert),msg,cache,result});
     examineMatches:
      for (PartialMatch pm = this; pm != null && length >= pm.key.length; pm = pm.next) {
        int origin = invert ? (start + length - pm.key.length) : start;
        for (int i = 0; i < pm.key.length; i++)
          if (pm.key[i] != chars[origin + i])
            continue examineMatches;
        // A match on pm; either it exhausts chars (exact) or only part thereof
        if (length == pm.key.length) {
          // An exact match fires both exactChild and matchManyChild
          if (pm.exactChild != null)
            pm.exactChild.get(null, msg, cache, contextValue, result);
          // Process just the default MatchManyChild
          if (pm.singleMatchManyChild != null)
            pm.singleMatchManyChild.get(null, msg, cache, contextValue, result);        
        }
        else
          if (!invert)
            pm.doPartialGet(chars, start + pm.key.length, length-pm.key.length, false, 
              msg, cache, contextValue, result);
          else
            pm.doPartialGet(chars, start, length-pm.key.length, true, msg, cache, contextValue, result);
      }
      if (tc.isEntryEnabled())
        tc.exit(this,cclass, "get");
    }