@@ -77,6 +77,13 @@ function has_functional_affect(cb)
7777 (affects (cb) isa FunctionalAffect || affects (cb) isa ImperativeAffect)
7878end
7979
80+ function vars! (vars, aff:: FunctionalAffect ; op = Differential)
81+ for var in Iterators. flatten ((unknowns (aff), parameters (aff), discretes (aff)))
82+ vars! (vars, var)
83+ end
84+ return vars
85+ end
86+
8087# ################################### continuous events #####################################
8188
8289const NULL_AFFECT = Equation[]
@@ -333,6 +340,22 @@ function continuous_events(sys::AbstractSystem)
333340 filter (! isempty, cbs)
334341end
335342
343+ function vars! (vars, cb:: SymbolicContinuousCallback ; op = Differential)
344+ for eq in equations (cb)
345+ vars! (vars, eq; op)
346+ end
347+ for aff in (affects (cb), affect_negs (cb), initialize_affects (cb), finalize_affects (cb))
348+ if aff isa Vector{Equation}
349+ for eq in aff
350+ vars! (vars, eq; op)
351+ end
352+ elseif aff != = nothing
353+ vars! (vars, aff; op)
354+ end
355+ end
356+ return vars
357+ end
358+
336359# ################################### discrete events #####################################
337360
338361struct SymbolicDiscreteCallback
@@ -469,6 +492,28 @@ function discrete_events(sys::AbstractSystem)
469492 cbs
470493end
471494
495+ function vars! (vars, cb:: SymbolicDiscreteCallback ; op = Differential)
496+ if symbolic_type (cb. condition) == NotSymbolic
497+ if cb. condition isa AbstractArray
498+ for eq in cb. condition
499+ vars! (vars, eq; op)
500+ end
501+ end
502+ else
503+ vars! (vars, cb. condition; op)
504+ end
505+ for aff in (cb. affects, cb. initialize, cb. finalize)
506+ if aff isa Vector{Equation}
507+ for eq in aff
508+ vars! (vars, eq; op)
509+ end
510+ elseif aff != = nothing
511+ vars! (vars, aff; op)
512+ end
513+ end
514+ return vars
515+ end
516+
472517# ################################ compilation functions ####################################
473518
474519# handles ensuring that affect! functions work with integrator arguments
0 commit comments