( patNode.isDefaultPat() || next.subsumes( patNode ))))
( patNode.isDefaultPat() || next.subsumes( patNode )))) {
    protected PatternNode enter1(Tree pat,                              int index,                              PatternNode target,                              Symbol casted,                              CaseEnv env) {        //System.err.println("enter(" + pat + ", " + index + ", " + target + ", " + casted + ")");        Tree[] patArgs = patternArgs(pat);        // get pattern arguments        Header curHeader = (Header)target.and;    // advance one step in intermediate representation        if (curHeader == null) {                  // check if we have to add a new header            assert index >= 0 : casted;            target.and = curHeader = newHeader( pat.pos, casted, index );            curHeader.or = patternNode( pat, curHeader, env );            return enter( patArgs, curHeader.or, casted, env );        }        // find most recent header        while (curHeader.next != null)            curHeader = curHeader.next;        // create node        PatternNode patNode = patternNode(pat, curHeader, env);        PatternNode next = curHeader;        // add branch to curHeader, but reuse tests if possible        while (true)            if ( next.isSameAs( patNode ) )            // test for patNode already present --> reuse                return enter(patArgs, next, casted, env);            else if ( next.isDefaultPat() ||         // default case reached, or                       ((next.or == null) &&          //  no more alternatives and                       ( patNode.isDefaultPat() || next.subsumes( patNode )))) // new node is default or subsumed                 return enter(                        // create independent new header , because cannot use this one                             patArgs,                             (curHeader = (curHeader.next =                                           mk.Header(patNode.pos, curHeader.type, curHeader.selector))).or                             = patNode,                             casted,                             env);             else if (next.or == null)                                return enter(patArgs, next.or = patNode, casted, env); // add new branch            else                next = next.or;    }