Skip to content

Commit 2505b5d

Browse files
refactor: improve type-stability of array_variable_assignments
1 parent 6c0ca6a commit 2505b5d

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

lib/ModelingToolkitBase/src/systems/codegen_utils.jl

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ reconstruct array variables if they are present scalarized in `args`.
4242
"""
4343
function array_variable_assignments(args...; argument_name = generated_argument_name)
4444
# map array symbolic to an identically sized array where each element is (buffer_idx, idx_in_buffer)
45-
var_to_arridxs = Dict{BasicSymbolic, Array{Tuple{Int, Int}}}()
45+
var_to_arridxs = Dict{SymbolicT, Vector{Tuple{Int, Int}}}()
4646
for (i, arg) in enumerate(args)
4747
# filter out non-arrays
4848
# any element of args which is not an array is assumed to not contain a
@@ -55,13 +55,12 @@ function array_variable_assignments(args...; argument_name = generated_argument_
5555
for (j, var) in enumerate(arg)
5656
var = unwrap(var)
5757
# filter out non-array-symbolics
58-
iscall(var) || continue
59-
operation(var) == getindex || continue
60-
arrvar = arguments(var)[1]
58+
arrvar, isarr = split_indexed_var(var)
59+
isarr || continue
6160
# get and/or construct the buffer storing indexes
6261
idxbuffer = get!(
63-
() -> map(Returns((0, 0)), eachindex(arrvar)), var_to_arridxs, arrvar)
64-
Origin(first.(axes(arrvar))...)(idxbuffer)[arguments(var)[2:end]...] = (i, j)
62+
() -> map(Returns((0, 0)), SU.stable_eachindex(arrvar)), var_to_arridxs, arrvar)
63+
idxbuffer[SU.as_linear_idx(SU.shape(arrvar), get_stable_index(var))] = (i, j)
6564
end
6665
end
6766

0 commit comments

Comments
 (0)