Example #1
0
        void parseBracket()
        {
            i++;
            List <TKTProcArg> bracketargs = new List <TKTProcArg>();

            //Dictionary<string, TKTProcArg> dict = new Dictionary<string, TKTProcArg>();
            for (; i < Code.Length; i++)
            {
                TKTProcArg arg = parseArg();
                if (arg != null)
                {
                    bracketargs.Add(arg);
                }
                //dict.Add(arg.ArgName, arg);
                if (ch == '\0')
                {
                    break;
                }
                if (ch == ')')
                {
                    i++;
                    break;
                }
            }
            //TKTProcBracket bracket = new TKTProcBracket(bracketargs,dict);
            desc.Add(bracketargs);
        }
Example #2
0
        public static TKTConstructorDesc SearchConstructor(TKTConstructorDesc desc, CnEnDict WordDict, Type ForType)
        {
            TKTConstructorDesc bracket2 = desc;

            if (WordDict != null && desc.Bracket.IsNameValue)
            {
                List <TKTProcArg> args = new List <TKTProcArg>();
                foreach (var arg in desc.Bracket.ListArgs)
                {
                    string     newArgName = WordDict.Get(arg.ArgName);
                    TKTProcArg newArg     = new TKTProcArg(newArgName, arg.ArgType, arg.ArgType.IsGenericType);
                    args.Add(newArg);
                }
                bracket2 = new TKTConstructorDesc(args);
            }
            ConstructorInfo[] constructorInfoArray = ForType.GetConstructors();
            foreach (ConstructorInfo ci in constructorInfoArray)
            {
                if (ci.IsPublic)
                {
                    TKTConstructorDesc bracketCi = ProcDescHelper.CreateProcBracket(ci);
                    if (bracketCi.Eq(bracket2))
                    {
                        return(bracketCi);
                    }
                }
            }
            return(null);
        }
        public static TKTProcDesc CreateProcDesc(ExMethodInfo exMethod)
        {
            var         method = exMethod.Method;
            TKTProcDesc desc   = new TKTProcDesc();

            desc.Add(method.Name);
            if (method.IsGenericMethod)
            {
                foreach (Type paramType in method.GetGenericArguments())
                {
                    TKTProcArg arg = new TKTProcArg(paramType, true);
                    desc.Add(arg);
                }
            }
            if (method.GetParameters().Length > 0)
            {
                List <TKTProcArg> args = new List <TKTProcArg>();
                foreach (ParameterInfo param in method.GetParameters())
                {
                    TKTProcArg arg = new TKTProcArg(param.Name, param.ParameterType, false);
                    args.Add(arg);
                }
                desc.Add(args);
            }
            desc.ExMethod = exMethod;
            return(desc);
        }
Example #4
0
        static TKTProcArg TestProcArg()
        {
            TKTProcArg arg  = new TKTProcArg("GET", typeof(string), true);
            TKTProcArg arg2 = new TKTProcArg("GET", typeof(string), false);

            return(arg);
        }
Example #5
0
        public List <TKTProcArg> GetDimArgs()
        {
            List <TKTProcArg> args = new List <TKTProcArg>();

            foreach (var exp in this.InneExps)
            {
                bool       isGeneric = false;
                Type       type      = exp.RetType;
                string     argName   = null;
                TKTProcArg arg       = null;
                if (exp is TypeExp)
                {
                    var idExp = exp as TypeExp;
                    isGeneric = idExp.RetType.IsGenericType;
                    arg       = new TKTProcArg(type, isGeneric);
                }
                else if (exp is NameValueExp)
                {
                    argName = (exp as NameValueExp).NameToken.GetText();
                    arg     = new TKTProcArg(argName, type, isGeneric);
                }
                else
                {
                    arg = new TKTProcArg(type, isGeneric);
                }
                arg.Value = exp;
                args.Add(arg);
            }
            return(args);
        }
 public InvokeEveryoneBaseExp(InvokeExp srcExp)
     : base(srcExp)
 {
     invokeExp = srcExp;
     TKTProcArg arg = invokeExp.ExpProcDesc.GetArg(0);
     //everyoneExp = (arg.Value as EveryOneExp);
 }
Example #7
0
 protected void GenerateArgsExp(EmitExpContext context, TKTProcDesc expProcDesc, TKTProcDesc searchedProcDesc, int size)
 {
     for (int i = 0; i < size; i++)
     {
         var        arg     = expProcDesc.GetArg(i);
         var        exp     = (arg.Value as Exp);
         TKTProcArg procArg = searchedProcDesc.GetArg(i);
         exp.RequireType = procArg.ArgType;
         exp.Generate(context);
     }
 }
        public static TKTConstructorDesc CreateProcBracket(ConstructorInfo ci)
        {
            List <TKTProcArg> args = new List <TKTProcArg>();

            foreach (ParameterInfo param in ci.GetParameters())
            {
                TKTProcArg arg = new TKTProcArg(param.Name, param.ParameterType, false);
                args.Add(arg);
            }
            TKTConstructorDesc desc = new TKTConstructorDesc(args);

            desc.Constructor = ci;
            return(desc);
        }
Example #9
0
        bool isObjectEveryOneExp()
        {
            int argsCount = searchedProcDesc.ArgCount;

            if (argsCount == 1)
            {
                TKTProcArg arg = ExpProcDesc.GetArg(0);
                Exp        exp = (arg.Value as Exp);
                if (exp is EveryOneExp)
                {
                    return(true);
                }
            }
            return(false);
        }
Example #10
0
        List <Type> findGenericTypes()
        {
            List <Type> types = new List <Type>();

            for (int i = 0; i < ExpProcDesc.Count; i++)
            {
                if (searchedProcDesc.GetArg(i).IsGenericArg)
                {
                    TKTProcArg procArg = ExpProcDesc.GetArg(i);
                    Type       type    = (procArg.Value as Exp).RetType;
                    types.Add(type);
                }
            }
            return(types);
        }
Example #11
0
 void analyArgLanmbda(AnalyExpContext context)
 {
     for (int i = 0; i < ExpProcDesc.ArgCount; i++)
     {
         TKTProcArg procArg = searchedProcDesc.GetArg(i);
         if (procArg.ArgType == TKTLambda.ActionType || procArg.ArgType == TKTLambda.CondtionType)
         {
             TKTProcArg   expArg       = ExpProcDesc.GetArg(i);
             Exp          exp          = expArg.Value as Exp;
             NewLambdaExp newLambdaExp = new NewLambdaExp(this, exp, procArg.ArgType);
             expArg.Value = newLambdaExp;
             newLambdaExp.Analy(context);
         }
     }
 }
Example #12
0
        TKTProcArg parseArg()
        {
            string argtypename = parseIdent();

            movenext();
            string argname     = parseIdent();
            string realArgName = argname;

            if (string.IsNullOrEmpty(argname))
            {
                return(null);
            }
            if (this.WordDict != null)
            {
                realArgName = this.WordDict.Get(argname);
            }
            TKTProcArg arg = null;

            if (argtypename == "类型")
            {
                Type type = typeof(object);
                arg = new TKTProcArg(realArgName, type, true);
            }
            else if (ArgTypeDict.ContainsKey(argtypename))
            {
                Type type = ArgTypeDict[argtypename];
                arg = new TKTProcArg(realArgName, type, false);
            }
            else if (argtypename == "Func<bool>")//(argtypename.IndexOf("<") > 0 && argtypename.IndexOf(">") > 0)
            {
                //if(argtypename=="Func<bool>")
                //{
                arg = new TKTProcArg(realArgName, typeof(Func <bool>), false);
                //}
            }
            else if (argtypename == "Action")
            {
                arg = new TKTProcArg(realArgName, typeof(Action), false);
            }
            else
            {
                throw new RTException("没有导入'" + argtypename + "'类型");
            }
            return(arg);
        }
Example #13
0
        bool AnlayNameBody(int startArgIndex)
        {
            var symbols = MethodAST.MethodContext.Symbols;

            ProcDesc = new TKTProcDesc();
            int argIndex = startArgIndex;

            for (int i = 0; i < NameTerms.Count; i++)
            {
                var term = NameTerms[i];
                if (term is FnText)
                {
                    var textterm = term as FnText;
                    textterm.Analy(this);
                    ProcDesc.Add(textterm.TextContent);
                }
                else if (term is FnBracket)
                {
                    var argterm = term as FnBracket;
                    List <TKTProcArg> procArgs = new List <TKTProcArg>();
                    foreach (var arg in argterm.Args)
                    {
                        bool b = arg.Analy(this, argIndex);
                        if (b)
                        {
                            TKTProcArg procArg = new TKTProcArg(arg.ArgName, arg.ArgType, arg.IsGenericArg);
                            procArgs.Add(procArg);
                            argIndex++;
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    ProcDesc.Add(procArgs);
                }
            }
            if (!checkName())
            {
                return(false);
            }
            MethodAST.MethodContext.ProcDesc = ProcDesc;
            MethodAST.MethodContext.ClassContext.ClassSymbol.AddMethod(MethodAST.MethodContext);
            return(true);
        }