Skip to content

Commit ac7017f

Browse files
authored
do block syntax: tuple arguments (#19)
1 parent 697f6da commit ac7017f

File tree

4 files changed

+70
-6
lines changed

4 files changed

+70
-6
lines changed

src/julia.grammar

+1-1
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ array {
216216
}
217217

218218

219-
DoClause[group=CompoundStatement]{ kw<'do'> Parameters { sep1<',', Identifier | operation<expr>>? } _t block? end }
219+
DoClause[group=CompoundStatement]{ kw<'do'> Parameters { sep1<',', Identifier | TupleExpression | operation<expr>>? } _t block? end }
220220

221221
CallExpression {
222222
(primary-expr (immediateDot '.')? | Operator)

test/definitions.txt

+23
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,29 @@ Program(
419419
)
420420

421421

422+
# Function definitions - exploded parameters
423+
424+
function f((x,(y1,y2)), (u,v)=2)
425+
x, y
426+
end
427+
428+
==>
429+
Program(
430+
FunctionDefinition(
431+
function,
432+
Signature(
433+
CallExpression(Identifier, Arguments(
434+
TupleExpression(Identifier,TupleExpression(Identifier,Identifier)),
435+
KwArg(TupleExpression(Identifier,Identifier), AssignmentOp, IntegerLiteral),
436+
))
437+
),
438+
OpenTuple(Identifier, Identifier),
439+
end
440+
)
441+
)
442+
443+
444+
422445
# Function definitions - keyword parameters
423446

424447
function a(; x, y) end

test/macros.txt

+19-3
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,12 @@ Program(
169169

170170
# Closed macro call expressions - Do blocks
171171

172-
@test() do x, y
172+
173+
@test() do x
174+
xs
175+
end
176+
177+
@test() do x, (y,z)
173178
body
174179
end
175180

@@ -181,11 +186,22 @@ Program(
181186
Arguments,
182187
DoClause(
183188
do,
184-
Parameters(Identifier, Identifier),
189+
Parameters(Identifier),
185190
Identifier,
186191
end
187192
)
188-
)
193+
),
194+
195+
MacrocallExpression(
196+
MacroIdentifier(Identifier),
197+
Arguments,
198+
DoClause(
199+
do,
200+
Parameters(Identifier, TupleExpression(Identifier,Identifier)),
201+
Identifier,
202+
end
203+
)
204+
),
189205
)
190206

191207

test/primary.txt

+27-2
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ Program(
244244

245245
# Function call expressions with do blocks
246246

247-
reduce(xs) do x, y
247+
reduce(xs) do x, (y,(z,w))
248248
f(x, y)
249249
end
250250

@@ -255,7 +255,9 @@ Program(
255255
Arguments(Identifier),
256256
DoClause(
257257
do,
258-
Parameters(Identifier, Identifier),
258+
Parameters(Identifier,
259+
TupleExpression(Identifier, TupleExpression(Identifier, Identifier)),
260+
),
259261
CallExpression(
260262
Identifier,
261263
Arguments(Identifier, Identifier),
@@ -302,6 +304,29 @@ Program(
302304
)
303305

304306

307+
# Function call expressions with do blocks - typed and exploded parameter
308+
309+
f(xs) do (x,y)::Int; end
310+
311+
==>
312+
Program(
313+
CallExpression(
314+
Identifier,
315+
Arguments(Identifier),
316+
DoClause(
317+
do,
318+
Parameters(
319+
BinaryExpression(
320+
TupleExpression(Identifier, Identifier),
321+
Type(Identifier),
322+
)
323+
),
324+
end
325+
)
326+
)
327+
)
328+
329+
305330
# Quote expressions and symbols
306331

307332
:foo

0 commit comments

Comments
 (0)