public EnvFile ProcessFile(String name, String contents) { if (this.PathFiles.ContainsKey(name)) { return(this.PathFiles[name]); } var file = new EnvFile(name, contents); var tokenizer = new GLuaLexer(contents); var parser = new GLuaParser(tokenizer, this); this.PathFiles[name] = file; this.LexerFiles[tokenizer] = file; this.ParserFiles[parser] = file; file.Successful = true; try { file.AST = parser.Parse( ); } catch (Exception) { file.Successful = false; throw; } if (file.Successful) { foreach (IPriorityContainer module in this.Modules.Values.OrderBy(con => con.Priority)) { if (module is AnalyserEntry entryA) { entryA.Analyser.File = file; entryA.Analyser.Analyse(file.AST); } else if (module is FolderEntry entryB) { entryB.Folder.File = file; file.AST = ( StatementList )entryB.Folder.Fold(file.AST); } } foreach (Error err in file.Errors) { if (err.Type == ErrorType.Error || err.Type == ErrorType.Fatal) { file.Successful = false; break; } } } return(file); }
public EnvFile GetFile(GLuaParser parser) => this.ParserFiles.ContainsKey(parser) ? this.ParserFiles[parser] : null;