public static TKTConstructorDesc SearchConstructor(TKTConstructorDesc desc, CnEnDict WordDict, Type ForType) { TKTConstructorDesc bracket2 = desc; if (WordDict != null && desc.Bracket.IsNameValue) { List <TKTProcArg> args = new List <TKTProcArg>(); foreach (var arg in desc.Bracket.ListArgs) { string newArgName = WordDict.Get(arg.ArgName); TKTProcArg newArg = new TKTProcArg(newArgName, arg.ArgType, arg.ArgType.IsGenericType); args.Add(newArg); } bracket2 = new TKTConstructorDesc(args); } ConstructorInfo[] constructorInfoArray = ForType.GetConstructors(); foreach (ConstructorInfo ci in constructorInfoArray) { if (ci.IsPublic) { TKTConstructorDesc bracketCi = ProcDescHelper.CreateProcBracket(ci); if (bracketCi.Eq(bracket2)) { return(bracketCi); } } } return(null); }
public TKTConstructorDesc SearchConstructor(TKTConstructorDesc bracket) { return(GclHelper.SearchConstructor(bracket, this.WordDict, this.ForType)); /* * TKTProcBracket bracket2= bracket; * if (WordDict != null && bracket.IsNameValue) * { * List<TKTProcArg> args = new List<TKTProcArg>(); * foreach (var arg in bracket.ListArgs) * { * string newArgName = WordDict.Get(arg.ArgName); * TKTProcArg newArg = new TKTProcArg(newArgName, arg.ArgType, arg.ArgType.IsGenericType); * args.Add(newArg); * } * bracket2 = new TKTProcBracket(args); * } * foreach(ConstructorInfo ci in ForType.GetConstructors()) * { * if(ci.IsPublic) * { * TKTConstructorDesc bracketCi = ProcDescHelper.CreateProcBracket(ci); * return bracketCi; * } * } * return null;*/ }
public static TKTConstructorDesc CreateProcBracket(ConstructorInfo ci) { List <TKTProcArg> args = new List <TKTProcArg>(); foreach (ParameterInfo param in ci.GetParameters()) { TKTProcArg arg = new TKTProcArg(param.Name, param.ParameterType, false); args.Add(arg); } TKTConstructorDesc desc = new TKTConstructorDesc(args); desc.Constructor = ci; return(desc); }
public void AnalyBody(ClassContext classContext) { if (ValueExp != null) { MethodContext methodContext = new MethodContext(ClassContext, PropertyName); var symbols = ClassContext.Symbols; AnalyStmtContext stmtContext = new AnalyStmtContext(methodContext, PropertyName); AnalyExpContext expContext = new AnalyExpContext(stmtContext); ValueExp = ValueExp.Analy(expContext); if (ValueExp == null) { return; } if (!ReflectionUtil.IsExtends(ValueExp.RetType, PropertyType)) { error("属性值的类型不正确"); } } else { if (PropertyType.IsValueType) { newCode = 4; } else { List <TKTProcArg> args = new List <TKTProcArg>(); ProcDesc = new TKTProcDesc(); ProcDesc.Add(PropertyGcl.ShowName); ProcDesc.Add(args); TKTProcDesc newProcDesc = searchNewProc(classContext, ProcDesc); if (newProcDesc != null) { newCode = 3; } else { ConstructorDesc = new TKTConstructorDesc(args); TKTConstructorDesc realDesc = PropertyGcl.SearchConstructor(ConstructorDesc); if (realDesc != null) { ConstructorDesc.Constructor = realDesc.Constructor; newCode = 2; } } } } }
//public override ZType CreateNewFor(Type forType) //{ // PureZType gcl = new PureZType(forType); // return gcl; //} public override TKTConstructorDesc[] GetConstructors() { List <TKTConstructorDesc> list = new List <TKTConstructorDesc>(); //TKTConstructorDesc bracket2 = desc; ConstructorInfo[] constructorInfoArray = this.SharpType.GetConstructors(); foreach (ConstructorInfo ci in constructorInfoArray) { if (ci.IsPublic) { TKTConstructorDesc bracketCi = ProcDescHelper.CreateProcBracket(ci); list.Add(bracketCi); } } return(list.ToArray()); }
public TKTConstructorDesc SearchConstructor(TKTConstructorDesc bracket) { return(GclUtil.SearchConstructor(bracket, this.WordDict, this.ForType)); }
public override TKTConstructorDesc SearchConstructor(TKTConstructorDesc desc) { return(ZTypeUtil.SearchConstructor(desc, this.SharpType)); }
public override Exp Analy(AnalyExpContext context) { base.Analy(context); var classContext = context.StmtContext.MethodContext.ClassContext; var symbols = this.AnalyExpContext.Symbols; BrackestArgs = BrackestArgs.Analy(context) as BracketExp; if (!BrackestArgs.TrueAnalyed) { return(null); } Type subjectType = SubjectGCL.ForType; if (subjectType.FullName.StartsWith(CompileConstant.LangPackageName + ".列表`1[")) { newCode = 1; ConstructorDesc = new TKTConstructorDesc(); var Constructor = subjectType.GetConstructor(new Type[] {}); if (Constructor == null) { error(BrackestArgs.Postion, "没有正确的创建过程"); return(null); } else { RetType = subjectType; ConstructorDesc.Constructor = Constructor; Type[] genericTypes = GenericUtil.GetInstanceGenriceType(subjectType, typeof(列表 <>)); Type ElementType = genericTypes[0]; var args = BrackestArgs.GetDimArgs(); for (int i = 0; i < args.Count; i++) { Exp arg = args[i].Value as Exp; if (arg.RetType != ElementType && !ReflectionUtil.IsExtends(arg.RetType, ElementType)) { errorf(arg.Postion, "类型不是列表的子类型,不能添加"); } } } } else { var args = BrackestArgs.GetDimArgs(); ProcDesc = new TKTProcDesc(); ProcDesc.Add(SubjectGCL.ShowName); ProcDesc.Add(args); TKTProcDesc newProcDesc = searchNewProc(classContext, ProcDesc); if (newProcDesc != null) { newProcDesc.AdjustBracket(ProcDesc);// ProcDesc.AdjustBracket(newProcDesc); ProcDesc.ExMethod = newProcDesc.ExMethod; newCode = 3; RetType = ProcDesc.ExMethod.Method.ReturnType; } else { ConstructorDesc = new TKTConstructorDesc(args); TKTConstructorDesc realDesc = SubjectGCL.SearchConstructor(ConstructorDesc); if (realDesc == null) { error(BrackestArgs.Postion, "没有正确的创建过程"); return(null); } else { RetType = SubjectGCL.ForType; realDesc.AdjustBracket(ConstructorDesc); ConstructorDesc.Constructor = realDesc.Constructor; newCode = 2; } } } return(this); }
public abstract TKTConstructorDesc SearchConstructor(TKTConstructorDesc desc);
public TKTConstructorDesc SearchConstructor(TKTConstructorDesc desc) { return(GclUtil.SearchConstructor(desc, this.WordDict, this.ForType)); }
public override TKTConstructorDesc SearchConstructor(TKTConstructorDesc bracket) { return(ZTypeUtil.SearchConstructor(bracket, this.SharpType)); }