示例#1
0
 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);
     }
 }
示例#2
0
 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();
     }
 }
示例#3
0
        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);
            }
        }
示例#4
0
        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();
                }
            }
        }
示例#5
0
        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);
                    }
                }
            }
        }
示例#6
0
        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;
        }