diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2024-06-27 05:28:23 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2024-06-27 05:28:23 -0700 |
commit | 513410b20983266264006ced2e247f073302f2ef (patch) | |
tree | 3c64df5ce1a261f27dd91eda1fe306b9aa185dbe /genprotsym.txr | |
parent | c3183064a4871af2a09f7f1cd2f68d420a1c1390 (diff) | |
download | txr-513410b20983266264006ced2e247f073302f2ef.tar.gz txr-513410b20983266264006ced2e247f073302f2ef.tar.bz2 txr-513410b20983266264006ced2e247f073302f2ef.zip |
genprotsym: fix bugs.
* genprotsym.txr: Do not glob .c files; use "git ls-files" to
only pick up tracked files. Skip the protsym.c file itself.
Parenthesize any if guards that have || operators in them.
Rearrange the output so that @{gpp "&&"} expressions actually
operate on lists and not strings.
Diffstat (limited to 'genprotsym.txr')
-rw-r--r-- | genprotsym.txr | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/genprotsym.txr b/genprotsym.txr index 3ba70b3a..b3ac769b 100644 --- a/genprotsym.txr +++ b/genprotsym.txr @@ -11,10 +11,12 @@ OBJS-$(@sym) += @file.o @ (end) @ (do (set [pp-sym-of-file `@file.c`] ppsym)) @(end) -@(next :list (glob "*.c")) +@(next (open-command "git ls-files ':(glob)*.c'")) @(bind pp-stack nil) @(collect) @file +@ (require (nequal file "protsym.c")) +@ (set pp-stack nil) @ (next file) @ (do (whenlet ((pp [pp-sym-of-file file])) (set pp-stack (list pp)))) @@ -23,9 +25,20 @@ OBJS-$(@sym) += @file.o val @(coll)@{sym /[A-Za-z0-9_]+_[sk]/}@/[,;]/@\ @(do (set [pp-syms-of-sym sym] pp-stack))@(end) @ (or) +#if @ppsym1 || @ppsym2 +@ (do (push `(@ppsym1 || @ppsym2)` pp-stack)) +@ (or) #if @ppsym @ (do (push ppsym pp-stack)) @ (or) +#elif @ppsym1 || @ppsym2 +@ (do (pop pp-stack) + (push `(@ppsym1 || @ppsym2)` pp-stack)) +@ (or) +#elif @ppsym +@ (do (pop pp-stack) + (push ppsym pp-stack)) +@ (or) #endif @ (do (pop pp-stack)) @ (end) @@ -53,20 +66,18 @@ val @(coll)@{sym /[A-Za-z0-9_]+_[sk]/}@/[,;]/@\ #include "lib.h" @ (repeat :vars (gpp)) +@ (if gpp `#if @{gpp " && "}`) @ (repeat) extern val @(rep)@gsym, @(last)@gsym;@(end) -@ (first) -@(if gpp `#if @{gpp " && "}\n`)extern val @(rep)@gsym, @(last)@gsym;@(end) @ (end) @ (if gpp "#endif") @ (end) val *protected_sym[] = { @ (repeat :vars (gpp)) +@ (if gpp `#if @{gpp " && "}`) @ (repeat) @(rep)&@gsym, @(last)&@gsym,@(end) -@ (first) -@(if gpp `#if @{gpp " && "}\n`) @(rep)&@gsym, @(last)&@gsym,@(end) @ (end) @ (if gpp "#endif") @ (end) |