Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }