예제 #1
0
        private ZCallDesc ToZCallDesc(ZMethodDesc methodDesc)
        {
            ZCallDesc callDesc = new ZCallDesc();

            foreach (var part in methodDesc.Parts)
            {
                if (part is string)
                {
                    callDesc.Add(part);
                }
                else if (part is ZMethodNormalArg)
                {
                    ZMethodNormalArg mna     = part as ZMethodNormalArg;
                    ZCallValueArg    callArg = new ZCallValueArg(mna.ArgZType);
                    callDesc.Add(callArg);
                }
                else if (part is ZMethodGenericArg)
                {
                    ZMethodGenericArg mna     = part as ZMethodGenericArg;
                    ZCallValueArg     callArg = new ZCallValueArg(mna.ArgBaseZType);
                    callDesc.Add(callArg);
                }
                else
                {
                    throw new CompileException();
                }
            }
            return(callDesc);
        }
예제 #2
0
        private ZMethodArg parseArg()
        {
            string argTypeName = parseIdent();

            movenext();
            string argname = parseIdent();

            //string realArgName = argname;
            if (string.IsNullOrEmpty(argname))
            {
                return(null);
            }
            //ZMethodArg arg = null;
            if (argTypeDict.ContainsKey(argTypeName))
            {
                ZMethodGenericArg genericArg = new ZMethodGenericArg(argTypeName, ZTypeManager.ZOBJECT);
                return(genericArg);
            }
            else
            {
                var ztype = GetZTypeByTypeName(argTypeName);
                if (ztype != null)
                {
                    ZMethodNormalArg zarg = new ZMethodNormalArg(argname, ztype);
                    return(zarg);
                }
            }
            throw new ZyyRTException("没有导入'" + argTypeName + "'类型");
            //return arg;
        }