Exemplo n.º 1
0
 protected virtual void CreateEvaluators()
 {
     _evaluators.Clear();
     if (ShowExpr == null)
     {
         return;
     }
     if (EnvironmentExt.IsUnix())
     {
         // Ticket #86: temporarily disable it for Mono, because
         // RuntimeCompile.Compile() does not work there.
         return;
     }
     foreach (ExprFormatter spp in ShowExpr)
     {
         StringBuilder code = new StringBuilder();
         code.Append("using System;\n");
         code.Append("using System.Collections.Generic;\n");
         code.Append("using ai.lib.algorithms.tree;\n");
         code.Append("public unsafe class _Evaluator: ITextualizeTreeEval {\n");
         code.Append(" public object Evaluate(object c, object oTree, object oStack, int d) {\n");
         code.AppendFormat("  List<{0}> s = (List<{0}>)oStack;", _contextT);
         code.AppendFormat("  {0} t = ({0})oTree;", _treeT);
         code.AppendFormat("  return {0};\n", spp.Expr);
         code.Append("}}");
         Assembly asm       = RuntimeCompile.Compile(code.ToString(), _compilerParameters);
         Object   evaluator = asm.CreateInstance("_Evaluator");
         _evaluators[spp.Expr] = (ITextualizeTreeEval)evaluator;
     }
 }
Exemplo n.º 2
0
        public void Test_Evaluator()
        {
            CompilerParameters cp = new CompilerParameters();

            cp.GenerateExecutable = false;
            cp.GenerateInMemory   = true;
            cp.ReferencedAssemblies.Add("system.dll");
            cp.ReferencedAssemblies.Add(Path.GetFileName(CodeBase.Get(Assembly.GetExecutingAssembly())));

            string code = "using System; using ai.lib.utils.nunit;";

            code += "public class _Evaluator {\n";
            code += "   public  object Evaluate(RuntimeCompile_Test param) {\n";
            code += "  return param.Field1*3;\n";
            code += "  }}";
            Assembly asm = RuntimeCompile.Compile(code, cp);

            Object     evaluator = asm.CreateInstance("_Evaluator");
            MethodInfo mi        = evaluator.GetType().GetMethod("Evaluate");

            object result = mi.Invoke(evaluator, new object[] { this });

            Assert.AreEqual(Field1 * 3, (int)result);

            code  = "using System; using ai.lib.utils.nunit;";
            code += "public class _Evaluator {\n";
            code += "   public  object Evaluate(RuntimeCompile_Test param) {\n";
            code += "  return param.FieldArr1[2] + 5;\n";
            code += "  }}";
            asm   = RuntimeCompile.Compile(code, cp);

            evaluator = asm.CreateInstance("_Evaluator");
            mi        = evaluator.GetType().GetMethod("Evaluate");

            result = mi.Invoke(evaluator, new object[] { this });
            Assert.AreEqual(FieldArr1[2] + 5, (int)result);
        }