示例#1
0
        public static void Main(string[] args)
        {
            new Mono.Terminal.LineEditor("#force-mono.terminal-assembly-load#");
            BootClojureAndNostrand();
            if (args.Length > 0)
            {
                AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolver.Resolve;

                if (File.Exists("project.edn"))
                {
                    var projectEdn = EdnReader.readString(File.ReadAllText("project.edn"), PersistentHashMap.EMPTY);
                    RT.var("nostrand.core", "establish-environment").invoke(projectEdn);
                }

                RT.PostBootstrapInit();

                var input       = ReadArguments(args);
                var inputString = input.first().ToString();
                if (inputString.IndexOf("./", StringComparison.InvariantCulture) == 0)
                {
                    inputString = inputString.Substring(2);
                }

                Var.pushThreadBindings(RT.mapUniqueKeys(RT.CurrentNSVar, Namespace.find(Symbol.intern("nostrand.core"))));
                try
                {
                    Var fn = FindFunction(inputString);

                    if (fn != null)
                    {
                        //referAll.invoke(fn.Namespace, nostrandCore);
                        fn.applyTo(input.next());
                        return;
                    }
                    if (File.Exists(inputString))
                    {
                        try
                        {
                            IFn mainFn = FindFunction(FileToRelativePath(inputString) + "/-main");
                            if (mainFn != null)
                            {
                                mainFn.applyTo(input.next());
                            }
                            return;
                        }
                        catch (FileNotFoundException)
                        {
                        }
                    }

                    Terminal.Message("Quiting", "could not find function or file named `" + args[0] + "'", ConsoleColor.Yellow);
                }
                finally
                {
                    Var.popThreadBindings();
                }
            }

            else
            {
                Terminal.Message("Nostrand", Version(), ConsoleColor.White);
                // Terminal.Message("Mono", GetRuntimeVersion(), ConsoleColor.White);
                Terminal.Message("Clojure", RT.var("clojure.core", "clojure-version").invoke(), ConsoleColor.White);
            }
        }