diff --git a/CLVMDotNet/src/Tools/Stages/Stage2/Optimize.cs b/CLVMDotNet/src/Tools/Stages/Stage2/Optimize.cs index 7e4543f..5cfa853 100644 --- a/CLVMDotNet/src/Tools/Stages/Stage2/Optimize.cs +++ b/CLVMDotNet/src/Tools/Stages/Stage2/Optimize.cs @@ -13,9 +13,25 @@ public static class Optimize public static byte RAISE_ATOM => Keywords.KEYWORD_TO_ATOM["x"]; public static int DEBUG_OPTIMIZATIONS = 0; public static SExp CONS_Q_A_OPTIMIZER_PATTERN => BinUtils.Assemble("(a (q . (: . sexp)) (: . args))"); + public static SExp CONS_PATTERN = BinUtils.Assemble("(c (: . first) (: . rest)))"); + public static SExp VAR_CHANGE_OPTIMIZER_CONS_EVAL_PATTERN = BinUtils.Assemble("(a (q . (: . sexp)) (: . args))"); + public static SExp CONS_OPTIMIZER_PATTERN_FIRST = BinUtils.Assemble("(f (c (: . first) (: . rest)))"); + public static SExp CONS_OPTIMIZER_PATTERN_REST = BinUtils.Assemble("(r (c (: . first) (: . rest)))"); + public static SExp FIRST_ATOM_PATTERN = BinUtils.Assemble("(f ($ . atom))"); + public static SExp REST_ATOM_PATTERN = BinUtils.Assemble("(r ($ . atom))"); + public static SExp QUOTE_PATTERN_1 = BinUtils.Assemble("(q . 0)"); + public static SExp APPLY_NULL_PATTERN_1 = BinUtils.Assemble("(a 0 . (: . rest))"); + public static bool NonNil(SExp sexp) { return sexp.Listp() || (sexp.AsAtom().Length > 0); } + + public static bool IsArgsCall(SExp r) + { + if (!r.Listp() && r.AsInt() == 1) + return true; + return false; + } } \ No newline at end of file