public static ZTypeCompareEnum ZEquals(IParameter p1, IParameter p2) { if (!(ZEqualsName(p1, p2))) { return(ZTypeCompareEnum.NEQ); } if (p1.IsCallArg()) { throw new Exception("调用参数只能在第二个"); } if (p1.IsRuntimeType || p2.IsRuntimeType) { return(ZTypeCompareEnum.NEQ); } var t1 = p1.GetZParamType(); var t2 = p2.GetZParamType(); if (t1 == null) { return(ZTypeCompareEnum.NEQ); } if (t2 == null) { throw new ZLibRTException(); // return ZTypeCompareEnum.NEQ; } ZTypeCompareEnum eqResult = Compare(t1, t2); return(eqResult); }
public ZLMethodInfo[] SearchDeclaredZMethod(ZMethodCall zcall) { List <ZLMethodInfo> methods = new List <ZLMethodInfo>(); foreach (var item in this.ZMethods) { if (item.HasZProcDesc(zcall)) { methods.Add(item); } } if (methods.Count > 1) { ZLMethodInfo tempMethod = methods[0]; for (int i = 1; i < methods.Count; i++) { var itemMethod = methods[i]; ZTypeCompareEnum compareEnum = ParamCompare(tempMethod, itemMethod); if (compareEnum == ZTypeCompareEnum.SuperOf) { tempMethod = itemMethod; } } methods.Clear(); methods.Add(tempMethod); } return(methods.ToArray()); }
private static ZTypeCompareEnum Compare(ZLClassInfo z1, ZCClassInfo z2) { ZTypeCompareEnum result = Compare(z1, z2.BaseZClass); if (result == ZTypeCompareEnum.EQ) { return(ZTypeCompareEnum.SuperOf); } else if (result == ZTypeCompareEnum.SuperOf) { return(ZTypeCompareEnum.SuperOf); } else { return(ZTypeCompareEnum.NEQ); } }
private static ZTypeCompareEnum ParamCompare(ZLMethodInfo method1, ZLMethodInfo method2) { var parames1 = method1.ZParams; var parames2 = method2.ZParams; for (int i = 0; i < parames1.Length; i++) { var p1 = parames1[i]; var p2 = parames2[i]; var ztype1 = p1.GetZParamType(); var ztype2 = p2.GetZParamType(); ZTypeCompareEnum compareEnum = ZDescUtil.Compare(ztype1, ztype2); if (compareEnum != ZTypeCompareEnum.EQ) { return(compareEnum); } } return(ZTypeCompareEnum.EQ); }
public static bool ZEqualsIBracket(IBracket ip1, IBracket ip2) { if (!ZEqualsIBracketCount(ip1, ip2)) { return(false); } int size = ip1.GetParametersCount(); IParameter[] parameters1 = ip1.GetParameters(); IParameter[] parameters2 = ip2.GetParameters(); for (int i = 0; i < size; i++) { var p1 = parameters1[i]; var p2 = parameters2[i]; ZTypeCompareEnum eqResult = ZEquals(p1, p2); if (!(eqResult == ZTypeCompareEnum.EQ || eqResult == ZTypeCompareEnum.SuperOf)) { return(false); } } return(true); }