Beispiel #1
0
 /// <summary>
 /// This is a simple yet effective combination of optimizations.
 /// </summary>
 static public QuotedFunction Optimize(INameLookup names, QuotedFunction qf)
 {
     //qf = ApplyMacros(qf);
     //qf = ApplyMacros(qf);
     //qf = Expand(qf);
     //qf = ApplyMacros(qf);
     //qf = PartialEval(qf);
     //qf = Expand(qf);
     //qf = ReplaceSimpleQuotations(qf);
     qf = ApplyMacros(names, qf);
     qf = ExpandInline(qf, 4);
     qf = ApplyMacros(names, qf);
     return qf;
 }
Beispiel #2
0
 public override void Eval(Executor exec)
 {
     QuotedFunction right = exec.TypedPop<QuotedFunction>();
     QuotedFunction left = exec.TypedPop<QuotedFunction>();
     QuotedFunction f = new QuotedFunction(left, right);
     exec.PushFxn(f);
 }
Beispiel #3
0
 /// <summary>
 /// This will reduce an expression by evaluating as much at compile-time as possible.
 /// </summary>
 public static QuotedFunction PartialEval(QuotedFunction qf)
 {
     Executor exec = new Executor();
     return new QuotedFunction(PartialEval(exec, qf.GetSubFxns()));
 }
Beispiel #4
0
 static public QuotedFunction ApplyMacros(INameLookup names, QuotedFunction f)
 {
     CatExpr list = new CatExpr(f.GetSubFxns().ToArray());
     MetaCat.ApplyMacros(names, list);
     return new QuotedFunction(list);
 }
Beispiel #5
0
 static void ExpandInline(CatExpr fxns, QuotedFunction q, int nMaxDepth)
 {
     foreach (Function f in q.GetSubFxns())
         ExpandInline(fxns, f, nMaxDepth - 1);
 }
Beispiel #6
0
 static public QuotedFunction ExpandInline(QuotedFunction f, int nMaxDepth)
 {
     CatExpr ret = new CatExpr();
     ExpandInline(ret, f, nMaxDepth);
     return new QuotedFunction(ret);
 }