Home | History | Annotate | Line # | Download | only in unit-tests
      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