Skip to content

Commit 86f2f5a

Browse files
committed
parser: Support getindex
1 parent 705266a commit 86f2f5a

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

src/thunk.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,8 +365,14 @@ end
365365
function _par(ex::Expr; lazy=true, recur=true, opts=())
366366
f = nothing
367367
body = nothing
368-
if recur && @capture(ex, f_(allargs__)) || @capture(ex, f_(allargs__) do cargs_ body_ end) || @capture(ex, allargs__->body_)
368+
arg1 = nothing
369+
if recur && @capture(ex, f_(allargs__)) || @capture(ex, f_(allargs__) do cargs_ body_ end) || @capture(ex, allargs__->body_) || @capture(ex, arg1_[allargs__])
369370
f = replace_broadcast(f)
371+
if arg1 !== nothing
372+
# Indexing (A[2,3])
373+
f = Base.getindex
374+
pushfirst!(allargs, arg1)
375+
end
370376
args = filter(arg->!Meta.isexpr(arg, :parameters), allargs)
371377
kwargs = filter(arg->Meta.isexpr(arg, :parameters), allargs)
372378
if !isempty(kwargs)

test/thunk.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,23 @@ end
118118
@test t isa Dagger.DTask
119119
@test fetch(t) == sum(A; dims=1)
120120
end
121+
@testset "getindex" begin
122+
A = rand(4, 4)
123+
124+
t = @spawn A[1, 2]
125+
@test t isa Dagger.DTask
126+
@test fetch(t) == A[1, 2]
127+
128+
B = Dagger.@spawn rand(4, 4)
129+
t = @spawn B[1, 2]
130+
@test t isa Dagger.DTask
131+
@test fetch(t) == fetch(B)[1, 2]
132+
133+
R = Ref(42)
134+
t = @spawn R[]
135+
@test t isa Dagger.DTask
136+
@test fetch(t) == 42
137+
end
121138
@testset "invalid expression" begin
122139
@test_throws LoadError eval(:(@spawn 1))
123140
@test_throws LoadError eval(:(@spawn begin 1 end))

0 commit comments

Comments
 (0)