Esempio n. 1
0
        private string CreateMethodName(ZCMethodDesc zdesc)
        {
            List <string> list = new List <string>();

            for (int i = 0; i < zdesc.Parts.Length; i++)
            {
                object item = zdesc.Parts[i];
                if (item is string)
                {
                    list.Add(item as string);
                }
                else if (item is ZCBracketDesc)
                {
                    ZCBracketDesc zbracket = item as ZCBracketDesc;
                    for (var j = 0; j < zbracket.ParamsCount; j++)
                    {
                        var zparam = zbracket.ZParams[j];
                        if (zparam.GetIsGenericParam())
                        {
                            list.Add("类型");
                        }
                        else
                        {
                            list.Add(zparam.ZParamType.ZTypeName);
                        }
                    }
                }
                else
                {
                    throw new ZyyRTException();
                }
            }
            return(string.Join("", list));
        }
Esempio n. 2
0
        private void ImportZDesc(ZCMethodDesc desc)
        {
            string[] strparts = desc.GetTextParts();

            foreach (var item in strparts)
            {
                if (item.Length > 1)
                {
                    FileSegementer.AddWord(item);
                }
            }
        }
Esempio n. 3
0
 private void BuildProcNamePartDict()
 {
     foreach (ZCClassInfo cclassInfo in CompilingClassDict.ValuesToList())
     {
         foreach (ZCMethodInfo cmethodInfo in cclassInfo.ZMethods)
         {
             ZCMethodDesc cmethodDesc = cmethodInfo.ZMethodDesc;
             foreach (var text in cmethodDesc.GetTextParts())
             {
                 CompilingProcNamePartDict.Add(text, text);
             }
         }
     }
 }
Esempio n. 4
0
 public static bool ZEqualsDesc(ZCMethodDesc zmc1, ZCMethodDesc zmc2)
 {
     if (!ZDescUtil.ZEqualsIPartsCount(zmc1, zmc2))
     {
         return(false);
     }
     if (!ZDescUtil.ZEqualsIPartsText(zmc1, zmc2))
     {
         return(false);
     }
     if (!ZDescUtil.ZEqualsIPartsParameters(zmc1, zmc2))
     {
         return(false);
     }
     return(true);
 }
Esempio n. 5
0
        public void EmitName()
        {
            var          classBuilder = this.MethodContext.ClassContext.GetTypeBuilder();
            bool         isStatic     = this.MethodContext.ClassContext.IsStatic();
            ZCMethodDesc ProcDesc     = NamePart.GetZDesc();
            List <Type>  argTypes     = new List <Type>();
            var          parameters   = MethodContext.ZMethodInfo.ZParams;

            foreach (var zparam in parameters)
            {
                argTypes.Add(ZTypeUtil.GetTypeOrBuilder(zparam.ZParamType));
            }
            var MethodName = NamePart.GetMethodName();
            MethodAttributes methodAttributes;

            if (isStatic)
            {
                methodAttributes = MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig;
            }
            else
            {
                methodAttributes = MethodAttributes.Public | MethodAttributes.Virtual;
            }
            MethodBuilder methodBuilder = classBuilder.DefineMethod(MethodName, methodAttributes,
                                                                    ZTypeUtil.GetTypeOrBuilder(RetZType), argTypes.ToArray());

            if (MethodName == "启动")
            {
                Type                   myType           = typeof(STAThreadAttribute);
                ConstructorInfo        infoConstructor  = myType.GetConstructor(new Type[] { });
                CustomAttributeBuilder attributeBuilder = new CustomAttributeBuilder(infoConstructor, new object[] { });
                methodBuilder.SetCustomAttribute(attributeBuilder);
            }
            else
            {
                string code = this.NamePart.GetZDesc().ToZCode();
                ASTUtil.SetAttrZCode(methodBuilder, code);
            }
            this.MethodContext.SetBuilder(methodBuilder);
            this.NamePart.EmitName();
        }
Esempio n. 6
0
 public ZCMethodDesc GetZDesc()
 {
     if (_ProcDesc == null)
     {
         _ProcDesc = ((ContextMethod)this.MethodAST.MethodContext).ZMethodInfo.ZMethodDesc;// new ZCMethodDesc();
         for (int i = 0; i < NameParts.Count; i++)
         {
             var term = NameParts[i];
             if (term is string)
             {
                 //var textterm = term as LexToken;
                 string namePart = (string)term;
                 _ProcDesc.Add(namePart);
             }
             else if (term is List <MethodParameter> )
             {
                 var _ZBracketDefDesc = new ZCBracketDesc();
                 var args             = (List <MethodParameter>)term;
                 foreach (MethodParameter item in args)
                 {
                     var zarg = item.GetZParam();
                     _ZBracketDefDesc.Add(zarg);
                 }
                 //ProcBracket pbrackets = term as ProcBracket;
                 //var bracketDesc = pbrackets.GetZDesc();
                 _ProcDesc.Add(_ZBracketDefDesc);
             }
             else
             {
                 throw new CCException();
             }
         }
         return(_ProcDesc);
     }
     return(_ProcDesc);
 }