Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }