Skip to content

Commit 705266a

Browse files
committed
parser: Support direct anonymous function calls
1 parent 515e731 commit 705266a

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/thunk.jl

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -363,18 +363,27 @@ function replace_broadcast(fn::Symbol)
363363
end
364364

365365
function _par(ex::Expr; lazy=true, recur=true, opts=())
366+
f = nothing
366367
body = nothing
367-
if recur && @capture(ex, f_(allargs__)) || @capture(ex, f_(allargs__) do cargs_ body_ end)
368+
if recur && @capture(ex, f_(allargs__)) || @capture(ex, f_(allargs__) do cargs_ body_ end) || @capture(ex, allargs__->body_)
368369
f = replace_broadcast(f)
369370
args = filter(arg->!Meta.isexpr(arg, :parameters), allargs)
370371
kwargs = filter(arg->Meta.isexpr(arg, :parameters), allargs)
371372
if !isempty(kwargs)
372373
kwargs = only(kwargs).args
373374
end
374375
if body !== nothing
375-
f = quote
376-
($(args...); $(kwargs...))->$f($(args...); $(kwargs...)) do $cargs
377-
$body
376+
if f !== nothing
377+
f = quote
378+
($(args...); $(kwargs...))->$f($(args...); $(kwargs...)) do $cargs
379+
$body
380+
end
381+
end
382+
else
383+
f = quote
384+
($(args...); $(kwargs...))->begin
385+
$body
386+
end
378387
end
379388
end
380389
end

test/thunk.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,17 @@ end
107107
@test t isa Dagger.DTask
108108
@test fetch(t) == 43
109109
end
110+
@testset "anonymous direct call" begin
111+
A = rand(4)
112+
113+
t = @spawn A->sum(A)
114+
@test t isa Dagger.DTask
115+
@test fetch(t) == sum(A)
116+
117+
t = @spawn A->sum(A; dims=1)
118+
@test t isa Dagger.DTask
119+
@test fetch(t) == sum(A; dims=1)
120+
end
110121
@testset "invalid expression" begin
111122
@test_throws LoadError eval(:(@spawn 1))
112123
@test_throws LoadError eval(:(@spawn begin 1 end))

0 commit comments

Comments
 (0)