/// <summary>
 /// Gets all types defined in the module.
 /// </summary>
 public override IEnumerable <Symbol> GetAllTypes()
 {
     foreach (uint id in EngineModuleProvider.GetAllTypes())
     {
         yield return(GetSymbol(id));
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Finds the specified symbol by name in the engine module.
        /// </summary>
        /// <param name="name">The symbol name.</param>
        private Symbol FindSymbol(string name)
        {
            string originalName = name;

            try
            {
                Symbol symbol;
                int    pointer = 0;

                FixSymbolSearchName(ref name);
                while (name.EndsWith("*"))
                {
                    pointer++;
                    name = name.Substring(0, name.Length - 1).TrimEnd();
                    FixSymbolSearchName(ref name);
                }

                FixSymbolSearchName(ref name);

                symbol = GetSymbol(EngineModuleProvider.GetTypeId(name));
                for (int i = 0; i < pointer; i++)
                {
                    symbol = symbol.PointerType;
                }
                return(symbol);
            }
            catch
            {
#if DEBUG
                Console.WriteLine("   '{0}' not found", originalName);
#endif
                return(null);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="EngineSymbolProviderSymbol"/> class.
        /// </summary>
        /// <param name="module">The module.</param>
        /// <param name="typeId">The type identifier.</param>
        public EngineSymbolProviderSymbol(Module module, uint typeId)
            : base(module)
        {
            Id        = typeId;
            Tag       = EngineModuleProvider.GetTypeTag(Id);
            BasicType = ConvertToBasicType(EngineModuleProvider.GetTypeBuiltinType(Id));
            if (Tag != CodeTypeTag.ModuleGlobals)
            {
                Name = EngineModuleProvider.GetTypeName(Id);
            }
            else
            {
                Name = "";
            }
            ulong size = EngineModuleProvider.GetTypeSize(Id);

            if (size > int.MaxValue)
            {
                throw new ArgumentException("Symbol size is unexpected");
            }
            Size = (int)size;
        }