Esempio n. 1
0
        public static void Setup(Context context)
        {
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CAAR, Caar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CADR, Cadr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDAR, Cdar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDDR, Cddr, 1);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_CAAAR, Caaar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CAADR, Caadr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CADAR, Cadar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CADDR, Caddr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDAAR, Cdaar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDADR, Cdadr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDDAR, Cddar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDDDR, Cdddr, 1);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_CAAAAR, Caaaar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CAAADR, Caaadr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CAADAR, Caadar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CAADDR, Caaddr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CADAAR, Cadaar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CADADR, Cadadr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CADDAR, Caddar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CADDDR, Cadddr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDAAAR, Cdaaar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDAADR, Cdaadr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDADAR, Cdadar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDADDR, Cdaddr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDDAAR, Cddaar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDDADR, Cddadr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDDDAR, Cdddar, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDDDDR, Cddddr, 1);
        }
Esempio n. 2
0
        public static void Setup(Context context)
        {
            //  num is char
            //  (str-create (num num num)) -> num
            //  (str-length string) -> length
            //  (str-get string element) -> num
            //
            //  (str-concat string1 string2 string3) -> string1string2string3
            //  (str-substr string start length) -> substring
            //  (str-split string separator) -> ("substring1" "substring2" "substring3")
            //
            //  (str-starts-with string check) -> true|false
            //  (str-ends-with string check) -> true|false
            //  (str-contains string substring) -> true|false
            //
            //  (str-replace string subString newSubString) -> string

            BombardoLangClass.SetProcedure(context, AllNames.TEXT_CREATE, Create, 1);
            BombardoLangClass.SetProcedure(context, AllNames.TEXT_LENGTH, Length, 1);
            BombardoLangClass.SetProcedure(context, AllNames.TEXT_GETCHARS, GetChars, 1);
            BombardoLangClass.SetProcedure(context, AllNames.TEXT_GETCHAR, GetChar, 2);

            BombardoLangClass.SetProcedure(context, AllNames.TEXT_CONCAT, Concat, 0);
            BombardoLangClass.SetProcedure(context, AllNames.TEXT_SUBSTR, Substr, 3);
            BombardoLangClass.SetProcedure(context, AllNames.TEXT_SPLIT, Split, 2);

            BombardoLangClass.SetProcedure(context, AllNames.TEXT_STARTSWITH, StartsWith, 2);
            BombardoLangClass.SetProcedure(context, AllNames.TEXT_ENDSWITH, EndsWith, 2);
            BombardoLangClass.SetProcedure(context, AllNames.TEXT_CONTAINS, Contains, 2);

            BombardoLangClass.SetProcedure(context, AllNames.TEXT_REPLACE, Replace, 3);
        }
Esempio n. 3
0
        public static void Setup(Context context)
        {
            timeouts  = new List <Interval>();
            intervals = new List <Interval>();

            //  (interval-set 1500 (lambda () (print "yo!"))) -> interval
            //  (interval-set `(tag 1500) (lambda () (print "yo!"))) -> interval
            //  (interval-clear interval) -> stops interval
            //
            //  AllIntervals -> list of intervals
            //  (timeout-set 1500 (lambda () (print "yo!"))) -> timeout
            //  (timeout-set `(tag 1500) (lambda () (print "yo!"))) -> interval
            //  (timeout-clear timeout) -> stops timeout
            //
            //  AllTimeouts -> list of timeouts

            BombardoLangClass.SetProcedure(context, AllNames.LISP_GET_TIME, GetTime, 0);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_INTERVAL_PRED, IntervalPred, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TIMEOUT_PRED, TimeoutPred, 1);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_INTERVAL_SET, IntervalSet, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_INTERVAL_CLEAR, IntervalClear, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_INTERVAL_TAG, IntervalTag, 1);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_TIMEOUT_SET, TimeoutSet, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TIMEOUT_CLEAR, TimeoutClear, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TIMEOUT_TAG, IntervalTag, 1);
        }
Esempio n. 4
0
        private static void ExecuteFile(string path, Context context)
        {
            string      raw   = File.ReadAllText(path);
            List <Atom> nodes = BombardoLangClass.Parse(raw);

            foreach (var node in nodes)
            {
                Evaluator.Evaluate(node, context);
            }
        }
Esempio n. 5
0
        public static void Setup(Context context)
        {
            BombardoLangClass.SetProcedure(context, AllNames.LOGIC_EQ, Eq, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LOGIC_NEQ, Neq, 2);

            BombardoLangClass.SetProcedure(context, AllNames.LOGIC_AND, And, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LOGIC_OR, Or, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LOGIC_XOR, Xor, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LOGIC_IMP, Imp, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LOGIC_NOT, Not, 1);
        }
Esempio n. 6
0
        public static Atom FromString(Atom args, Context context)
        {
            Atom str = (Atom)args.value;

            if (!str.IsString())
            {
                throw new ArgumentException("Argument must be string!");
            }
            List <Atom> atoms = BombardoLangClass.Parse((string)str.value);

            return(Atom.List(atoms.ToArray()));
        }
Esempio n. 7
0
        public static void Setup(Context context)
        {
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TABLE_CREATE, TableCreate, 0);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TABLE_GET, TableGet, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TABLE_SET, TableSet, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TEBLE_REMOVE, TebleRemove, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TABLE_CLEAR, TableClear, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TABLE_IMPORT, TableImport, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TABLE_IMPORT_ALL, TableImportAll, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_TABLE_EACH, TableEach, 2);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_TABLE_PRED, TablePred, 1);
        }
Esempio n. 8
0
        public static void Start()
        {
            Console.WriteLine("Basic BombardoV1 lang");
            Console.WriteLine("07.2018 by Kaleb Sadalmalik");
            ShowWelcome(null, null);

            loop_ = true;
            BombardoLangClass.Init(false);

            //  Add to basic context
            Context system = BombardoLangClass.Global;

            system.Define("#path", new Atom(AtomType.String, System.AppDomain.CurrentDomain.BaseDirectory));
            BombardoLangClass.SetProcedure(system, "welcome", ShowWelcome, 0);
            BombardoLangClass.SetProcedure(system, "w", ShowWelcome, 0);
            BombardoLangClass.SetProcedure(system, "about", ShowAbout, 0);
            BombardoLangClass.SetProcedure(system, "exit", Exit, 0);
            BombardoLangClass.SetProcedure(system, "e", Exit, 0);
            BombardoLangClass.SetProcedure(system, "halp", Halp, 0);
            BombardoLangClass.SetProcedure(system, "h", Halp, 0);
            BombardoLangClass.SetProcedure(system, "load", LoadEval, 1);
            BombardoLangClass.SetProcedure(system, "l", LoadEval, 1);
            BombardoLangClass.WrapContext();

            Console.CancelKeyPress += ResetConsole;

            while (loop_)
            {
                try
                {
                    Console.Write(":> ");
                    storage_ += Console.ReadLine();
                    List <Atom> nodes;
                    if (TryParse(storage_, out nodes))
                    {
                        storage_ = "";
                        foreach (var node in nodes)
                        {
                            Atom result = Evaluator.Evaluate(node, BombardoLangClass.Global);
                            Console.WriteLine(result != null ? result.ToString() : AllNames.NULL_SYMBOL);
                        }
                    }
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc.ToString());
                }
            }
        }
Esempio n. 9
0
        public static void Setup(Context context)
        {
            bombardoLang_ = context;

            programPath_  = new FileInfo(Assembly.GetEntryAssembly().Location).Directory.ToString();
            modules_      = new Dictionary <string, BombardoModule>();
            modulesStack_ = new Stack <BombardoModule>();

            //  (require "myModule.brd") => myModule
            //  (require "myModule.brd" as ultraModule) => ultraModule
            //  (require "myModule.brd" import stuff1 stuff2 stuff3) => stuff1 stuff2 stuff3

            BombardoLangClass.SetProcedure(bombardoLang_, AllNames.MODULE_REQUIRE, Require, 1, false);
            BombardoLangClass.SetProcedure(bombardoLang_, AllNames.MODULE_EXPORT, Export, 1, false);

            modulesStack_.Push(new BombardoModule(programPath_, context, false));
        }
Esempio n. 10
0
        public static void Setup(Context context)
        {
            //  (concurentQueueCreate) -> queue
            //  (concurentQueueEnqueue queue atom)
            //  (concurentQueueDequeue queue) -> atom
            //  (concurentQueueCount queue) -> count

            //  (concurentQueue? queue) -> true
            //  (concurentQueue? anything-else) -> false

            BombardoLangClass.SetProcedure(context, AllNames.CONCURENCY_QUEUE_CREATE, CreateThreadSafeQueue, 0);
            BombardoLangClass.SetProcedure(context, AllNames.CONCURENCY_QUEUE_ENQUEUE, ThreadSafeEnqueue, 1);
            BombardoLangClass.SetProcedure(context, AllNames.CONCURENCY_QUEUE_DEQUEUE, ThreadSafeDequeue, 1);
            BombardoLangClass.SetProcedure(context, AllNames.CONCURENCY_QUEUE_COUNT, ThreadSafeCount, 1);

            BombardoLangClass.SetProcedure(context, AllNames.CONCURENCY_QUEUE_PRED, ThreadSafeCount, 1);
        }
Esempio n. 11
0
        public static Atom Parse(Atom args, Context context)
        {
            Atom text = args?.atom;

            if (text.type != AtomType.String)
            {
                throw new ArgumentException("Argument must be string!");
            }

            try
            {
                var atoms = BombardoLangClass.Parse((string)text?.value);
                return(Atom.List(atoms.ToArray()));
            }
            catch { }

            return(null);
        }
Esempio n. 12
0
        public static void Setup(Context context)
        {
            //  (nope anything) -> null
            //  (marker anything) -> null // Created for debugging in visual studio
            //  `anything -> (quote anything) -> anything
            //  (parse "expression") -> expression
            //  (eval expression) -> result of expression
            //  (evalEach (expression expression expression ...)) -> result of last expression
            //  (cond ((condition) expression) ((condition) expression) ...) -> result of success statement, or null
            //  (if condition expression [alternative-expression]) -> result of expression or alternative-expression if condition was false
            //  (while condition (expression expression expression ...)) -> evaluates expressions while condition is true, return null
            //  (until condition (expression expression expression ...)) -> same as (while (not condition) ...)

            BombardoLangClass.SetProcedure(context, AllNames.LISP_NOPE, Nope, 0, false);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_MARKER, Marker, 0, false);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_QUOTE, Quote, 1, false);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_PARSE, Parse, 1, true);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_EVAL, Eval, 1, true);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_EVALEACH, EvalEach, 1, false);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_COND, Cond, 2, false);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_IF, If, 2, false);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_WHILE, While, 1, false);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_UNTIL, Until, 1, false);

            //  (lambda (...) expression)
            //  (macros (...) (list expression))
            //  (syntax (#F #F) (...) expression)
            //  (syntax (#T #F) (...) expression)
            //  (syntax (#F #T) (...) (list expression))
            //  (syntax (#T #T) (...) (list expression))

            BombardoLangClass.SetProcedure(context, AllNames.LISP_LAMBDA, Lambda, 2, false);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_MACROS, Macros, 2, false);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_SYNTAX, Syntax, 3, false);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_MACROEXPAND, MacroExpand, 1, false);

            //  (apply function [arguments]) -> result of (function [arguments])
            BombardoLangClass.SetProcedure(context, AllNames.LISP_APPLY, Apply, 1, true);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_ERROR, Error, 1, true);
        }
Esempio n. 13
0
        private static Atom LoadEval(Atom args, Context context)
        {
            if (args == null)
            {
                Console.WriteLine("load-eval requires string parameter!!!");
                return(Atom.FALSE);
            }

            Atom atom = args.atom;

            if (atom.type != AtomType.String)
            {
                Console.WriteLine("load-eval requires string parameter!!!");
                return(Atom.FALSE);
            }

            string name = atom.value as string;

            if (string.IsNullOrEmpty(name))
            {
                Console.WriteLine("load-eval requires string parameter!!!");
                return(Atom.FALSE);
            }

            string path  = FSUtils.FindFile(name);
            string raw   = File.ReadAllText(path);
            var    nodes = BombardoLangClass.Parse(raw);

            foreach (var node in nodes)
            {
                try
                {
                    Evaluator.Evaluate(node, BombardoLangClass.Global);
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc.ToString());
                }
            }

            return(null);
        }
Esempio n. 14
0
        private static Atom Load(Atom args, Context context)
        {
            Atom path = (Atom)args?.value;

            if (path == null || !path.IsString())
            {
                throw new ArgumentException("Path must be string!");
            }

            string file = (string)path.value;

            if (File.Exists(file))
            {
                string      raw   = File.ReadAllText(file);
                List <Atom> nodes = BombardoLangClass.Parse(raw);
                return(Atom.List(nodes.ToArray()));
            }

            return(null);
        }
Esempio n. 15
0
        public static void Setup(Context context)
        {
            BombardoLangClass.SetProcedure(context, AllNames.LISP_PRINT, Print, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_READ, ReadLine, 0);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_DEFINE, Define, 1, false);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_SETFIRST, SetFirst, 2, false);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_TO_STRING, ToString, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_FROM_STRING, FromString, 1);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_SYMBOL_NAME, SymbolName, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_MAKE_SYMBOL, MakeSymbol, 1);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_GET_CONTEXT, GetContext, 0);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_GET_CONTEXT_PARENT, GetContextParent, 0);

            context.Define(AllNames.NULL_SYMBOL, null);
            context.Define(AllNames.EMPTY_SYMBOL, Atom.EMPTY);
        }
Esempio n. 16
0
        public static void Setup(Context context)
        {
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CONS, Cons, 0);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CAR, Car, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_CDR, Cdr, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_GET, GetElement, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_LAST, Last, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_APPEND, Append, 1);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_LIST, List, 1);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_REVERSE, ReverseAtom, 1);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_SET_CAR, SetCar, 2);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_SET_CDR, SetCdr, 2);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_EACH, Each, 2, true);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_MAP, Map, 2, true);
            BombardoLangClass.SetProcedure(context, AllNames.LISP_FILTER, Filter, 2, true);

            BombardoLangClass.SetProcedure(context, AllNames.LISP_CONTAINS, Contains, 2, true);
        }
Esempio n. 17
0
        public static void Setup(Context context)
        {
            //  (load "filepath") -> list
            //  (save "filepath" (symbol1 symbol2 symbol3 (expression1) (expression2) (expression3)))

            BombardoLangClass.SetProcedure(context, AllNames.FS_LOAD, Load, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_SAVE, Save, 2);

            //  (fsExists "filepath") -> true|false
            //  (fsOpen "filepath" [read] [write] [|create|append]) -> handler
            //  (fsFlush handler)
            //  (fsClose handler)

            //  (fsRead handler) -> char
            //  (fsReadline handler) -> string
            //  (fsWrite handler char|string|symbol|number)

            //  (fsReadText "filepath") -> string
            //  (fsReadLines "filepath") -> ( string string string ... )
            //  (fsWriteText "filepath" string)
            //  (fsWriteLines "filepath" ( string string string ... ))
            //  (fsAppendText "filepath" string)
            //  (fsAppendLines "filepath" ( string string string ... ))

            BombardoLangClass.SetProcedure(context, AllNames.FS_EXISTS, Exists, 1);

            BombardoLangClass.SetProcedure(context, AllNames.FS_OPEN, Open, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_FLUSH, Flush, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_CLOSE, Close, 1);

            BombardoLangClass.SetProcedure(context, AllNames.FS_READ, Read, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_READ_LINE, ReadLine, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_WRITE, Write, 2);

            BombardoLangClass.SetProcedure(context, AllNames.FS_READ_TEXT, ReadText, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_READ_LINES, ReadLines, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_WRITE_TEXT, WriteText, 2);
            BombardoLangClass.SetProcedure(context, AllNames.FS_WRITE_LINES, WriteLines, 2);
            BombardoLangClass.SetProcedure(context, AllNames.FS_APPEND_TEXT, AppendText, 2);
            BombardoLangClass.SetProcedure(context, AllNames.FS_APPEND_LINES, AppendLines, 2);

            //  (fsFile? "path") -> true | false
            //  (fsDirectory? "path") -> true | false

            BombardoLangClass.SetProcedure(context, AllNames.FS_FILE_PRED, FilePredicate, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_DIR_PRED, DirectoryPredicate, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_DIR_EMPTY_PRED, DirectoryEmptyPredicate, 1);



            //  (fsReadDirectory "directoryPath") -> ( "file1" "file2" "file3" ... )
            //  (fsCreateDirectory "directoryPath") -> null
            //  (fsRemoveDirectory "directoryPath") -> null

            BombardoLangClass.SetProcedure(context, AllNames.FS_READ_DIRECTORY, ReadDirectory, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_CREATE_DIRECTORY, CreateDirectory, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_REMOVE_DIRECTORY, RemoveDirectory, 1);

            //  (fsPathCombine "path1" "path2" "path3") -> "path1/path2/path3"
            //  (fsPathGetFull "directoryPath.ext") -> "extended/directoryPath.ext"
            //  (fsPathGetExtension "directoryPath/file.ext") -> "ext"
            //  (fsPathGetFileName "directoryPath/file.ext") -> "file.ext"
            //  (fsPathGetDirectoryName "directoryPath/file.ext") -> "directoryPath"

            BombardoLangClass.SetProcedure(context, AllNames.FS_PATH_COMBINE, PathCombile, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_PATH_GET_FULL, PathGetFull, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_PATH_GET_EXTENSION, PathGetExtension, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_PATH_GET_FILE_NAME, PathGetFileName, 1);
            BombardoLangClass.SetProcedure(context, AllNames.FS_PATH_GET_DIR_NAME, PathGetDirectoryName, 1);
        }
Esempio n. 18
0
        public static void Setup(Context context)
        {
            //  Base math

            BombardoLangClass.SetProcedure(context, AllNames.MATH_SUM, Sum, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_DIS, Dis, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_MUL, Mul, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_DIV, Div, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_MOD, Mod, 2);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_MIN, Min, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_MAX, Max, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_ABS, Abs, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_SIGN, Sign, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_CEIL, Ceil, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_FLOOR, Floor, 1);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_TRUNC, Trunc, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_SQRT, Sqrt, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_POW, Pow, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_EXP, Exp, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_LOGN, Logn, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_LOG, Log, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_LOG10, Log10, 1);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_SIN, Sin, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_COS, Cos, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_TAN, Tan, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_ASIN, Asin, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_ACOS, Acos, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_ATAN, Atan, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_ATAN2, Atan2, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_SINH, Sinh, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_COSH, Cosh, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_TANH, Tanh, 1);

            context.Define(AllNames.MATH_PI, new Atom(AtomType.Number, Math.PI));
            context.Define(AllNames.MATH_E, new Atom(AtomType.Number, Math.E));

            BombardoLangClass.SetProcedure(context, AllNames.MATH_AND, And, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_OR, Or, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_XOR, Xor, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_LSH, Lsh, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_RSH, Rsh, 2);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_LT, Lt, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_GT, Gt, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_LE, Le, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_GE, Ge, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_NE, Ne, 2);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_EQ, Eq, 2);

            //  Type predicates

            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDBYTE, PredSByte, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDUBYTE, PredUByte, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDSBYTE, PredSByte, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDCHAR, PredChar, 1);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDSSHORT, PredSShort, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDUSHORT, PredUShort, 1);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDSINT, PredSInt, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDUINT, PredUInt, 1);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDSLONG, PredSLong, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDULONG, PredULong, 1);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDFLOAT, PredFloat, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_PREDDOUBLE, PredDouble, 1);

            //  Type cast

            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_BYTE, CastSByte, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_UBYTE, CastUByte, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_SBYTE, CastSByte, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_CHAR, CastChar, 1);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_SSHORT, CastSShort, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_USHORT, CastUShort, 1);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_SINT, CastSInt, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_UINT, CastUInt, 1);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_SLONG, CastSLong, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_ULONG, CastULong, 1);

            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_FLOAT, CastFloat, 1);
            BombardoLangClass.SetProcedure(context, AllNames.MATH_CAST_DOUBLE, CastDouble, 1);
        }