Skip to content

Commit 1cab1c3

Browse files
feat: better delay handling, preface handling in build_function_wrapper
1 parent 60d501b commit 1cab1c3

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

src/systems/codegen_utils.jl

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,16 @@ function build_function_wrapper(sys::AbstractSystem, expr, args...; p_start = 2,
4949
isscalar = !(expr isa AbstractArray || symbolic_type(expr) == ArraySymbolic())
5050

5151
obs = filter(filter_observed, observed(sys))
52+
if wrap_delays
53+
history_arg = is_split(sys) ? MTKPARAMETERS_ARG : generated_argument_name(p_start)
54+
obs = map(obs) do eq
55+
delay_to_function(sys, eq; history_arg)
56+
end
57+
expr = delay_to_function(sys, expr; history_arg)
58+
args = (args[1:p_start-1]..., DDE_HISTORY_FUN, args[p_start:end]...)
59+
p_start += 1
60+
p_end += 1
61+
end
5262
pdeps = parameter_dependencies(sys)
5363

5464
cmap, _ = get_cmap(sys)
@@ -100,11 +110,11 @@ function build_function_wrapper(sys::AbstractSystem, expr, args...; p_start = 2,
100110
end
101111
end
102112

103-
wrap_code = wrap_code .∘ wrap_assignments(isscalar, assignments)
104-
105-
if wrap_delays
106-
expr = delay_to_function(sys, expr; history_arg = is_split(sys) ? MTKPARAMETERS_ARG : generated_argument_name(p_start))
113+
if has_preface(sys) && (pref = preface(sys)) !== nothing
114+
append!(assignments, pref)
107115
end
108116

117+
wrap_code = wrap_code .∘ wrap_assignments(isscalar, assignments)
118+
109119
return build_function(expr, args...; wrap_code, kwargs...)
110120
end

0 commit comments

Comments
 (0)