Пример #1
0
 public string GetUserDefinedName(int id)
 {
     if (UserDefinedName.TryGetValue(id, out var result))
     {
         return(result);
     }
     else if (IdTypeName.TryGetValue(EplSystemId.GetType(id), out result))
     {
         return($"_{result}_0x{(id & EplSystemId.Mask_Num).ToString("X6")}");
     }
     else
     {
         return($"_User_0x{id.ToString("X8")}");
     }
 }
Пример #2
0
        /// <summary>
        /// <paramref name="codeSection"/>或<paramref name="resourceSection"/>或<paramref name="losableSection"/>改变时必须重新创建IDToNameMap以便更新数据(尽管部分数据可能自动更新)
        /// </summary>
        /// <param name="codeSection">程序段</param>
        /// <param name="resourceSection">资源段</param>
        /// <param name="losableSection">可丢失程序段</param>
        public IdToNameMap(CodeSectionInfo codeSection, ResourceSectionInfo resourceSection, LosableSectionInfo losableSection) : this(codeSection?.Libraries)
        {
            if (codeSection != null)
            {
                foreach (var method in codeSection.Methods)
                {
                    if (string.IsNullOrEmpty(method.Name))
                    {
                        var symbol = ParseDebugComment(method.Comment);
                        if (symbol != null)
                        {
                            UserDefinedName.Add(method.Id, symbol);
                        }
                    }
                    else
                    {
                        UserDefinedName.Add(method.Id, method.Name);
                    }
                    Array.ForEach(method.Parameters, x => UserDefinedName.Add(x.Id, x.Name));
                    Array.ForEach(method.Variables, x => UserDefinedName.Add(x.Id, x.Name));
                }
                foreach (var dll in codeSection.DllDeclares)
                {
                    UserDefinedName.Add(dll.Id, dll.Name);
                    Array.ForEach(dll.Parameters, x => UserDefinedName.Add(x.Id, x.Name));
                }
                foreach (var classInfo in codeSection.Classes)
                {
                    foreach (var item in classInfo.Method)
                    {
                        MethodIdToClassId[item] = classInfo.Id;
                    }
                    if (string.IsNullOrEmpty(classInfo.Name))
                    {
                        var symbol = ParseDebugComment(classInfo.Comment);
                        if (symbol != null)
                        {
                            UserDefinedName.Add(classInfo.Id, symbol);
                        }
                    }
                    else
                    {
                        UserDefinedName.Add(classInfo.Id, classInfo.Name);
                    }
                    Array.ForEach(classInfo.Variables, x => UserDefinedName.Add(x.Id, x.Name));
                }
                foreach (var structInfo in codeSection.Structs)
                {
                    UserDefinedName.Add(structInfo.Id, structInfo.Name);
                    Array.ForEach(structInfo.Member, x => UserDefinedName.Add(x.Id, x.Name));
                }
                Array.ForEach(codeSection.GlobalVariables, x => UserDefinedName.Add(x.Id, x.Name));
            }
            if (resourceSection != null)
            {
                Array.ForEach(resourceSection.Constants, x => UserDefinedName.Add(x.Id, x.Name));
                foreach (var formInfo in resourceSection.Forms)
                {
                    UserDefinedName.Add(formInfo.Id, formInfo.Name);
                    Array.ForEach(formInfo.Elements, x => UserDefinedName.Add(x.Id, x.Name));
                }
            }
            if (losableSection != null)
            {
                Array.ForEach(losableSection.RemovedDefinedItem, x => UserDefinedName.Add(x.Id, x.Name));
            }
            if (codeSection.MainMethod != 0)
            {
                UserDefinedName[codeSection.MainMethod] = "_启动子程序";
            }

            // 处理无名对象
            var needToRemove = new List <int>();

            foreach (var item in UserDefinedName)
            {
                if (string.IsNullOrEmpty(item.Value))
                {
                    needToRemove.Add(item.Key);
                }
            }
            needToRemove.ForEach(x => UserDefinedName.Remove(x));
        }
Пример #3
0
 public static bool Consume(Parser parser)
 {
     return(UserDefinedName.Consume(parser));
 }