public Datum Evaluate(Datum args) { if (!DatumHelpers.nil.Equals(args)) { throw DatumHelpers.error("gensym accepts no arguments"); } return(Symbol.GenUnique()); }
public Datum Evaluate(Datum args) { if (!DatumHelpers.nil.Equals(args)) { throw DatumHelpers.error("No arguments expected for function '{0}'", name); } return(accessor().ToAtom()); }
public static Datum GetSingle(Datum args) { var argArray = args.ToArray(); if (argArray.Length != 1) { throw DatumHelpers.error("Expected a single argument. Got {0}", argArray.Length); } return(argArray[0]); }
public Datum Evaluate(Datum args) { var argDatums = args.ToArray(); if (argDatums.Length != 2) { throw DatumHelpers.error("Exactly 2 arguments expected"); } return(eval(argDatums[0], argDatums[1])); }
public Datum Evaluate(Datum args) { var argArray = args.ToArray(); if (argArray.Length != 3) { throw DatumHelpers.error("{0}: 3 arguments expected, got {1}", name, argArray.Length); } return(funcDelegate(argArray[0], argArray[1], argArray[2])); }
protected override Datum eval(Datum arg) { var input = arg.CastObject(); if (!(input is T)) { throw DatumHelpers.error("Expected '{0}' to be of type '{1}'", arg, typeof(T).Name); } return(funcDelegate((T)input).ToAtom()); }
private static Continuation asContinuation(Datum arg) { var cfunction = arg as CallCC.ContinuationFunction; if (cfunction == null) { throw DatumHelpers.error("'{0}' is not a continuation", arg); } return(cfunction.Continuation); }
public override Continuation Evaluate(Continuation c, Datum args) { var argArray = args.ToArray(); if (argArray.Length != 2) { throw DatumHelpers.error("Invalid syntax. ArgCount ({0}) != 2. Usage: (execute-with-error-handler <error-function> <fn>)", argArray.Length); } var errorHandler = makeErrorHandler(c.ErrorHandler, (StackFunction)argArray[0]); var fn = (StackFunction)argArray[1]; return(fn.Evaluate(c.NewErrorHandler(errorHandler), DatumHelpers.compound())); }
public Datum Evaluate(Datum args) { var argsArray = args.ToArray(); if (argsArray.Length < 1) { throw DatumHelpers.error("No type specified for 'new'"); } var type = (Type)argsArray[0].CastObject(); var constructorArgs = argsArray.Skip(1).Select(DatumHelpers.castObject).ToArray(); var instance = Activator.CreateInstance(type, constructorArgs); return(instance.ToAtom()); }
public override Continuation Evaluate(Continuation c, Datum args) { var argArray = args.ToArray(); if (argArray.Length != 1) { throw DatumHelpers.error("call/cc: expect a single function as an argument. Got {0}", argArray.Length); } var arg = argArray[0]; var function = arg as StackFunction; if (function == null) { throw DatumHelpers.error("call/cc: {0} must be a function", arg); } return(function.Evaluate(c, DatumHelpers.compound(new ContinuationFunction(c)))); }
// Thanks to http://stackoverflow.com/questions/2367652/how-type-gettype-works-when-given-partially-qualified-type-name // for this: public static Type GetTypeEx(string fullTypeName) { var type = Type.GetType(fullTypeName); if (type != null) { return(type); } var assembly = typeof(ReflectionBuiltins).GetTypeInfo().Assembly; if (assembly != null) { return(assembly.GetType(fullTypeName)); } throw DatumHelpers.error("Could not locate type '{0}' in loaded assembly", fullTypeName); }
// Thanks to http://stackoverflow.com/questions/2367652/how-type-gettype-works-when-given-partially-qualified-type-name // for this: public static Type GetTypeEx(string fullTypeName) { var type = Type.GetType(fullTypeName); if (type != null) { return(type); } var assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.GetType(fullTypeName) != null); if (assembly != null) { return(assembly.GetType(fullTypeName)); } throw DatumHelpers.error("Could not locate type '{0}' in any of the {1} currently loaded assemblies", fullTypeName, AppDomain.CurrentDomain.GetAssemblies().Length); }
Exception bindError(Datum args) { return(DatumHelpers.error("Could not bind '{0}' to '{1}'", argList(), args)); }
private static Datum throwMsg(Datum arg) { var msg = (String)arg.CastObject(); throw DatumHelpers.error(msg); }
private static Exception undefined(Symbol symbol) { return(DatumHelpers.error("Undefined symbol '{0}'", symbol)); }