@@ -176,22 +176,29 @@ function substitute_name(O, st)
176176 end
177177end
178178
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+
179186function _is_array_of_symbolics (O)
180187 # O is an array, not a symbolic array, and either has a non-symbolic eltype or contains elements that are
181188 # symbolic or arrays of symbolics
182189 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))
185192end
186193
187194# workaround for https://github.com/JuliaSparse/SparseArrays.jl/issues/599
188195function _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 ])
191198end
192199
193200function _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)
195202end
196203_is_tuple_of_symbolics (O) = false
197204
0 commit comments