Example #1
0
        private static int Main(string[] args)
        {
            var currentDir = Environment.CurrentDirectory;
            var msg        = "";

            CoreFolder = GetCoreFolder(currentDir);
            var resolver = new AssemblyResolver(CoreFolder);

            AppDomain.CurrentDomain.AssemblyResolve += resolver.CurrentDomain_AssemblyResolve;

            TranslatorAssembly = GetTranslatorAssembly(CoreFolder);
            ContractAssembly   = GetContractAssembly(CoreFolder);
            EnablePrerelease   = false;

            if (!EnsureMinimalCompilerVersion())
            {
                return(1);
            }

            if (args.Length == 0)
            {
                ShowHelp();

                return(1);
            }

            bool    skip          = false;
            bool    run           = false;
            dynamic bridgeOptions = null;

            /*try
             * {
             *  bridgeOptions = GetBridgeOptionsFromCommandLine(currentDir, args, ref skip, ref run);
             * }
             * catch(Exception)
             * {
             *  Error("Invalid command line");
             *  return 1;
             * }*/
            bridgeOptions = GetBridgeOptionsFromCommandLine(currentDir, args, ref skip, ref run);

            if (bridgeOptions == null)
            {
                ShowHelp();

                return(1);
            }

            if (skip)
            {
                return(0);
            }

            if (bridgeOptions.Rebuild && File.Exists(bridgeOptions.Lib))
            {
                File.Delete(bridgeOptions.Lib);
            }

            if (bridgeOptions.BridgeLocation == null)
            {
                bridgeOptions.BridgeLocation = GetBridgeLocation(currentDir);
            }

            msg = $"Building {Path.GetFileName(currentDir)}";

            if (msg.Length >= 28)
            {
                msg += "  ";
            }
            else
            {
                msg = msg.PadRight(29);
            }

            Info(msg, false);

            using (var spinner = new ConsoleSpinner())
            {
                spinner.Start();
                var     logger    = CreateLogger();
                dynamic processor = CreateTranslatorProcessor(bridgeOptions, logger);

                processor.PreProcess();

                try
                {
                    processor.Process();
                    var outputPath = processor.PostProcess();

                    if (run)
                    {
                        var htmlFile = Path.Combine(outputPath, "index.html");

                        if (File.Exists(htmlFile))
                        {
                            System.Diagnostics.Process.Start(htmlFile);
                        }
                    }
                }
                catch (Exception ex)
                {
                    spinner.Stop();

                    var exceptionType = ex.GetType();

                    if (GetEmitterException().IsAssignableFrom(exceptionType))
                    {
                        dynamic dex = ex;
                        Error(string.Format("Bridge.NET Compiler error: {2} ({3}, {4}) {0} {1}", ex.Message, ex.StackTrace, dex.FileName, dex.StartLine, dex.StartColumn));

                        return(1);
                    }

                    var ee = processor.Translator != null?processor.Translator.CreateExceptionFromLastNode() : null;

                    if (ee != null)
                    {
                        Error(string.Format("Bridge.NET Compiler error: {2} ({3}, {4}) {0} {1}", ex.Message, ex.StackTrace, ee.FileName, ee.StartLine, ee.StartColumn));
                    }
                    else
                    {
                        // Iteractively print inner exceptions
                        var ine  = ex;
                        var elvl = 0;

                        while (ine != null)
                        {
                            Error(string.Format("Bridge.NET Compiler error: exception level: {0} - {1}\nStack trace:\n{2}", elvl++, ine.Message, ine.StackTrace));
                            ine = ine.InnerException;
                        }
                    }


                    return(1);
                }
            }

            Info("done.");

            return(0);
        }