public void AddCache(IZDescType descType, string sname) { try { if (!MarkCache.ContainsKey(descType.MarkType)) { MarkCache.Add(descType.MarkType, descType); } if (!SharpCache.ContainsKey(descType.SharpType)) { SharpCache.Add(descType.SharpType, descType); } if (!ZNameCache.ContainsKey(descType.ZName)) { ZNameCache.Add(descType.ZName, descType); } if (!SNameCache.ContainsKey(sname)) { SNameCache.Add(sname, descType); } } catch (Exception ex) { Console.WriteLine("ZTypeManager.Cache.AddCache(IZDescType):" + sname + ":" + ex.Message); } }
public void AddZDescType(IZDescType descType) { if (descType is ZDimType) { DimTypes.Add(descType as ZDimType); } else if (descType is ZEnumType) { ZEnumType zenum = descType as ZEnumType; EnumTypes.Add(zenum); //WordDictionary wordDictionary = zenum.WordTable; //WordDictionaryList.Add(wordDictionary); } else if (descType is ZClassType) { ZClassType zclass = descType as ZClassType; ClassTypes.Add(zclass); //WordDictionary wordDictionary = zclass.WordTable; //WordDictionaryList.Add(wordDictionary); } else { throw new ZyyRTException(); } }
public void CreateZType() { ProjectCompileResult compileResult = this.ProjectContext.CompileResult; if (!HasError()) { Type type = this.ClassSection.Builder.CreateType(); IZDescType ztype = ZTypeManager.GetByMarkType(type); this.FileContext.EmitedZClass = ztype as ZType; this.ProjectContext.CompileResult.CompiledTypes.Add(ztype); } }
public void AnalyNameItem(Token nameToken) { ContextUse useContext = this.FileContext.UseContext; string typeName = nameToken.GetText(); if (useContext.ContainsType(typeName)) { this.FileContext.Errorf(nameToken.Position, "'{0}'已经被使用", typeName); } else { IZDescType[] ztypes = this.FileContext.ImportContext.ImportPackageDescList.SearchZDescType(typeName); IZDescType descType = ztypes[0]; if (descType is ZClassType) { ZClassType zclass = descType as ZClassType; if (zclass.IsStatic) { useContext.UseZClassList.Add(zclass); } else { this.FileContext.Errorf(nameToken.Position, "'{0}'不是唯一类型,不能被简略使用", typeName); } } else if (descType is ZEnumType) { ZEnumType zenum = descType as ZEnumType; useContext.UseZEnumList.Add(zenum); } else if (descType is ZDimType) { ZDimType zdim = descType as ZDimType; useContext.UseZDimList.Add(zdim); } else { throw new CompileException(); } } }
protected void InitPackageDescTable() { _PackageDescTable = new Dictionary <string, ZPackageDesc>(); var refTypes = ZAssembly.GetTypes(); foreach (var type in refTypes) { if (type.IsPublic) { string packageName = type.Namespace; ZPackageDesc zpackage = GetZPackageDesc(packageName); IZDescType descType = ZTypeManager.GetByMarkType(type); if (descType != null) { zpackage.AddZDescType(descType); } } } }
public static IZDescType GetByMarkType(Type type) { if (type == null) { return(null); } if (Cache.MarkCache.ContainsKey(type)) { return(Cache.MarkCache[type]); } IZDescType descType = CreateZTypeImp(type); if (descType != null) { Cache.AddCache(descType); } return(descType); //var zdesctype = CreateZDescType(type); //if (zdesctype == null) return null; //return zdesctype as ZType; }