Beispiel #1
0
 public IEnumerable <FuncDef> GetFunc(string name, int arity)
 {
     if (name == null)
     {
         var ctx = this;
         while (ctx != null)
         {
             foreach (var v in ctx.values)
             {
                 var fd = v as FuncDef;
                 if (fd != null)
                 {
                     yield return(fd);
                 }
             }
             ctx = ctx.parent;
         }
     }
     else
     {
         int i = IndexOf(name);
         if (i >= 0)
         {
             var v = this[i];
             if (v is FuncDef)
             {
                 var def = (FuncDef)v;
                 if (def.minArity <= arity && arity <= def.maxArity)
                 {
                     yield return(def);
                 }
             }
             else if (v is LazyAsync)
             {
                 AsyncFn f =
                     (ae, args) =>
                 {
                     return(OPs._call_func(ae, i, args));
                 };
                 yield return(new FuncDef(f, 0, int.MaxValue, name));
             }
         }
     }
     for (int i = externalFuncs.Count - 1; i >= 0; i--)
     {
         foreach (var fd in externalFuncs[i](name, arity))
         {
             yield return(fd);
         }
     }
 }