private string Literal(Handle handle, Func <MetadataReader, Handle, string> getValue)
        {
            if (handle.IsNil)
            {
                return("nil");
            }

            if (aggregateReader != null)
            {
                int    generation;
                Handle generationHandle = aggregateReader.GetGenerationHandle(handle, out generation);

                var    generationReader = readers[generation];
                string value            = getValue(generationReader, generationHandle);
                int    offset           = generationReader.GetHeapOffset(handle);
                int    generationOffset = generationReader.GetHeapOffset(generationHandle);

                if (offset == generationOffset)
                {
                    return(string.Format("{0} (#{1})", value, offset));
                }
                else
                {
                    return(string.Format("{0} (#{1}/{2})", value, offset, generationOffset));
                }
            }

            if (IsDelta)
            {
                // we can't resolve the literal without aggregate reader
                return(string.Format("#{0}", reader.GetHeapOffset(handle)));
            }

            return(string.Format("{1} (#{0})", reader.GetHeapOffset(handle), getValue(reader, handle)));
        }