예제 #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 void AnalyProcDesc()
 {
     ExpProcDesc = new ZCallDesc();
     for (int i = 0; i < this.Elements.Count; i++)
     {
         Exp exp = this.Elements[i];
         exp.SetContext(this.ExpContext);
         Exp subExp = exp.Analy();
         Elements[i] = subExp;
         if (subExp != null)
         {
             if (subExp is ExpProcNamePart)
             {
                 ExpProcDesc.Add((subExp as ExpProcNamePart).PartName);
             }
             else if (subExp is ExpBracket)
             {
                 ExpProcDesc.Add((subExp as ExpBracket).GetDimArgs().ToArray());
             }
             else
             {
                 ExpBracket bracket = new ExpBracket();
                 bracket.AddInnerExp(subExp);
                 ExpProcDesc.Add(bracket.GetDimArgs().ToArray());
             }
         }
     }
 }