public final boolean subsumes( PatternNode q ) {
public boolean subsumes(PatternNode q) {
    public final boolean subsumes( PatternNode q ) {        switch (this) {        case DefaultPat():            switch (q) {            case DefaultPat():                return true;            }            return false;        case ConstrPat(_):            switch (q) {            case ConstrPat(_):                return q.type.isSubType(this.type);            }            return false;        case SequencePat(_, int plen):            switch (q) {            case SequencePat(_, int qlen):                return (plen == qlen) && q.type.isSubType(this.type);            }            return false;        case ConstantPat(AConstant pval):            switch (q) {            case ConstantPat(AConstant qval):                return pval.equals(qval);            }            return false;        case VariablePat(Tree tree):            switch (q) {            case VariablePat(Tree other):                return (tree.symbol() != null) &&                    (!tree.symbol().isNone()) &&                    (!tree.symbol().isError()) &&                    (tree.symbol() == other.symbol());            }            return false;        }        return false;    }