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")}"); } }
/// <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)); }
public static bool Consume(Parser parser) { return(UserDefinedName.Consume(parser)); }