Skip to content

Commit 9fab503

Browse files
fix: handle setp_oop setter called directly on parameter object
1 parent ec17278 commit 9fab503

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

src/value_provider_interface.jl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,12 +238,20 @@ struct OOPSetter{I, D}
238238
end
239239

240240
function (os::OOPSetter)(valp, val)
241-
buffer = os.is_state ? state_values(valp) : parameter_values(valp)
241+
buffer = if os.is_state
242+
hasmethod(state_values, Tuple{typeof(valp)}) ? state_values(valp) : valp
243+
else
244+
hasmethod(parameter_values, Tuple{typeof(valp)}) ? parameter_values(valp) : valp
245+
end
242246
return remake_buffer(os.indp, buffer, (os.idxs,), (val,))
243247
end
244248

245249
function (os::OOPSetter)(valp, val::Union{Tuple, AbstractArray})
246-
buffer = os.is_state ? state_values(valp) : parameter_values(valp)
250+
buffer = if os.is_state
251+
hasmethod(state_values, Tuple{typeof(valp)}) ? state_values(valp) : valp
252+
else
253+
hasmethod(parameter_values, Tuple{typeof(valp)}) ? parameter_values(valp) : valp
254+
end
247255
if os.idxs isa Union{Tuple, AbstractArray}
248256
return remake_buffer(os.indp, buffer, os.idxs, val)
249257
else

test/parameter_indexing_test.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,8 @@ for sys in [
179179
newp = setter(fi, val)
180180
getter = getp(sys, sym)
181181
@test getter(newp) == val
182+
newp = setter(parameter_values(fi), val)
183+
@test getter(newp) == val
182184
end
183185
end
184186
end

0 commit comments

Comments
 (0)