Exemple #1
0
        /// <summary>Parse the address formula.</summary>
        /// <param name="addressFormula">The address formula.</param>
        /// <returns>The result of the parsed address or <see cref="IntPtr.Zero"/>.</returns>
        public IntPtr ParseAddress(string addressFormula)
        {
            Contract.Requires(addressFormula != null);

            if (!formulaCache.TryGetValue(addressFormula, out var func))
            {
                var reader = new TokenReader();
                var tokens = reader.Read(addressFormula);

                var astBuilder = new AstBuilder();
                var operation  = astBuilder.Build(tokens);

                if (operation == null)
                {
                    return(IntPtr.Zero);
                }

                var compiler = new DynamicCompiler();
                func = compiler.CompileAddressFormula(operation);

                formulaCache.Add(addressFormula, func);
            }

            return(func(this));
        }
Exemple #2
0
        //
        // GET: /Home/



        public ActionResult Index(PreviewModel data)
        {
            var model = new Models.PreviewModel()
            {
                FormWidth = 600
            };

            String src = null;

            if (!String.IsNullOrEmpty(data.FilePath))
            {
                src = System.IO.File.ReadAllText(data.FilePath);
            }
            else if (Request.Files.Count == 1)
            {
                var sr = new StreamReader(Request.Files[0].InputStream);
                src            = sr.ReadToEnd();
                data.FilePath  = Request.Files[0].FileName;
                model.IsUpload = true;
            }

            if (src != null)
            {
                var dc = new DynamicCompiler
                {
                    BinPath = HttpRuntime.BinDirectory
                };
                model.FilePath = data.FilePath;
                var code = dc.Compile(src);
                model.InlineJsCode = new HtmlString(code);
            }


            return(View(model));
        }
Exemple #3
0
 public void Test()
 {
     var code            = File.ReadAllText("TestCode.cs");
     var dynamicCompiler = new DynamicCompiler
     {
         BinPath = Environment.CurrentDirectory
     };
     var res = dynamicCompiler.Compile(code);
 }
Exemple #4
0
        public static void release(string packagename, Extension[] exts)
        {
            Engine.Instance.Release(exts);
            string name = packagename;
            int    i    = 2;

            while (DirectoryEx.Temp.GetFile(name + ".Setup.dll") != null)
            {
                name = packagename + i++;
            }
            DynamicCompiler.BuildReleaseAssembly($"{DirectoryEx.Temp.FullName}\\{name}.Setup.dll");
        }
        public MethodInfo Compile()
        {
            var locals        = LocalTypes.ToList();
            var instructions  = Instructions.ToList();
            var tokenResolver = new ILInstructionResolver(Module);
            Dictionary <int, Label> labels = null;

            return(DynamicCompiler.CompileMethod(Name, ReturnType, ParameterTypes, (gen) =>
            {
                locals.ForEach(x => gen.DeclareLocal(x));
                labels = instructions.Where(x => x.Label.HasValue).ToDictionary(x => (int)x.Label, x => gen.DefineLabel());
                instructions.ToList().ForEach(x => x.Emit(gen, tokenResolver, labels));
            }));
        }
        /// <summary>Parse the address formula.</summary>
        /// <param name="addressFormula">The address formula.</param>
        /// <returns>The result of the parsed address or <see cref="IntPtr.Zero"/>.</returns>
        public IntPtr ParseAddress(string addressFormula)
        {
            Contract.Requires(addressFormula != null);

            if (!formulaCache.TryGetValue(addressFormula, out var func))
            {
                var expression = Parser.Parse(addressFormula);

                func = DynamicCompiler.CompileExpression(expression);

                formulaCache.Add(addressFormula, func);
            }

            return(func(this));
        }
Exemple #7
0
        protected override void OnLoaded()
        {
            try
            {
                //获取当前版本Cad的Mgd程序集
                List <string> mgds     = new List <string>();
                var           mainmgds = Engine.Instance.Execute("pycad.system.mgds[0]");
                var           acadroot = AppDomain.CurrentDomain.BaseDirectory;
                foreach (string name in mainmgds)
                {
                    string path = Path.Combine(acadroot, name);
                    if (File.Exists(path))
                    {
                        mgds.Add(path);
                    }
                }
                DynamicCompiler.Mgdlls = mgds;
                DynamicCompiler.BuildSystemAssembly();

                //动态编译用户命令集
                Engine.LoadExtensions(_loadfirst);
                _loadfirst = false;
                DynamicCompiler.BuildUserAssembly();

                if (CurrSystem != "acore")
                {
                    var menus = Engine.Instance.Execute("acapp.MenuGroups");
                    foreach (Extension p in Engine.Extensions)
                    {
                        p.LoadCuixs(menus);
                    }
                }
                Engine.Instance.Execute("with acdoc(): print('项目编译成功!')");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Err:" + ex.Message);
            }
        }