Module Name: src Committed By: rillig Date: Fri Sep 11 05:29:46 UTC 2020
Modified Files: src/usr.bin/make/unit-tests: cond-op.exp cond-op.mk Log Message: make(1): add rationale for evaluating expression after parse error To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/usr.bin/make/unit-tests/cond-op.exp cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/cond-op.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-op.exp diff -u src/usr.bin/make/unit-tests/cond-op.exp:1.4 src/usr.bin/make/unit-tests/cond-op.exp:1.5 --- src/usr.bin/make/unit-tests/cond-op.exp:1.4 Fri Sep 11 05:14:21 2020 +++ src/usr.bin/make/unit-tests/cond-op.exp Fri Sep 11 05:29:46 2020 @@ -1,7 +1,7 @@ make: "cond-op.mk" line 45: Malformed conditional ("!word" == !word) -make: "cond-op.mk" line 59: Malformed conditional (0 ${ERR::=evaluated}) -make: "cond-op.mk" line 63: warning: After detecting a parse error, the rest is evaluated. -make: "cond-op.mk" line 67: Parsing continues until here. +make: "cond-op.mk" line 70: Malformed conditional (0 ${ERR::=evaluated}) +make: "cond-op.mk" line 74: warning: After detecting a parse error, the rest is evaluated. +make: "cond-op.mk" line 78: Parsing continues until here. make: Fatal errors encountered -- cannot continue make: stopped in unit-tests exit status 1 Index: src/usr.bin/make/unit-tests/cond-op.mk diff -u src/usr.bin/make/unit-tests/cond-op.mk:1.6 src/usr.bin/make/unit-tests/cond-op.mk:1.7 --- src/usr.bin/make/unit-tests/cond-op.mk:1.6 Fri Sep 11 05:12:08 2020 +++ src/usr.bin/make/unit-tests/cond-op.mk Fri Sep 11 05:29:46 2020 @@ -1,4 +1,4 @@ -# $NetBSD: cond-op.mk,v 1.6 2020/09/11 05:12:08 rillig Exp $ +# $NetBSD: cond-op.mk,v 1.7 2020/09/11 05:29:46 rillig Exp $ # # Tests for operators like &&, ||, ! in .if conditions. # @@ -55,7 +55,18 @@ # As soon as the parser sees the '$', it knows that the condition will # be malformed. Therefore there is no point in evaluating it. -# As of 2020-09-11, that part of the condition is evaluated nevertheless. +# +# As of 2020-09-11, that part of the condition is evaluated nevertheless, +# since CondParser_Expr just requests the next token, without restricting +# the token to the expected tokens. If the parser were to restrict the +# valid follow tokens for the token "0" to those that can actually produce +# a correct condition (which in this case would be comparison operators, +# TOK_AND, TOK_OR or TOK_RPAREN), the variable expression would not have +# to be evaluated. +# +# This would add a good deal of complexity to the code though, for almost +# no benefit, especially since most expressions and conditions are side +# effect free. .if 0 ${ERR::=evaluated} . error .endif