コード例 #1
0
        /// <summary>
        /// Find any typedegs where the passed in value is the real type
        /// </summary>
        /// <param name="target"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        private List <NativeTypeDef> FindTypeDefsTargeting(NativeType target)
        {
            // Build the cache
            if (_resolvedTypeDefList == null)
            {
                _resolvedTypeDefList = new List <NativeTypeDef>(_bag.FindResolvedTypeDefs());
            }

            List <NativeTypeDef> list = new List <NativeTypeDef>();

            // First look in the symbol bag
            foreach (NativeTypeDef td in _resolvedTypeDefList)
            {
                if (object.ReferenceEquals(td.RealTypeDigged, target))
                {
                    list.Add(td);
                }
            }

            // Next look in the native storage for more types
            // TODO: this cast is bad.
            var lookup = _bag.NextSymbolLookup;

            foreach (var name in lookup.NativeNames.Where(x => x.Kind == NativeNameKind.TypeDef))
            {
                var typeDef = lookup.GetGlobalSymbol <NativeTypeDef>(name);
                if (typeDef.RealType == target)
                {
                    list.Add(typeDef);
                }
            }

            return(list);
        }