From 78977e988e9f09e4a53bd75cd6fb38b141a907e3 Mon Sep 17 00:00:00 2001 From: alex-eg Date: Thu, 14 Aug 2025 14:33:14 +0300 Subject: [PATCH] add support for begin in Sex begin-wrapped blocks are now creating lexical scopes --- example/list.sex | 13 +++++++------ fmt-c.scm | 3 ++- sexc.scm | 2 +- tests/run.scm | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/example/list.sex b/example/list.sex index 832e401..5cddb77 100644 --- a/example/list.sex +++ b/example/list.sex @@ -38,9 +38,10 @@ (pub defmacro (list-for-each list-type list-var elt-type elt-var what-do) (let ((list-var-2 (cat list-var '-2))) - `((var (pointer ,list-type) ,list-var-2 ,list-var) - (var ,elt-type ,elt-var (-> ,list-var-2 value)) - (while (!= (-> ,list-var-2 next) NULL) - ,what-do - (= ,list-var-2 (-> ,list-var-2 next)) - (= ,elt-var (-> ,list-var-2 value)))))) + `((begin + (var (pointer ,list-type) ,list-var-2 ,list-var) + (var ,elt-type ,elt-var (-> ,list-var-2 value)) + (while (!= (-> ,list-var-2 next) NULL) + ,what-do + (= ,list-var-2 (-> ,list-var-2 next)) + (= ,elt-var (-> ,list-var-2 value))))))) diff --git a/fmt-c.scm b/fmt-c.scm index b924629..0b9fce0 100644 --- a/fmt-c.scm +++ b/fmt-c.scm @@ -218,6 +218,7 @@ ((apply cpp-if/aux (substring/shared (symbol->string (car x)) 1) (cdr x)) st)) ((%endif) ((apply cpp-endif (cdr x)) st)) + ((%block-begin) ((apply c-braced-block #f (cdr x)) st)) ((%block) ((apply c-braced-block (cdr x)) st)) ((%comment) ((apply c-comment (cdr x)) st)) ((:) ((apply c-label (cdr x)) st)) @@ -521,7 +522,7 @@ (define (c-braced-block/aux offset header . body) (lambda (st) - ((cat header (c-open-brace st) (c-indent st offset) + ((cat (if header header "") (c-open-brace st) (c-indent st offset) (apply c-begin body) fl (c-current-indent-string st offset) (c-close-brace st)) st))) diff --git a/sexc.scm b/sexc.scm index cefa70a..4e94b99 100644 --- a/sexc.scm +++ b/sexc.scm @@ -36,7 +36,7 @@ ((fn) '%fun) ((prototype) '%prototype) ((var) '%var) - ((begin) '%begin) + ((begin) '%block-begin) ((define) '%define) ((pointer) '%pointer) ((array) '%array) diff --git a/tests/run.scm b/tests/run.scm index e786828..f6a3386 100644 --- a/tests/run.scm +++ b/tests/run.scm @@ -21,7 +21,7 @@ (test '%fun (atom-to-fmt-c 'fn)) (test '%prototype (atom-to-fmt-c 'prototype)) (test '%var (atom-to-fmt-c 'var)) -(test '%begin (atom-to-fmt-c 'begin)) +(test '%block-begin (atom-to-fmt-c 'begin)) (test '%define (atom-to-fmt-c 'define)) (test '%pointer (atom-to-fmt-c 'pointer)) (test '%array (atom-to-fmt-c 'array))