Skip to content

Commit 11b3f8e

Browse files
committed
parse: Support getproperty
1 parent 2c3fa3b commit 11b3f8e

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

src/thunk.jl

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -366,12 +366,23 @@ function _par(ex::Expr; lazy=true, recur=true, opts=())
366366
f = nothing
367367
body = nothing
368368
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__])
369+
arg2 = nothing
370+
if recur && @capture(ex, f_(allargs__)) ||
371+
@capture(ex, f_(allargs__) do cargs_ body_ end) ||
372+
@capture(ex, allargs__->body_) ||
373+
@capture(ex, arg1_[allargs__]) ||
374+
@capture(ex, arg1_.arg2_)
370375
f = replace_broadcast(f)
371376
if arg1 !== nothing
372-
# Indexing (A[2,3])
373-
f = Base.getindex
374-
pushfirst!(allargs, arg1)
377+
if arg2 !== nothing
378+
# Getproperty (A.B)
379+
f = Base.getproperty
380+
allargs = Any[arg1, QuoteNode(arg2)]
381+
else
382+
# Indexing (A[2,3])
383+
f = Base.getindex
384+
pushfirst!(allargs, arg1)
385+
end
375386
end
376387
args = filter(arg->!Meta.isexpr(arg, :parameters), allargs)
377388
kwargs = filter(arg->Meta.isexpr(arg, :parameters), allargs)

test/thunk.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ end
125125
@test t isa Dagger.DTask
126126
@test fetch(t) == A[1, 2]
127127

128+
t = @spawn A[2]
129+
@test t isa Dagger.DTask
130+
@test fetch(t) == A[2]
131+
128132
B = Dagger.@spawn rand(4, 4)
129133
t = @spawn B[1, 2]
130134
@test t isa Dagger.DTask
@@ -135,6 +139,13 @@ end
135139
@test t isa Dagger.DTask
136140
@test fetch(t) == 42
137141
end
142+
@testset "getproperty" begin
143+
nt = (;a=1, b=2)
144+
145+
t = @spawn nt.b
146+
@test t isa Dagger.DTask
147+
@test fetch(t) == nt.b
148+
end
138149
@testset "invalid expression" begin
139150
@test_throws LoadError eval(:(@spawn 1))
140151
@test_throws LoadError eval(:(@spawn begin 1 end))

0 commit comments

Comments
 (0)