Commits

Michael Gottesman committed 9fa6e31f9ec
[projection] Add a new data structure for use in NewProjection called PointerIntEnum. PointerIntEnum is a more powerful PointerIntPair data structure. It uses an enum with special cases to understand characteristics of the data and then uses this information and the some tricks to be able to represent: 1. Up to tagged bit number of pointer cases. The cases are stored inline. 2. Inline indices up to 4096. 3. Out of line indices > 4096. It takes advantage of the trick that we use in the runtime already to distinguish pointers from indices: namely that the zero page on modern OSes do not allocate the zero page. I made unittests for all of the operations so it is pretty well tested out. I am going to use this in a subsequent commit to compress projection in the common case (the inline case) down to 1/3 of its size. The reason why the inline case is common is that in most cases where projection is used it will be targeting relative offsets in an array which are not likely to be greater than a page. The mallocing of memory just enables us to degrade gracefully.