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 Primitive3(Symbol name, PrimitiveMethod3 method) : base(name, 3) { this.method = method; }
static void AddPrimitive(string name, PrimitiveMethod3 method) { primitiveTable.Add(CanonicalizeName(name), new Primitive3(Symbol.Make(name), method)); }
static void AddPrimitive(string name, PrimitiveMethod3 method) { primitiveTable.Add (CanonicalizeName (name), new Primitive3 (Symbol.Make (name), method)); }