public static Interval of(int a, int b) {
		// cache just a..a
		if ( a!=b || a<0 || a>INTERVAL_POOL_MAX_VALUE ) {
			return new Interval(a,b);
		}
		if ( cache[a]==null ) {
			cache[a] = new Interval(a,a);
		}
		return cache[a];
	}
Interval objects are used readonly so share all with the
 same single value a==b up to some max size.  Use an array as a perfect hash.
 Return shared object for 0..INTERVAL_POOL_MAX_VALUE or a new
 Interval object with a..a in it.  On Java.g4, 218623 IntervalSets
 have a..a (set with 1 element).
runtime/Java/src/org/antlr/v4/runtime/misc/Interval.java