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)); }
private void ImportZDesc(ZCMethodDesc desc) { string[] strparts = desc.GetTextParts(); foreach (var item in strparts) { if (item.Length > 1) { FileSegementer.AddWord(item); } } }
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); } } } }
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); }
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(); }
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); }