public override Continuation Evaluate(Continuation c, Environment env, Datum args) { var datumArgs = args.ToArray(); if (datumArgs.Length != 1) { throw c.error("Ref expect 1s arguments. {0} passed", datumArgs.Length); } var assemblyName = datumArgs[0].CastIdentifier(); var assembly = Assembly.Load(assemblyName); // Keep a hash set to avoid adding things twice. // Overload resolution is (hopefully) handled by // InvokeMethod. var symbols = new HashSet <object>(); // Add all static methods foreach (var t in assembly.GetTypes()) { // Make each type have a symbol in the environment also. env.Define(t.FullName, t.ToAtom()); foreach (var mi in t.GetMethods()) { var symbol = string.Format("{0}.{1}", t.FullName, mi.Name); if (mi.IsStatic && symbols.Add(symbol)) { env.Define(symbol, new StaticMethod(t, mi.Name).ToStack()); } } } return(c.PushResult(DatumHelpers.nil)); }
public Continuation Perform(Continuation c) { env.Define(name, c.Result); return(c); }
public override Continuation Evaluate(Continuation c, Environment env, Datum args) { var datumArgs = args.ToArray(); if (datumArgs.Length != 1) throw c.error("Ref expect 1s arguments. {0} passed", datumArgs.Length); var assemblyName = datumArgs[0].CastIdentifier(); var assembly = Assembly.Load(assemblyName); // Keep a hash set to avoid adding things twice. // Overload resolution is (hopefully) handled by // InvokeMethod. var symbols = new HashSet<object>(); // Add all static methods foreach (var t in assembly.GetTypes()) { // Make each type have a symbol in the environment also. env.Define(t.FullName, t.ToAtom()); foreach (var mi in t.GetMethods()) { var symbol = string.Format("{0}.{1}", t.FullName, mi.Name); if (mi.IsStatic && symbols.Add(symbol)) env.Define(symbol, new StaticMethod(t, mi.Name).ToStack()); } } return c.PushResult(DatumHelpers.nil); }