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 Primitive0(Symbol name, PrimitiveMethod0 method) : base(name, 0) { this.method = method; }
static void AddPrimitive(string name, PrimitiveMethod0 method) { Symbol cname = CanonicalizeName(name); primitiveTable.Add(cname, new Primitive0(Symbol.Make(name), method)); }
internal void OnDeserializedMethod(StreamingContext context) { this.method = procedure.Method; }
PrimitiveCombination0(Primitive0 procedure) : base() { this.procedure = procedure; this.method = procedure.Method; }
static void AddPrimitive(string name, PrimitiveMethod0 method) { Symbol cname = CanonicalizeName (name); primitiveTable.Add (cname, new Primitive0 (Symbol.Make (name), method)); }