Skip to content

Commit 31ebb60

Browse files
authored
Merge pull request #265 from matthieubulte/master
Add missing @inbounds in DestructuredArgs
2 parents 9e85a60 + 3ac306a commit 31ebb60

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

src/code.jl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,11 @@ end
136136
elems
137137
inds
138138
name
139+
inbounds::Bool
139140
end
140141

141-
function DestructuredArgs(elems, name=gensym("arg"); inds=eachindex(elems))
142-
DestructuredArgs(elems, inds, name)
142+
function DestructuredArgs(elems, name=gensym("arg"); inds=eachindex(elems), inbounds=false)
143+
DestructuredArgs(elems, inds, name, inbounds)
143144
end
144145

145146
"""
@@ -164,8 +165,10 @@ cflatten(x) = Iterators.flatten(x) |> collect
164165
function get_assignments(d::DestructuredArgs, st)
165166
name = toexpr(d, st)
166167
map(d.inds, d.elems) do i, a
167-
a (i isa Symbol ? :($name.$i) : :($name[$i]))
168-
end
168+
ex = (i isa Symbol ? :($name.$i) : :($name[$i]))
169+
ex = d.inbounds ? :(@inbounds($ex)) : ex
170+
a ex
171+
end
169172
end
170173

171174
@matchable struct Let

test/code.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ test_repr(a, b) = @test repr(Base.remove_linenums!(a)) == repr(Base.remove_linen
4545
$(+)(a, b, var"x(t)", x($(+)(1, t)))
4646
end
4747
end))
48+
49+
ex = toexpr(Func([DestructuredArgs([x, x(t)], :state, inbounds=true)], [], x(t+1) + x(t)))
50+
for e ex.args[2].args[3].args[1].args
51+
@test e.args[2].head == :macrocall
52+
end
53+
4854
test_repr(toexpr(SetArray(false, a, [x(t), AtIndex(9, b), c])),
4955
quote
5056
a[1] = x(t)

0 commit comments

Comments
 (0)