public Project Compile(Project proj, string input, List <ProjectAsset> assets, IProgress <int> progress) { CompilerSucess = false; progress.Report(0); string preproc = Lexer.StripComments(input); Lexer.Tokenize(preproc); progress.Report(10); XenonASTProgram p = new XenonASTProgram(); try { Logger.Log(new XenonCompilerMessage() { ErrorName = "Compilation Started", ErrorMessage = "Starting to compile", Generator = "Compiler", Level = XenonCompilerMessageType.Debug }); p = (XenonASTProgram)p.Compile(Lexer, Logger); } catch (Exception ex) { Logger.Log(new XenonCompilerMessage() { ErrorName = "Compilation Failed", ErrorMessage = "Failed to compile project. Check syntax.", Generator = "Compiler", Level = XenonCompilerMessageType.Message }); Debug.WriteLine($"Compilation Failed \n{ex}"); return(proj); } progress.Report(50); try { proj?.Clear(); proj.SourceCode = input; p.Generate(proj, null); } catch (Exception ex) { Debug.WriteLine($"Generation Failed \n{ex}"); p.GenerateDebug(proj); return(proj); } string jsonproj = JsonSerializer.Serialize <Project>(proj); Debug.WriteLine(jsonproj); progress.Report(100); CompilerSucess = true; return(proj); }