Esempio n. 1
0
 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());
 }
Esempio n. 3
0
        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());
            }
Esempio n. 7
0
        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()));
        }
Esempio n. 9
0
            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());
            }
Esempio n. 10
0
        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))));
        }
Esempio n. 11
0
        // 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);
        }
Esempio n. 12
0
        // 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);
        }
Esempio n. 13
0
 Exception bindError(Datum args)
 {
     return(DatumHelpers.error("Could not bind '{0}' to '{1}'", argList(), args));
 }
Esempio n. 14
0
        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));
 }