public void HandleFileL(Action <UrclInstruction> emit, IEnumerable <string> src) { var source = string.Join(Environment.NewLine, src); try { var compiler = new LuC.Compiler(); compiler.Compile(LuC.Parser.Parse(compiler, source)); Standard.AddStandardDefaults(compiler); var emitter = new Emitters.Urcl(compiler); compiler.Emit(emitter, "Program.Main"); foreach (var inst in new UrclOptimizer { CullRedundantStackOps = true, CullCreateLabel = true, CullPragmas = true }.Optimize(emitter.Result.ToArray())) { emit(inst); } } catch (SourceError ex) { ex.GetLineAndColumn(source, out int line, out int column); throw new ParserError($"Compile Error (Ln {line}, Col {column}): {ex.Message} \"{source.Substring(ex.Start, ex.Length)}\""); } }