/// <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)); }
// // 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)); }
public void Test() { var code = File.ReadAllText("TestCode.cs"); var dynamicCompiler = new DynamicCompiler { BinPath = Environment.CurrentDirectory }; var res = dynamicCompiler.Compile(code); }
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)); }
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); } }