Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/make/unit-tests make(1): add test for escaping dolla...
details: https://anonhg.NetBSD.org/src/rev/fd527373a73d
branches: trunk
changeset: 954883:fd527373a73d
user: rillig <rillig%NetBSD.org@localhost>
date: Sat Sep 12 22:35:43 2020 +0000
description:
make(1): add test for escaping dollars in the :M variable modifier
diffstat:
usr.bin/make/unit-tests/varmod-match.exp | 15 +++++++--
usr.bin/make/unit-tests/varmod-match.mk | 48 ++++++++++++++++++++++++-------
2 files changed, 48 insertions(+), 15 deletions(-)
diffs (83 lines):
diff -r 9b9b96c97f44 -r fd527373a73d usr.bin/make/unit-tests/varmod-match.exp
--- a/usr.bin/make/unit-tests/varmod-match.exp Sat Sep 12 22:24:22 2020 +0000
+++ b/usr.bin/make/unit-tests/varmod-match.exp Sat Sep 12 22:35:43 2020 +0000
@@ -1,5 +1,12 @@
-match-char-class:
- uppercase numbers: One Two Three Four
- all the others: five six seven
- starts with non-s, ends with [ex]: One Three five
+CondParser_Eval: ${NUMBERS:M[A-Z]*} != "One Two Three Four"
+lhs = "One Two Three Four", rhs = "One Two Three Four", op = !=
+CondParser_Eval: ${NUMBERS:M[^A-Z]*} != "five six seven"
+lhs = "five six seven", rhs = "five six seven", op = !=
+CondParser_Eval: ${NUMBERS:M[^s]*[ex]} != "One Three five"
+lhs = "One Three five", rhs = "One Three five", op = !=
+CondParser_Eval: ${:U****************:M****************b}
+CondParser_Eval: ${:Ua \$ sign:M*$$*} != "\$"
+lhs = "$", rhs = "$", op = !=
+CondParser_Eval: ${:Ua \$ sign any-asterisk:M*\$*} != "any-asterisk"
+lhs = "any-asterisk", rhs = "any-asterisk", op = !=
exit status 0
diff -r 9b9b96c97f44 -r fd527373a73d usr.bin/make/unit-tests/varmod-match.mk
--- a/usr.bin/make/unit-tests/varmod-match.mk Sat Sep 12 22:24:22 2020 +0000
+++ b/usr.bin/make/unit-tests/varmod-match.mk Sat Sep 12 22:35:43 2020 +0000
@@ -1,22 +1,48 @@
-# $NetBSD: varmod-match.mk,v 1.3 2020/08/16 20:03:53 rillig Exp $
+# $NetBSD: varmod-match.mk,v 1.4 2020/09/12 22:35:43 rillig Exp $
#
# Tests for the :M variable modifier, which filters words that match the
# given pattern.
+#
+# See ApplyModifier_Match and ModifyWord_Match for the implementation.
-all: match-char-class
-all: slow
-
+.MAKEFLAGS: -dc
NUMBERS= One Two Three Four five six seven
-match-char-class:
- @echo '$@:'
- @echo ' uppercase numbers: ${NUMBERS:M[A-Z]*}'
- @echo ' all the others: ${NUMBERS:M[^A-Z]*}'
- @echo ' starts with non-s, ends with [ex]: ${NUMBERS:M[^s]*[ex]}'
+# Only keep numbers that start with an uppercase letter.
+.if ${NUMBERS:M[A-Z]*} != "One Two Three Four"
+. error
+.endif
+# Only keep numbers that don't start with an uppercase letter.
+.if ${NUMBERS:M[^A-Z]*} != "five six seven"
+. error
+.endif
+
+# Only keep numbers that don't start with s and at the same time
+# ends with either of [ex].
+.if ${NUMBERS:M[^s]*[ex]} != "One Three five"
+. error
+.endif
# Before 2020-06-13, this expression took quite a long time in Str_Match,
# calling itself 601080390 times for 16 asterisks.
-slow:
- @: ${:U****************:M****************b}
+.if ${:U****************:M****************b}
+.endif
+
+# To match a dollar sign in a word, double it.
+# This is different from the :S and :C variable modifiers, where a '$'
+# has to be escaped as '$$'.
+.if ${:Ua \$ sign:M*$$*} != "\$"
+. error
+.endif
+
+# In the :M modifier, it does not work to escape a dollar using a backslash.
+# This is different from the :S, :C and a few other variable modifiers.
+${:U*}= asterisk
+.if ${:Ua \$ sign any-asterisk:M*\$*} != "any-asterisk"
+. error
+.endif
+
+all:
+ @:;
Home |
Main Index |
Thread Index |
Old Index