chiark / gitweb /
lib.c (subst): Make the big table a bit more comprehensible.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 4 Mar 2024 17:32:17 +0000 (17:32 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 4 Mar 2024 17:32:17 +0000 (17:32 +0000)
Explain which flag combinations are impossible, and annotate the table
with the corresponding flag settings.

lib.c

diff --git a/lib.c b/lib.c
index dea6c0964aad5026719a8798abe758a592adfc85..c844997e2b2cebebfd1e3d88fdde05b180b8f3f6 100644 (file)
--- a/lib.c
+++ b/lib.c
@@ -1384,7 +1384,8 @@ static const char *subst(const char *p, const char *l,
    * us which special characters we need to stop at.  This way, we can use
    * `strcspn' to skip over literal text and stop at the next character which
    * needs special handling.  Entries in this table with a null pointer
-   * correspond to impossible flag settings.
+   * correspond to impossible flag settings: notably, `SF_QUOT' can only be
+   * set when `SF_SUBST' is also set.
    */
   static const char *const delimtab[] = {
 
@@ -1396,22 +1397,22 @@ static const char *subst(const char *p, const char *l,
                                         * `SF_QUOT' */
 #define DELIM "|}"                     /* end delimiters of `SF_SUBEXPR' */
 
-    ESCAPE,
-    ESCAPE            WORDSEP,
-    0,
-    ESCAPE            QUOT,
-    ESCAPE      SUBST,
-    ESCAPE      SUBST WORDSEP,
-    0,
-    ESCAPE      SUBST QUOT,
-    ESCAPE DELIM,
-    ESCAPE DELIM       WORDSEP,
-    0,
-    ESCAPE DELIM       QUOT,
-    ESCAPE DELIM SUBST,
-    ESCAPE DELIM SUBST WORDSEP,
-    0,
-    ESCAPE DELIM SUBST QUOT
+    ESCAPE,                            /* --- */
+    ESCAPE            WORDSEP,         /* SPLIT */
+    0,                                 /*         QUOT */
+    ESCAPE            QUOT,            /* SPLIT | QUOT */
+    ESCAPE      SUBST,                 /*                SUBST */
+    ESCAPE      SUBST WORDSEP,         /* SPLIT |        SUBST */
+    0,                                 /*         QUOT | SUBST */
+    ESCAPE      SUBST QUOT,            /* SPLIT | QUOT | SUBST */
+    ESCAPE DELIM,                      /*                        SUBEXPR */
+    ESCAPE DELIM       WORDSEP,                /* SPLIT |                SUBEXPR */
+    0,                                 /*         QUOT |         SUBEXPR */
+    ESCAPE DELIM       QUOT,           /* SPLIT | QUOT |         SUBEXPR */
+    ESCAPE DELIM SUBST,                        /*                SUBST | SUBEXPR */
+    ESCAPE DELIM SUBST WORDSEP,                /* SPLIT |        SUBST | SUBEXPR */
+    0,                                 /*         QUOT | SUBST | SUBEXPR */
+    ESCAPE DELIM SUBST QUOT            /* SPLIT | QUOT | SUBST | SUBEXPR */
 
 #undef ESCAPE
 #undef SUBST