From fc332311d3f4274d3fa3b845314427ce0ed6ba5c Mon Sep 17 00:00:00 2001 From: Ekaterina Vaartis Date: Sun, 26 Oct 2025 20:54:11 +0300 Subject: [PATCH] fix nested types producing wrong C code --- fmt-c-writer.scm | 9 +++++---- tests/fmt-c-writer.scm | 8 ++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/fmt-c-writer.scm b/fmt-c-writer.scm index 869e2d7..f84d65d 100644 --- a/fmt-c-writer.scm +++ b/fmt-c-writer.scm @@ -141,10 +141,11 @@ ;; * const char -> const char * ;; const * const char -> const char * const (if (atom? type) (atom-to-fmt-c type) - (tree-map atom-to-fmt-c - (fold-right append (list) - (list-join (reverse (list-split type '*)) - '(*)))))) + (flatten + (tree-map atom-to-fmt-c + (fold-right append (list) + (list-join (reverse (list-split type '*)) + '(*))))))) (define (walk-fn-def form) (match form diff --git a/tests/fmt-c-writer.scm b/tests/fmt-c-writer.scm index e9cf699..a9384b1 100644 --- a/tests/fmt-c-writer.scm +++ b/tests/fmt-c-writer.scm @@ -64,6 +64,14 @@ '(%var (struct suc) s) (walk-var '(var s (struct suc)))) + (test + '(%var (const struct suc *) s s1) + (walk-var '(var s (* const struct suc) s1))) + + (test + '(%var (const struct suc *) s s1) + (walk-var '(var s (* (const struct suc)) s1))) + (test '(%var (struct suc) s (hoge piyo)) (walk-var '(var s (struct suc) (hoge piyo))))