public RTResult Execute(List <LToken> args, Context _context, TextPosition pos) { RTResult res = new RTResult(); Context ctx = parent.context.Copy(); ctx.name = name.value.text; ctx.parentEntry = pos; ctx.parent = _context; ctx.lastIn = this; ctx.varlist.parent = DeffCon.varlist; if (Predefs.ContainsKey(name.value.text) || Special.ContainsKey(name.value.text)) { for (int n = 0; n < args.Count; n++) { ctx.varlist.Add("_ARG" + n, args[n].SetContext(ctx)); } } else { for (int n = 0; n < argNames.Count; n++) { if (n < args.Count) { ctx.varlist.Add(argNames[n], args[n].SetContext(ctx)); } else { ctx.varlist.Add(argNames[n], new LToken(TokenType.VALUE, Value.NULL, pos).SetContext(ctx)); } } } LToken t; if (Predefs.ContainsKey(name.value.text)) { t = res.Register(Predefs[name.value.text](ctx, args.Count)); } else if (Special.ContainsKey(name.value.text)) { t = res.Register(Special[name.value.text](ctx, args.Count)); } else { t = res.Register(Interpreter.Visit(body, ctx)); } if (res.error != null) { return(res); } return(res.Succes(t.SetContext(ctx))); }