Commit 40eabf3
committed
feat(interpreter): implement declare -l/-u case conversion attributes
Add support for `declare -l` (lowercase) and `declare -u` (uppercase)
variable attributes. When set, all subsequent assignments to the variable
are automatically converted to the specified case.
Implementation:
- Parse `-l` and `-u` flags in `execute_declare_builtin`
- Store attributes as `_LOWER_<name>` / `_UPPER_<name>` marker variables
- Apply case conversion in `set_variable()` for subsequent assignments
- Setting one attribute clears the opposite (e.g., -u clears _LOWER_)
Features:
- `declare -l x=HELLO` → x=hello
- `declare -u x=hello` → x=HELLO
- Attribute persists: `declare -l x; x=WORLD` → x=world
- Works in functions: `declare -u result="$1"`
Tests: 7 new spec tests (declare.test.sh: 16 → 23)1 parent 4d514d2 commit 40eabf3
File tree
4 files changed
+152
-8
lines changed- crates/bashkit
- src/interpreter
- tests/spec_cases/bash
- specs
- supply-chain
4 files changed
+152
-8
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3860 | 3860 | | |
3861 | 3861 | | |
3862 | 3862 | | |
| 3863 | + | |
| 3864 | + | |
3863 | 3865 | | |
3864 | 3866 | | |
3865 | 3867 | | |
| |||
3873 | 3875 | | |
3874 | 3876 | | |
3875 | 3877 | | |
3876 | | - | |
| 3878 | + | |
| 3879 | + | |
| 3880 | + | |
3877 | 3881 | | |
3878 | 3882 | | |
3879 | 3883 | | |
| |||
4027 | 4031 | | |
4028 | 4032 | | |
4029 | 4033 | | |
4030 | | - | |
4031 | | - | |
| 4034 | + | |
| 4035 | + | |
| 4036 | + | |
| 4037 | + | |
| 4038 | + | |
| 4039 | + | |
| 4040 | + | |
| 4041 | + | |
| 4042 | + | |
4032 | 4043 | | |
4033 | 4044 | | |
| 4045 | + | |
| 4046 | + | |
| 4047 | + | |
| 4048 | + | |
| 4049 | + | |
| 4050 | + | |
| 4051 | + | |
| 4052 | + | |
| 4053 | + | |
| 4054 | + | |
| 4055 | + | |
4034 | 4056 | | |
4035 | 4057 | | |
4036 | 4058 | | |
| |||
4055 | 4077 | | |
4056 | 4078 | | |
4057 | 4079 | | |
| 4080 | + | |
| 4081 | + | |
| 4082 | + | |
| 4083 | + | |
| 4084 | + | |
| 4085 | + | |
| 4086 | + | |
| 4087 | + | |
| 4088 | + | |
| 4089 | + | |
| 4090 | + | |
4058 | 4091 | | |
4059 | 4092 | | |
4060 | 4093 | | |
| |||
5627 | 5660 | | |
5628 | 5661 | | |
5629 | 5662 | | |
| 5663 | + | |
| 5664 | + | |
| 5665 | + | |
| 5666 | + | |
| 5667 | + | |
| 5668 | + | |
| 5669 | + | |
| 5670 | + | |
| 5671 | + | |
| 5672 | + | |
| 5673 | + | |
| 5674 | + | |
| 5675 | + | |
| 5676 | + | |
| 5677 | + | |
| 5678 | + | |
| 5679 | + | |
| 5680 | + | |
5630 | 5681 | | |
5631 | 5682 | | |
5632 | 5683 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
143 | 143 | | |
144 | 144 | | |
145 | 145 | | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
106 | | - | |
| 106 | + | |
107 | 107 | | |
108 | 108 | | |
109 | 109 | | |
110 | | - | |
| 110 | + | |
111 | 111 | | |
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | 115 | | |
116 | | - | |
| 116 | + | |
117 | 117 | | |
118 | 118 | | |
119 | 119 | | |
| |||
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
163 | | - | |
| 163 | + | |
164 | 164 | | |
165 | 165 | | |
166 | 166 | | |
| |||
183 | 183 | | |
184 | 184 | | |
185 | 185 | | |
186 | | - | |
| 186 | + | |
187 | 187 | | |
188 | 188 | | |
189 | 189 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
610 | 610 | | |
611 | 611 | | |
612 | 612 | | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
613 | 617 | | |
614 | 618 | | |
615 | 619 | | |
| |||
1386 | 1390 | | |
1387 | 1391 | | |
1388 | 1392 | | |
| 1393 | + | |
| 1394 | + | |
| 1395 | + | |
| 1396 | + | |
1389 | 1397 | | |
1390 | 1398 | | |
1391 | 1399 | | |
1392 | 1400 | | |
| 1401 | + | |
| 1402 | + | |
| 1403 | + | |
| 1404 | + | |
1393 | 1405 | | |
1394 | 1406 | | |
1395 | 1407 | | |
1396 | 1408 | | |
| 1409 | + | |
| 1410 | + | |
| 1411 | + | |
| 1412 | + | |
1397 | 1413 | | |
1398 | 1414 | | |
1399 | 1415 | | |
1400 | 1416 | | |
| 1417 | + | |
| 1418 | + | |
| 1419 | + | |
| 1420 | + | |
1401 | 1421 | | |
1402 | 1422 | | |
1403 | 1423 | | |
1404 | 1424 | | |
| 1425 | + | |
| 1426 | + | |
| 1427 | + | |
| 1428 | + | |
1405 | 1429 | | |
1406 | 1430 | | |
1407 | 1431 | | |
| |||
1422 | 1446 | | |
1423 | 1447 | | |
1424 | 1448 | | |
| 1449 | + | |
| 1450 | + | |
| 1451 | + | |
| 1452 | + | |
1425 | 1453 | | |
1426 | 1454 | | |
1427 | 1455 | | |
| |||
0 commit comments