public Tuple <ICompiledUnit, IEnumerable <MessageItem> > Compile(CodeDocument doc, string source) { var par = new ElaParser(); var parRes = par.Parse(source); var msg = new List <MessageItem>(); var unit = doc.Unit; Func <ElaMessage, MessageItem> project = m => new MessageItem( m.Type == MessageType.Error ? MessageItemType.Error : MessageItemType.Warning, m.Message, doc, m.Line, m.Column); if (parRes.Success) { var copt = new CompilerOptions(); copt.ShowHints = false; copt.GenerateDebugInfo = true; copt.IgnoreUndefined = true; //TODO: hack, should be taken from options copt.Prelude = "prelude"; var comp = new ElaCompiler(); try { var compRes = comp.Compile(parRes.Program, copt, new ExportVars()); msg.AddRange(compRes.Messages.Where(m => m.Type != MessageType.Hint).Select(project)); if (compRes.CodeFrame != null) { unit = new CompiledUnit(doc, compRes.CodeFrame); } } catch { } } else { msg.AddRange(parRes.Messages.Select(project)); } return(Tuple.Create(unit, (IEnumerable <MessageItem>)msg)); }
public static void Main(string[] args) { SourceUnitCompiler compiler = new SourceUnitCompiler("temp", new SourceUnitSpecification( new ConstructorSpecification(), new MethodSpecification("Test", new SrcVariable("int", "data")) ) ); compiler.AssemblyManager.RegisterAssembly(@"C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll"); compiler.AssemblyManager.RegisterAssembly(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll"); compiler.AssemblyManager.RegisterAssembly(@"C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll"); compiler.AssemblyManager.RegisterAssembly(@"C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll"); compiler.AssemblyManager.RegisterAssembly(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll"); compiler.AssemblyManager.RegisterAssembly(@"C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll"); compiler.AssemblyManager.RegisterAssembly(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll"); compiler.CodeGenerators.Add(new SourceCodeGenerator()); CompiledUnit cu = compiler.Compile("foo", new SourceFile()); object ret = cu["Test"].Execute(new KeyValuePair <string, object>("data", 5)); }