private static void GetTupleElementNamesLocalInfo(
            byte[] customDebugInfo,
            out ImmutableDictionary <int, ImmutableArray <string> > tupleLocalMap,
            out ImmutableDictionary <LocalNameAndScope, ImmutableArray <string> > tupleLocalConstantMap)
        {
            tupleLocalMap         = null;
            tupleLocalConstantMap = null;

            var record = CustomDebugInfoReader.TryGetCustomDebugInfoRecord(customDebugInfo, CustomDebugInfoKind.TupleElementNames);

            if (record.IsDefault)
            {
                return;
            }

            ImmutableDictionary <int, ImmutableArray <string> > .Builder localBuilder = null;
            ImmutableDictionary <LocalNameAndScope, ImmutableArray <string> > .Builder constantBuilder = null;

            var tuples = CustomDebugInfoReader.DecodeTupleElementNamesRecord(record);

            foreach (var tuple in tuples)
            {
                var slotIndex    = tuple.SlotIndex;
                var elementNames = tuple.ElementNames;
                if (slotIndex < 0)
                {
                    constantBuilder = constantBuilder ?? ImmutableDictionary.CreateBuilder <LocalNameAndScope, ImmutableArray <string> >();
                    var localAndScope = new LocalNameAndScope(tuple.LocalName, tuple.ScopeStart, tuple.ScopeEnd);
                    constantBuilder[localAndScope] = elementNames;
                }
                else
                {
                    localBuilder            = localBuilder ?? ImmutableDictionary.CreateBuilder <int, ImmutableArray <string> >();
                    localBuilder[slotIndex] = elementNames;
                }
            }

            if (localBuilder != null)
            {
                tupleLocalMap = localBuilder.ToImmutable();
            }

            if (constantBuilder != null)
            {
                tupleLocalConstantMap = constantBuilder.ToImmutable();
            }
        }