cond-op-parentheses.mk revision 1.9 1 # $NetBSD: cond-op-parentheses.mk,v 1.9 2025/06/28 22:39:28 rillig Exp $
2 #
3 # Tests for parentheses in .if conditions, which group expressions to override
4 # the precedence of the operators '!', '&&' and '||'. Parentheses cannot be
5 # used to form arithmetic expressions such as '(3+4)' though.
6
7 # Contrary to the C family of programming languages, the outermost condition
8 # does not have to be enclosed in parentheses.
9 .if defined(VAR)
10 . error
11 .elif !1
12 . error
13 .endif
14
15 # Parentheses cannot enclose numbers as there is no need for it. Make does
16 # not implement any arithmetic functions in its condition parser. If
17 # absolutely necessary, use expr(1).
18 #
19 # XXX: It's inconsistent that the right operand has unbalanced parentheses.
20 #
21 # expect+1: Comparison with ">" requires both operands "3" and "(2" to be numeric
22 .if 3 > (2)
23 .endif
24 # expect+1: Malformed conditional "(3) > 2"
25 .if (3) > 2
26 .endif
27
28 # Test for deeply nested conditions.
29 .if (((((((((((((((((((((((((((((((((((((((((((((((((((((((( \
30 (((((((((((((((((((((((((((((((((((((((((((((((((((((((( \
31 1 \
32 )))))))))))))))))))))))))))))))))))))))))))))))))))))))) \
33 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))
34 # Parentheses can be nested at least to depth 112. There is nothing special
35 # about this number though, much higher numbers work as well, at least on
36 # NetBSD. The actual limit depends on the allowed call stack depth for C code
37 # of the platform. Anyway, 112 should be enough for all practical purposes.
38 .else
39 . error
40 .endif
41
42 # An unbalanced opening parenthesis is a parse error.
43 # expect+1: Malformed conditional "("
44 .if (
45 . error
46 .else
47 . error
48 .endif
49
50 # An unbalanced closing parenthesis is a parse error.
51 #
52 # Before cond.c 1.237 from 2021-01-19, CondParser_Term returned TOK_RPAREN
53 # even though the documentation of that function promised to only ever return
54 # TOK_TRUE, TOK_FALSE or TOK_ERROR. In cond.c 1.241, the return type of that
55 # function was changed to a properly restricted enum type, to prevent this bug
56 # from occurring again.
57 # expect+1: Malformed conditional ")"
58 .if )
59 . error
60 .else
61 . error
62 .endif
63
64 all:
65 @:;
66