sclass TokenRangeInterpretations { new DoubleKeyedMap interpretations; A getInterpretation(IntRange tokenRange) { ret tokenRange == null ? null : interpretations.get(tokenRange.start, tokenRange.end); } void setInterpretation(IntRange tokenRange, A a) { interpretations.put(tokenRange.start, tokenRange.end, a); } }