Home | History | Annotate | Line # | Download | only in unit-tests
      1 # $NetBSD: varparse-mod.mk,v 1.2 2023/11/19 21:47:52 rillig Exp $
      2 
      3 # Tests for parsing expressions with modifiers.
      4 
      5 # As of 2020-10-02, the below condition does not result in a parse error.
      6 # The condition contains two separate mistakes.  The first mistake is that
      7 # the :!cmd! modifier is missing the closing '!'.  The second mistake is that
      8 # there is a stray '}' at the end of the whole condition.
      9 #
     10 # As of 2020-10-02, the actual parse result of this condition is a single
     11 # expression with 2 modifiers. The first modifier is
     12 # ":!echo "\$VAR"} !".  Afterwards, the parser optionally skips a ':' (at the
     13 # bottom of ApplyModifiers) and continues with the next modifier, in this case
     14 # "= "value"", which is interpreted as a SysV substitution modifier with an
     15 # empty left-hand side, thereby appending the string " "value"" to each word
     16 # of the expression.
     17 #
     18 # As of 2020-10-02, some modifiers ensure that they are followed by either a
     19 # ':' or the closing brace or parenthesis of the expression.  The modifiers
     20 # that don't ensure this are (in order of appearance in ApplyModifier):
     21 #	:@var@replacement@
     22 #	:_
     23 #	:L
     24 #	:P
     25 #	:!cmd!
     26 #	:gmtime=...
     27 #	:localtime=...
     28 #	:M (because '}' and ')' are treated the same)
     29 #	:N (because '}' and ')' are treated the same)
     30 #	:S
     31 #	:C
     32 #	:range=...
     33 # On the other hand, these modifiers ensure that they are followed by a
     34 # delimiter:
     35 #	:D
     36 #	:U
     37 #	:[...]
     38 #	:gmtime (if not followed by '=')
     39 #	:hash (if not followed by '=')
     40 #	:localtime (if not followed by '=')
     41 #	:t
     42 #	:q
     43 #	:Q
     44 #	:T
     45 #	:H
     46 #	:E
     47 #	:R
     48 #	:range (if not followed by '=')
     49 #	:O
     50 #	:u
     51 #	:sh
     52 # These modifiers don't care since they reach until the closing character
     53 # of the expression, which is either ')' or '}':
     54 #	::= (as well as the other assignment modifiers)
     55 #	:?
     56 #
     57 .if ${:!echo "\$VAR"} != "value"}
     58 .endif
     59 
     60 all:
     61 	@:
     62