public ElaAst Parse(string source, Document doc, IBuildLogger logger) { try { return(InternalParse(source, doc, logger)); } catch (ElaException ex) { var msg = new MessageItem(MessageItemType.Error, ex.Message, doc, 0, 0); logger.WriteMessages(new MessageItem[] { msg }, m => true); return(null); } }
public CompiledAssembly Build(string source, Document doc, IBuildLogger logger, params ExtendedOption[] options) { try { return(InternalBuild(source, doc, logger, options)); } catch (ElaException ex) { var msg = new MessageItem(MessageItemType.Error, ex.Message, doc, 0, 0); logger.WriteMessages(new MessageItem[] { msg }, m => true); return(null); } }
private CompiledAssembly InternalBuild(string source, Document doc, IBuildLogger logger, params ExtendedOption[] options) { logger.WriteBuildInfo("Ela", ElaVersionInfo.Version); var bo = new BuildOptionsManager(App); var lopt = bo.CreateLinkerOptions(); var copt = bo.CreateCompilerOptions(); if (options.Set(ForceRecompile.Code)) { lopt.ForceRecompile = true; } if (!options.Set(NoDebug.Code)) { copt.GenerateDebugInfo = true; } if (options.Set(NoWarnings.Code)) { copt.NoWarnings = true; } logger.WriteBuildOptions("Compiler options: {0}", copt); logger.WriteBuildOptions("Linker options: {0}", lopt); logger.WriteBuildOptions("Module lookup directories:"); lopt.CodeBase.Directories.ForEach(d => logger.WriteBuildOptions(d)); var lnk = new ElaIncrementalLinker(lopt, copt, doc.FileInfo == null ? new ModuleFileInfo(doc.Title) : doc.FileInfo.ToModuleFileInfo()); lnk.ModuleResolve += (o, e) => { //TBD }; var res = lnk.Build(source); var messages = res.Messages.Take(100).ToList(); logger.WriteMessages(messages.Select(m => new MessageItem( m.Type == MessageType.Error ? MessageItemType.Error : (m.Type == MessageType.Warning ? MessageItemType.Warning : MessageItemType.Information), String.Format("ELA{0}: {1}", m.Code, m.Message), m.File == null || !new FileInfo(m.File.FullName).Exists ? doc : new VirtualDocument(new FileInfo(m.File.FullName)), m.Line, m.Column) { Tag = m.Code }) , m => (Int32)m.Tag < 600); //Exclude linker messages return(res.Success ? new CompiledAssembly(doc, res.Assembly) : null); }
private ElaAst InternalParse(string source, Document doc, IBuildLogger logger) { logger.WriteBuildInfo("Ela", ElaVersionInfo.Version); var parser = new ElaParser(); var res = parser.Parse(source);//doc.FileInfo == null ? new ModuleFileInfo(doc.Title) : doc.FileInfo.ToModuleFileInfo()); var messages = res.Messages.Take(100).ToList(); logger.WriteMessages(messages.Select(m => new MessageItem( m.Type == MessageType.Error ? MessageItemType.Error : (m.Type == MessageType.Warning ? MessageItemType.Warning : MessageItemType.Information), String.Format("ELA{0}: {1}", m.Code, m.Message), m.File == null || !new FileInfo(m.File.FullName).Exists ? doc : new VirtualDocument(new FileInfo(m.File.FullName)), m.Line, m.Column) { Tag = m.Code }) , m => true); return(res.Success ? new ElaAst(res.Program) : null); }