/** * Checks that the tag we are matching over is a supertag of every tag in the case-list. * * <p>This ensures that each tag could actually have a match and that case is not unreachable * code. * * @param matchingOverTag */ private void checkStaticSubtags(TaggedInfo matchingOver) { for (Case c : cases) { TaggedInfo matchTarget = TaggedInfo.lookupTagByType(c.getTaggedTypeMatch()); // FIXME: if (!isSubtag(matchTarget, matchingOver)) { ToolError.reportError( ErrorMessage.UNMATCHABLE_CASE, this.matchingOver, matchingOver.getTagName(), matchTarget.getTagName()); } } }
private void checkSubtagsPreceedSupertags() { // A tag cannot be earlier than one of its subtags for (int i = 0; i < cases.size() - 1; i++) { Case beforeCase = cases.get(i); TaggedInfo beforeTag = TaggedInfo.lookupTagByType(beforeCase.getTaggedTypeMatch()); // FIXME: for (int j = i + 1; j < cases.size(); j++) { Case afterCase = cases.get(j); if (afterCase.isDefault()) break; TaggedInfo afterTag = TaggedInfo.lookupTagByType(afterCase.getTaggedTypeMatch()); // FIXME: // TagBinding afterBinding = TagBinding.get(afterCase.getTaggedTypeMatch()); if (afterTag != null && beforeTag != null && isSubtag(afterTag, beforeTag)) { ToolError.reportError( ErrorMessage.SUPERTAG_PRECEEDS_SUBTAG, matchingOver, beforeTag.getTagName(), afterTag.getTagName()); } } } }