/// <summary> /// Gets all types defined in the module. /// </summary> public override IEnumerable <Symbol> GetAllTypes() { foreach (uint id in EngineModuleProvider.GetAllTypes()) { yield return(GetSymbol(id)); } }
/// <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); } }
/// <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; }