Module Name:    src
Committed By:   rillig
Date:           Thu Dec 31 13:23:43 UTC 2020

Modified Files:
        src/usr.bin/make/unit-tests: directive-for-escape.exp
            directive-for-escape.mk

Log Message:
make(1): add tests for extreme edge cases of .for loop expansion


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/usr.bin/make/unit-tests/directive-for-escape.exp \
    src/usr.bin/make/unit-tests/directive-for-escape.mk

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/unit-tests/directive-for-escape.exp
diff -u src/usr.bin/make/unit-tests/directive-for-escape.exp:1.1 src/usr.bin/make/unit-tests/directive-for-escape.exp:1.2
--- src/usr.bin/make/unit-tests/directive-for-escape.exp:1.1	Thu Dec 31 03:05:12 2020
+++ src/usr.bin/make/unit-tests/directive-for-escape.exp	Thu Dec 31 13:23:43 2020
@@ -38,6 +38,14 @@ For: end for 1
 For: loop body:
 .  info ${:U\$}
 make: "directive-for-escape.mk" line 60: $
+For: end for 1
+For: loop body:
+.  info ${NUMBERS} ${:Ureplaced}
+make: "directive-for-escape.mk" line 68: one two three replaced
+For: end for 1
+For: loop body:
+.  info ${:Ureplaced}
+make: "directive-for-escape.mk" line 78: replaced
 make: no target to make.
 
 make: stopped in unit-tests
Index: src/usr.bin/make/unit-tests/directive-for-escape.mk
diff -u src/usr.bin/make/unit-tests/directive-for-escape.mk:1.1 src/usr.bin/make/unit-tests/directive-for-escape.mk:1.2
--- src/usr.bin/make/unit-tests/directive-for-escape.mk:1.1	Thu Dec 31 03:05:12 2020
+++ src/usr.bin/make/unit-tests/directive-for-escape.mk	Thu Dec 31 13:23:43 2020
@@ -1,4 +1,4 @@
-# $NetBSD: directive-for-escape.mk,v 1.1 2020/12/31 03:05:12 rillig Exp $
+# $NetBSD: directive-for-escape.mk,v 1.2 2020/12/31 13:23:43 rillig Exp $
 #
 # Test escaping of special characters in the iteration values of a .for loop.
 # These values get expanded later using the :U variable modifier, and this
@@ -59,3 +59,21 @@ VALUES=		$${UNDEF:U\$$\$$ {{}} end}
 .for i in ${:U\$}
 .  info ${i}
 .endfor
+
+# As of 2020-12-31, the name of the iteration variable can even contain
+# colons, which then affects variable expressions having this exact modifier.
+# This is clearly an unintended side effect of the implementation.
+NUMBERS=	one two three
+.for NUMBERS:M*e in replaced
+.  info ${NUMBERS} ${NUMBERS:M*e}
+.endfor
+
+# As of 2020-12-31, the name of the iteration variable can contain braces,
+# which gets even more surprising than colons, since it allows to replace
+# sequences of variable expressions.  There is no practical use case for
+# this, though.
+BASENAME=	one
+EXT=		.c
+.for BASENAME}${EXT in replaced
+.  info ${BASENAME}${EXT}
+.endfor

Reply via email to