Esempio n. 1
0
        TKTProcDesc searchNewProc(ClassContext classContext, TKTProcDesc expProcDesc)
        {
            var procArray = ClassContextHelper.SearchProc(classContext, expProcDesc);

            if (procArray.Length == 1)
            {
                return(procArray[0]);
            }
            else if (procArray.Length > 1)
            {
                error("找到多个过程,不能确定是属于哪一个简略使用的类型的过程");
            }
            else if (procArray.Length == 0)
            {
                //error("没有找到对应的过程'" + this.ToCode() + "'");
            }
            return(null);
        }
Esempio n. 2
0
 Exp analyAsDirectMember(AnalyExpContext context)
 {
     object[] objs = ClassContextHelper.SearchDirectIdent(classContext, IdentName);
     if (objs.Length == 0)
     {
         //error("属性或者规定的值'" + IdentName + "'不存在");
         return(null);
     }
     else if (objs.Length > 1)
     {
         error("属性或者规定的值'" + IdentName + "'不明确");
         return(null);
     }
     else
     {
         var        obj = objs[0];
         SymbolInfo directSymbol;
         if (obj is ExPropertyInfo)
         {
             var pvar = obj as ExPropertyInfo;
             directSymbol = new SymbolPropertyDirect(IdentName, pvar);
             RetType      = pvar.Property.PropertyType;
         }
         else if (obj is ExFieldInfo)
         {
             var pvar = obj as ExFieldInfo;
             directSymbol = new SymbolFieldDirect(IdentName, pvar);
             RetType      = pvar.Field.FieldType;
         }
         else
         {
             var enumSymbol = new SymbolEnumItem(IdentName, obj);
             directSymbol = enumSymbol;
             RetType      = enumSymbol.DimType;
         }
         if (directSymbol != null)
         {
             DirectMemberExp exp = new DirectMemberExp(this, IdentToken, directSymbol, this.IsAssignedBy, this.IsAssignedValue);
             return(exp);
         }
     }
     return(null);
 }
Esempio n. 3
0
        Tuple <Exp, int> analyCall(AnalyExpContext context)
        {
            TKTProcDesc procdesc = new TKTProcDesc();

            procdesc.Add(IdentName);
            var procArray = ClassContextHelper.SearchProc(classContext, procdesc);

            if (procArray.Length == 1)
            {
                InvokeSimplestExp exp = new InvokeSimplestExp(this, IdentToken, procArray[0]);
                return(new Tuple <Exp, int> (exp, 1));
            }
            else if (procArray.Length == 0)
            {
                return(new Tuple <Exp, int>(null, 0));
            }
            else
            {
                errorf("有多个相同名称'{0}'过程,不能确定是哪个过程", IdentName);
                return(new Tuple <Exp, int>(null, procArray.Length));
            }
        }
Esempio n. 4
0
        TKTProcDesc searchProc(ClassContext classContext)
        {
            var procArray = ClassContextHelper.SearchProc(classContext, ExpProcDesc);

            if (procArray.Length == 1)
            {
                //procArray[0].AdjustBracket(procDesc);
                return(procArray[0]);
            }
            else if (procArray.Length > 1)
            {
                error("找到多个过程,不能确定是属于哪一个简略使用的类型的过程");
            }
            else if (procArray.Length == 0)
            {
                if (Elements[0] is BracketExp)
                {
                    SubjectExp  = Elements[0];
                    subjType    = SubjectExp.RetType;
                    ExpProcDesc = ExpProcDesc.CreateTail();
                    procArray   = ClassContextHelper.SearchProc(classContext, subjType, ExpProcDesc);

                    if (procArray.Length == 1)
                    {
                        return(procArray[0]);
                    }
                    else if (procArray.Length == 0)
                    {
                        error("没有找到对应的过程'" + this.ToCode() + "'");
                    }
                    else if (procArray.Length > 1)
                    {
                        error("找到多个过程,不能确定是属于哪一个简略使用的类型的过程:'" + this.ToCode() + "'");
                    }
                }
            }
            return(null);
        }