aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/build/script/parser+while.test.testscript
blob: 5587291cef1cbb6a4e66dabcf4c5af88b1f701a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# file      : libbuild2/build/script/parser+while.test.testscript
# license   : MIT; see accompanying LICENSE file

: while
:
{
  : true
  :
  $* <<EOI >>EOO
  while ($v != "aa")
    cmd "$v"
    v = "$(v)a"
  end
  EOI
  ? true
  cmd ''
  ? true
  cmd a
  ? false
  EOO

  : false
  :
  $* <<EOI >>EOO
  while ($v == "aa")
    cmd "$v"
    v = "$(v)a"
  end
  EOI
  ? false
  EOO

  : without-command
  :
  $* <<EOI 2>>EOE != 0
  while
    cmd
  end
  EOI
  buildfile:11:6: error: missing program
  EOE
}

: end
:
{
  : without-end
  :
  $* <<EOI 2>>EOE != 0
  while true
    cmd
  EOI
  buildfile:13:1: error: expected closing 'end'
  EOE
}

: elif
:
{
  : without-if
  :
  $* <<EOI 2>>EOE != 0
  while false
    elif true
      cmd
    end
  end
  EOI
  buildfile:12:3: error: 'elif' without preceding 'if'
  EOE
}

: nested
:
{
  $* -l -r <<EOI >>EOO
  while ($v != "aa")      # 1
    cmd1 "$v"             # 2
    if ($v == "a")        # 3
      cmd2                # 4
      while ($v2 != "$v") # 5
        cmd3              # 6
        v2=$v
      end
    else
      cmd4                # 7
    end
    cmd5                  # 8
    v = "$(v)a"
  end
  EOI
  ? true # 1 i1
  cmd1 '' # 2 i1
  ? false # 3 i1
  cmd4 # 7 i1
  cmd5 # 8 i1
  ? true # 1 i2
  cmd1 a # 2 i2
  ? true # 3 i2
  cmd2 # 4 i2
  ? true # 5 i2 i1
  cmd3 # 6 i2 i1
  ? false # 5 i2 i2
  cmd5 # 8 i2
  ? false # 1 i3
  EOO
}

: contained
:
{
  : eos
  :
  $* <<EOI 2>>EOE != 0
  while
  EOI
  buildfile:12:1: error: expected closing 'end'
  EOE
}

: var
:
$* <<EOI >>EOO
while ($v1 != "a")
  v1 = "$(v1)a"
  v2 = "$v1"
end
cmd $v1
EOI
? true
? false
cmd a
EOO