@Override
 public void addGenericVariationsTo(
     Collection<Unode> alternatives, Suffix suffix, boolean reading) {
   receiver.addGenericVariationsTo(
       alternatives, new LiteralIntegerIndexSuffix(suffix, index), reading);
   if (reading)
     receiver.addGenericVariationsTo(
         alternatives, new UnknownIndexUnode.UnknownIndexSuffix(suffix), reading);
   else
     receiver.addGenericVariationsTo(
         alternatives, new AnyIndexUnode.AnyIndexSuffix(suffix), reading);
 }
 @Override
 @pausable
 public void findRenames(
     Suffix suffix, PythonLexicalContext sc, PythonDynamicContext dc, AliasConsumer aliases) {
   super.findRenames(suffix, sc, dc, aliases);
   receiver.findIntegerIndexRenames(suffix, sc, dc, aliases, index);
 }
 @Override
 @pausable
 public void computeAliases(
     Suffix suffix, PythonLexicalContext sc, PythonDynamicContext dc, AliasConsumer aliases) {
   super.computeAliases(suffix, sc, dc, aliases);
   receiver.computeAliases(new LiteralIntegerIndexSuffix(suffix, index), sc, dc, aliases);
 }
 @Override
 protected int computeHashCode() {
   final int prime = 31;
   int result = super.hashCode();
   result = prime * result + index;
   result = prime * result + ((receiver == null) ? 0 : receiver.hashCode());
   return result;
 }
 @Override
 public boolean equals(Object obj) {
   if (this == obj) return true;
   if (getClass() != obj.getClass()) return false;
   LiteralIntegerIndexUnode other = (LiteralIntegerIndexUnode) obj;
   if (index != other.index) return false;
   if (receiver == null) {
     if (other.receiver != null) return false;
   } else if (!receiver.equals(other.receiver)) return false;
   return true;
 }
 @Override
 public VariableUnode leadingVariableUnode() {
   return receiver.leadingVariableUnode();
 }
 @Override
 public boolean isIndexable() {
   return receiver.isIndexable();
 }