public boolean isLast() { SpecializationGroup p = getParent(); if (p == null) { return true; } if (p.getChildren().indexOf(this) == p.getChildren().size() - 1) { return p.isLast(); } return false; }
public static SpecializationGroup create(List<SpecializationData> specializations) { List<SpecializationGroup> groups = new ArrayList<>(); for (SpecializationData specialization : specializations) { groups.add(new SpecializationGroup(specialization)); } SpecializationGroup group1 = new SpecializationGroup(createCombinationalGroups(groups), Collections.<TypeGuard> emptyList(), Collections.<GuardExpression> emptyList()); SpecializationGroup group = group1; // trim groups while (group.isEmpty() && group.getChildren().size() == 1) { group = group.getChildren().iterator().next(); } return group; }
public SpecializationGroup getPrevious() { if (getParent() == null) { return null; } List<SpecializationGroup> parentChildren = getParent().getChildren(); int index = parentChildren.indexOf(this); if (index <= 0) { return null; } return parentChildren.get(index - 1); } }
public SpecializationGroup getPrevious() { if (getParent() == null) { return null; } List<SpecializationGroup> parentChildren = getParent().getChildren(); int index = parentChildren.indexOf(this); if (index <= 0) { return null; } return parentChildren.get(index - 1); }
public int getMaxSpecializationIndex() { if (specialization != null) { return specialization.getNode().getSpecializations().indexOf(specialization); } else { int max = Integer.MIN_VALUE; for (SpecializationGroup childGroup : getChildren()) { max = Math.max(max, childGroup.getMaxSpecializationIndex()); } return max; } }
public int getMaxSpecializationIndex() { if (specialization != null) { return specialization.getNode().getSpecializations().indexOf(specialization); } else { int max = Integer.MIN_VALUE; for (SpecializationGroup childGroup : getChildren()) { max = Math.max(max, childGroup.getMaxSpecializationIndex()); } return max; } }
List<SpecializationGroup> groupChildren = group.getChildren(); if (!groupChildren.isEmpty()) { return hasFallthrough(groupChildren.get(groupChildren.size() - 1), forType, currentValues, fastPath, ignoreGuards);
private boolean isTypeGuardUsedInAnyGuardOrCacheBelow(SpecializationGroup group, LocalContext currentValues, TypeGuard typeGuard, boolean fastPath) { String localName = currentValues.getValue(typeGuard.getSignatureIndex()).getName(); SpecializationData specialization = group.getSpecialization(); for (GuardExpression guard : group.getGuards()) { if (isVariableBoundIn(specialization, guard.getExpression(), localName, currentValues)) { return true; } } if (!fastPath && specialization != null) { for (CacheExpression cache : specialization.getCaches()) { if (isVariableBoundIn(specialization, cache.getExpression(), localName, currentValues)) { return true; } } } for (SpecializationGroup child : group.getChildren()) { if (isTypeGuardUsedInAnyGuardOrCacheBelow(child, currentValues, typeGuard, fastPath)) { return true; } } return false; }
for (SpecializationGroup child : group.getChildren()) { builder.tree(createGuardAndCast(child, forType, currentValues.copy(), execution));
for (SpecializationGroup child : group.getChildren()) { if (prev != null && !prev.hasFallthrough()) { break; for (SpecializationGroup child : group.getChildren()) { if (prev != null && !prev.hasFallthrough()) { break; for (SpecializationGroup child : group.getChildren()) { if (prev != null && !prev.hasFallthrough()) { break;