static void AddPrimitives(Type type) { MemberInfo [] minfos = type.FindMembers(MemberTypes.Method, BindingFlags.Public | BindingFlags.Static, null, null); foreach (MemberInfo minfo in minfos) { object [] attributes = minfo.GetCustomAttributes(typeof(SchemePrimitiveAttribute), false); if (attributes.Length == 1) { string name = ((SchemePrimitiveAttribute)(attributes [0])).Name; int arity = ((SchemePrimitiveAttribute)(attributes [0])).Arity; MethodInfo mtdinfo = (MethodInfo)minfo; // Console.WriteLine ("Add Primitive {0}", ((PrimitiveAttribute) (attributes [0])).Name); if (arity == 0) { PrimitiveMethod0 del = (PrimitiveMethod0)System.Delegate.CreateDelegate(typeof(PrimitiveMethod0), mtdinfo); AddPrimitive(name, del); } else if (arity == 1) { PrimitiveMethod1 del = (PrimitiveMethod1)System.Delegate.CreateDelegate(typeof(PrimitiveMethod1), mtdinfo); AddPrimitive(name, del); } else if (arity == 2) { PrimitiveMethod2 del = (PrimitiveMethod2)System.Delegate.CreateDelegate(typeof(PrimitiveMethod2), mtdinfo); AddPrimitive(name, del); } else if (arity == 3) { PrimitiveMethod3 del = (PrimitiveMethod3)System.Delegate.CreateDelegate(typeof(PrimitiveMethod3), mtdinfo); AddPrimitive(name, del); } else { PrimitiveMethod del = (PrimitiveMethod)System.Delegate.CreateDelegate(typeof(PrimitiveMethod), mtdinfo); AddPrimitive(name, arity, del); } } } }
public PrimitiveN(Symbol name, int arity, PrimitiveMethod method) : base(name, arity) { this.method = method; }
static void AddPrimitive(string name, int arity, PrimitiveMethod method) { Symbol cname = CanonicalizeName (name); primitiveTable.Add (cname, new PrimitiveN (Symbol.Make (name), arity, method)); }
static void AddPrimitive(string name, int arity, PrimitiveMethod method) { Symbol cname = CanonicalizeName(name); primitiveTable.Add(cname, new PrimitiveN(Symbol.Make(name), arity, method)); }