Module Name:    src
Committed By:   rillig
Date:           Tue Nov 10 19:36:50 UTC 2020

Modified Files:
        src/usr.bin/make/unit-tests: cond-func.exp cond-func.mk

Log Message:
make(1): add tests for edge cases in parsing conditionals


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/cond-func.exp
cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/cond-func.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/cond-func.exp
diff -u src/usr.bin/make/unit-tests/cond-func.exp:1.2 src/usr.bin/make/unit-tests/cond-func.exp:1.3
--- src/usr.bin/make/unit-tests/cond-func.exp:1.2	Sun Nov  8 21:40:13 2020
+++ src/usr.bin/make/unit-tests/cond-func.exp	Tue Nov 10 19:36:50 2020
@@ -4,6 +4,11 @@ make: "cond-func.mk" line 49: warning: M
 make: "cond-func.mk" line 49: Malformed conditional (!defined(A&B))
 make: "cond-func.mk" line 52: warning: Missing closing parenthesis for defined()
 make: "cond-func.mk" line 52: Malformed conditional (!defined(A|B))
+make: "cond-func.mk" line 92: The empty variable is never defined.
+make: "cond-func.mk" line 100: A plain function name is parsed as !empty(...).
+make: "cond-func.mk" line 107: A plain function name is parsed as !empty(...).
+make: "cond-func.mk" line 117: Symbols may start with a function name.
+make: "cond-func.mk" line 122: Symbols may start with a function name.
 make: Fatal errors encountered -- cannot continue
 make: stopped in unit-tests
 exit status 1

Index: src/usr.bin/make/unit-tests/cond-func.mk
diff -u src/usr.bin/make/unit-tests/cond-func.mk:1.6 src/usr.bin/make/unit-tests/cond-func.mk:1.7
--- src/usr.bin/make/unit-tests/cond-func.mk:1.6	Sun Nov  8 21:40:13 2020
+++ src/usr.bin/make/unit-tests/cond-func.mk	Tue Nov 10 19:36:50 2020
@@ -1,4 +1,4 @@
-# $NetBSD: cond-func.mk,v 1.6 2020/11/08 21:40:13 rillig Exp $
+# $NetBSD: cond-func.mk,v 1.7 2020/11/10 19:36:50 rillig Exp $
 #
 # Tests for those parts of the functions in .if conditions that are common
 # among several functions.
@@ -86,5 +86,43 @@ ${VARNAME_UNBALANCED_BRACES}=	variable n
 .  error
 .endif
 
+.if defined()
+.  error
+.else
+.  info The empty variable is never defined.
+.endif
+
+# The plain word 'defined' is interpreted as '!empty(defined)'.
+# That variable is not defined (yet).
+.if defined
+.  error
+.else
+.  info A plain function name is parsed as !empty(...).
+.endif
+
+# If a variable named 'defined' is actually defined and not empty, the plain
+# symbol 'defined' evaluates to true.
+defined=	non-empty
+.if defined
+.  info A plain function name is parsed as !empty(...).
+.else
+.  error
+.endif
+
+# A plain symbol name may start with one of the function names, in this case
+# 'defined'.
+.if defined-var
+.  error
+.else
+.  info Symbols may start with a function name.
+.endif
+
+defined-var=	non-empty
+.if defined-var
+.  info Symbols may start with a function name.
+.else
+.  error
+.endif
+
 all:
 	@:;

Reply via email to