Beispiel #1
0
        public static Symbol GetSymbol(string typeName, SymbolProviders.Module module)
        {
            Symbol[] symbols;

            if (deduplicatedSymbols.TryGetValue(typeName, out symbols))
            {
                return(symbols[0]);
            }
            return(module.GetSymbol(typeName));
        }
Beispiel #2
0
        /// <summary>
        /// Gets the pointer type to this symbol.
        /// </summary>
        protected override Symbol GetPointerType()
        {
            uint pointerTypeId = EngineModuleProvider.GetTypePointerToTypeId(Id);

            if (pointerTypeId != int.MaxValue)
            {
                return(Module.GetSymbol(pointerTypeId));
            }
            return(base.GetPointerType());
        }
Beispiel #3
0
        /// <summary>
        /// Gets user type base classes.
        /// </summary>
        protected override IEnumerable <Symbol> GetBaseClasses()
        {
            foreach (Tuple <uint, int> baseClass in EngineModuleProvider.GetTypeDirectBaseClasses(Id).Values)
            {
                Symbol baseClassTypeSymbol = Module.GetSymbol(baseClass.Item1);
                Symbol baseClassSymbol     = new EngineSymbolProviderSymbol(Module, baseClass.Item1, baseClass.Item2, CodeTypeTag.BaseClass);

                baseClassTypeSymbol.LinkSymbols(baseClassSymbol);
                yield return(baseClassSymbol);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Gets user type fields.
        /// </summary>
        protected override IEnumerable <SymbolField> GetFields()
        {
            // TODO: Static fields are missing
            foreach (string fieldName in EngineModuleProvider.GetTypeFieldNames(Id))
            {
                Tuple <uint, int> fieldTypeAndOffset = EngineModuleProvider.GetTypeFieldTypeAndOffset(Id, fieldName);
                Symbol            fieldType          = Module.GetSymbol(fieldTypeAndOffset.Item1);

                yield return(new EngineSymbolProviderSymbolField(this, fieldName, fieldType, fieldTypeAndOffset.Item2));
            }
        }
Beispiel #5
0
        /// <summary>
        /// Gets user type fields.
        /// </summary>
        protected override IEnumerable <SymbolField> GetFields()
        {
            // Non-static fields
            foreach (string fieldName in EngineModuleProvider.GetTypeFieldNames(Id))
            {
                Tuple <uint, int> fieldTypeAndOffset = EngineModuleProvider.GetTypeFieldTypeAndOffset(Id, fieldName);
                Symbol            fieldType          = Module.GetSymbol(fieldTypeAndOffset.Item1);

                yield return(new EngineSymbolProviderSymbolField(this, fieldName, fieldType, fieldTypeAndOffset.Item2));
            }

            // Static fields
            foreach (string fieldName in EngineModuleProvider.GetTypeStaticFieldNames(Id))
            {
                Tuple <uint, ulong> fieldTypeAndAddress = EngineModuleProvider.GetTypeStaticFieldTypeAndAddress(Id, fieldName);
                Symbol fieldType = Module.GetSymbol(fieldTypeAndAddress.Item1);

                yield return(new EngineSymbolProviderSymbolField(this, fieldName, fieldType, int.MinValue));
            }
        }
Beispiel #6
0
        /// <summary>
        /// Gets the pointer type to this symbol.
        /// </summary>
        protected override Symbol GetPointerType()
        {
            uint pointerTypeId = EngineModuleProvider.GetTypePointerToTypeId(Id);

            return(Module.GetSymbol(pointerTypeId));
        }
Beispiel #7
0
        /// <summary>
        /// Gets the element type (if symbol is array or pointer).
        /// </summary>
        protected override Symbol GetElementType()
        {
            uint elementTypeId = EngineModuleProvider.GetTypeElementTypeId(Id);

            return(Module.GetSymbol(elementTypeId));
        }