From 71fa80acbac228e816a6da4f8834ab5c60b15e34 Mon Sep 17 00:00:00 2001 From: Alexander Nutz Date: Sun, 31 Aug 2025 12:14:00 +0200 Subject: [PATCH] c --- example.lsp | 23 ++++++++++++++++++----- sexpr.ml | 17 +++++++++-------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/example.lsp b/example.lsp index ec7e645..b4867d0 100644 --- a/example.lsp +++ b/example.lsp @@ -25,14 +25,13 @@ (':t (':str-cat (':t2ot-elt k) ":"))) (:macro @ ( (k(:c-paren-eval _)) v ) - (':t k ": " v)) + (':t (':dict-key (':atm-to-str k)) v)) -(:macro @ ( (k(:c-paren-eval _)) (v(:c-atm _)) ) +(:macro @ ( (k(:c-paren-eval _)) (v(:c-paren-eval _)) ) (':t (':str-cat (':str-cat (':atm-to-str k) ": ") (':atm-to-str v) ))) (:macro @ ( (k(:c-paren-eval _)) v .. other) - (k v) - other) + (':t (':dict-key (':atm-to-str k)) v other)) (:macro t2ot-elt ( hd ) (':atm-to-str hd)) @@ -57,9 +56,14 @@ (':indent hd) (':indent tl)) +(:macro indent-each ()) + +(:macro indent-each ( hd ) + (':indent hd)) + (:macro indent-each ( hd .. tl ) (':indent hd) - (':indent tl)) + (':indent-each tl)) (:macro rm-first (x .. tl) tl) @@ -67,6 +71,15 @@ (:macro indent ( (x(:c-li0-eq _ :tree)) ) (':tree (':indent-each (':rm-first (':unpack x))))) +(:macro indent ( (x(:c-li0-eq _ :atm-to-str)) ) + (':atm-to-str (':indent-each (':rm-first (':unpack x))))) + +(:macro indent ( (x(:c-li0-eq _ :yot)) ) + (':yot (':indent-each (':rm-first (':unpack x))))) + +(:macro indent ( (x(:c-li0-eq _ :dict-key)) ) + (':dict-key (':indent-each (':rm-first (':unpack x))))) + (name "Complex CI/CD Pipeline") (on diff --git a/sexpr.ml b/sexpr.ml index b42782a..5e0b2b1 100644 --- a/sexpr.ml +++ b/sexpr.ml @@ -830,11 +830,17 @@ module SExprMacroExp = struct else s, ctx end + and eval_root_while ctx s = begin + let s, ch, ctx = eval ctx s in + if ch then + SExpr.aggr_flat_map eval_root_while ctx s + else + s, ctx + end let do_eval s = - eval_while [] s |> fst + eval_root_while [] s |> fst - (* only use this for testing! *) let sparse src = PC.doparse Format.err_formatter @@ -925,13 +931,8 @@ let read_all_stdin () = let () = - let parsr = SExpr.parse_top () in let src = read_all_stdin () in - let v = PC.doparse - Format.err_formatter - { source = src; path = "top" } - parsr in - let v = Option.get v in + let v = SExprMacroExp.sparse src in let v = SExprMacroExp.do_eval v in Format.set_margin 40;