@@ -176,22 +176,29 @@ function substitute_name(O, st)
176
176
end
177
177
end
178
178
179
+ function _is_tuple_or_array_of_symbolics (O)
180
+ return O isa CodegenPrimitive ||
181
+ (symbolic_type (O) != NotSymbolic () && ! (O isa Union{Symbol, Expr})) ||
182
+ _is_array_of_symbolics (O) ||
183
+ _is_tuple_of_symbolics (O)
184
+ end
185
+
179
186
function _is_array_of_symbolics (O)
180
187
# O is an array, not a symbolic array, and either has a non-symbolic eltype or contains elements that are
181
188
# symbolic or arrays of symbolics
182
189
return O isa AbstractArray && symbolic_type (O) == NotSymbolic () &&
183
- (symbolic_type (eltype (O)) != NotSymbolic () ||
184
- any (x -> x isa CodegenPrimitive || symbolic_type (x) != NotSymbolic () || _is_array_of_symbolics (x) , O))
190
+ (symbolic_type (eltype (O)) != NotSymbolic () && ! ( eltype (O) <: Union{Symbol, Expr} ) ||
191
+ any (_is_tuple_or_array_of_symbolics , O))
185
192
end
186
193
187
194
# workaround for https://github.com/JuliaSparse/SparseArrays.jl/issues/599
188
195
function _is_array_of_symbolics (O:: SparseMatrixCSC )
189
- return symbolic_type (eltype (O)) != NotSymbolic () ||
190
- any (x -> x isa CodegenPrimitive || symbolic_type (x) != NotSymbolic () || _is_array_of_symbolics (x) , findnz (O)[3 ])
196
+ return symbolic_type (eltype (O)) != NotSymbolic () && ! ( eltype (O) <: Union{Symbol, Expr} ) ||
197
+ any (_is_tuple_or_array_of_symbolics , findnz (O)[3 ])
191
198
end
192
199
193
200
function _is_tuple_of_symbolics (O:: Tuple )
194
- return any (x -> x isa CodegenPrimitive || symbolic_type (x) != NotSymbolic () || _is_array_of_symbolics (x) || _is_tuple_of_symbolics (x) , O)
201
+ return any (_is_tuple_or_array_of_symbolics , O)
195
202
end
196
203
_is_tuple_of_symbolics (O) = false
197
204
0 commit comments