private void ConstructEvaluator(EvaluatorItem[] items) { CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); CompilerParameters comp = new CompilerParameters(); //comp.ReferencedAssemblies.Add("system.dll"); //comp.GenerateExecutable = false; //comp.GenerateInMemory = true; StringBuilder code = new StringBuilder(); code.Append("using System; \n"); code.Append("namespace libJanet { \n"); code.Append("public class _Evaluator { \n"); foreach (EvaluatorItem item in items) { code.AppendFormat(" public {0} {1}() ", item.ReturnType.Name, item.Name); code.Append(" { "); code.AppendFormat(" return ({0}); ", item.Expression); code.Append(" }\n"); } code.Append("} }"); CompilerResults cr = provider.CompileAssemblyFromSource(comp, code.ToString()); if (cr.Errors.HasErrors) { StringBuilder error = new StringBuilder(); error.Append("Error Compiling Expression: "); foreach (CompilerError err in cr.Errors) { error.AppendFormat("{0}\n", err.ErrorText); } throw new Exception("Error Compiling Expression: " + error.ToString()); } Assembly a = cr.CompiledAssembly; _Compiled = a.CreateInstance("libJanet._Evaluator"); }
private Evaluator(EvaluatorItem item) { EvaluatorItem[] items = { item }; ConstructEvaluator(items); }
private Evaluator(EvaluatorItem[] items) { ConstructEvaluator(items); }