@@ -519,70 +519,19 @@ end
519519#  handles ensuring that affect! functions work with integrator arguments
520520function  add_integrator_header (
521521        sys:: AbstractSystem , integrator =  gensym (:MTKIntegrator ), out =  :u )
522-     if  has_index_cache (sys) &&  get_index_cache (sys) != =  nothing 
523-         function  (expr)
524-             p =  gensym (:p )
525-             Func (
526-                 [
527-                     DestructuredArgs ([expr. args[1 ], p, expr. args[end ]],
528-                     integrator, inds =  [:u , :p , :t ])
529-                 ],
530-                 [],
531-                 Let (
532-                     [DestructuredArgs ([arg. name for  arg in  expr. args[2 : (end  -  1 )]], p),
533-                         expr. args[2 : (end  -  1 )]. .. ],
534-                     expr. body,
535-                     false )
536-             )
537-         end ,
538-         function  (expr)
539-             p =  gensym (:p )
540-             Func (
541-                 [
542-                     DestructuredArgs ([expr. args[1 ], expr. args[2 ], p, expr. args[end ]],
543-                     integrator, inds =  [out, :u , :p , :t ])
544-                 ],
545-                 [],
546-                 Let (
547-                     [DestructuredArgs ([arg. name for  arg in  expr. args[3 : (end  -  1 )]], p),
548-                         expr. args[3 : (end  -  1 )]. .. ],
549-                     expr. body,
550-                     false )
551-             )
552-         end 
553-     else 
554-         expr ->  Func ([DestructuredArgs (expr. args, integrator, inds =  [:u , :p , :t ])], [],
555-             expr. body),
556-         expr ->  Func (
557-             [DestructuredArgs (expr. args, integrator, inds =  [out, :u , :p , :t ])], [],
558-             expr. body)
559-     end 
522+     expr ->  Func ([DestructuredArgs (expr. args, integrator, inds =  [:u , :p , :t ])], [],
523+         expr. body),
524+     expr ->  Func (
525+         [DestructuredArgs (expr. args, integrator, inds =  [out, :u , :p , :t ])], [],
526+         expr. body)
560527end 
561528
562529function  condition_header (sys:: AbstractSystem , integrator =  gensym (:MTKIntegrator ))
563-     if  has_index_cache (sys) &&  get_index_cache (sys) != =  nothing 
564-         function  (expr)
565-             p =  gensym (:p )
566-             res =  Func (
567-                 [expr. args[1 ], expr. args[2 ],
568-                     DestructuredArgs ([p], integrator, inds =  [:p ])],
569-                 [],
570-                 Let (
571-                     [
572-                         DestructuredArgs ([arg. name for  arg in  expr. args[3 : end ]], p),
573-                         expr. args[3 : end ]. .. 
574-                     ], expr. body, false 
575-                 )
576-             )
577-             return  res
578-         end 
579-     else 
580-         expr ->  Func (
581-             [expr. args[1 ], expr. args[2 ],
582-                 DestructuredArgs (expr. args[3 : end ], integrator, inds =  [:p ])],
583-             [],
584-             expr. body)
585-     end 
530+     expr ->  Func (
531+         [expr. args[1 ], expr. args[2 ],
532+             DestructuredArgs (expr. args[3 : end ], integrator, inds =  [:p ])],
533+         [],
534+         expr. body)
586535end 
587536
588537function  callback_save_header (sys:: AbstractSystem , cb)
@@ -628,11 +577,10 @@ function compile_condition(cb::SymbolicDiscreteCallback, sys, dvs, ps;
628577        cmap =  map (x ->  x =>  getdefault (x), cs)
629578        condit =  substitute (condit, cmap)
630579    end 
631-     expr =  build_function ( 
580+     expr =  build_function_wrapper (sys, 
632581        condit, u, t, p... ; expression =  Val{true },
633-         wrap_code =  condition_header (sys) .∘ 
634-                     wrap_array_vars (sys, condit; dvs, ps, inputs =  true ) .∘ 
635-                     wrap_parameter_dependencies (sys, ! (condit isa  AbstractArray)),
582+         p_start =  3 , p_end =  length (p) +  2 ,
583+         wrap_code =  condition_header (sys),
636584        kwargs... )
637585    if  expression ==  Val{true }
638586        return  expr
@@ -715,14 +663,12 @@ function compile_affect(eqs::Vector{Equation}, cb, sys, dvs, ps; outputidxs = no
715663        end 
716664        t =  get_iv (sys)
717665        integ =  gensym (:MTKIntegrator )
718-         pre  =   get_preprocess_constants (rhss) 
719-         rf_oop, rf_ip  =   build_function ( rhss, u, p... , t; expression =  Val{true },
666+         rf_oop, rf_ip  =   build_function_wrapper ( 
667+             sys,  rhss, u, p... , t; expression =  Val{true },
720668            wrap_code =  callback_save_header (sys, cb) .∘ 
721-                         add_integrator_header (sys, integ, outvar) .∘ 
722-                         wrap_array_vars (sys, rhss; dvs, ps =  _ps) .∘ 
723-                         wrap_parameter_dependencies (sys, false ),
669+                         add_integrator_header (sys, integ, outvar),
724670            outputidxs =  update_inds,
725-             postprocess_fbody  =  pre ,
671+             create_bindings  =  false ,
726672            kwargs... )
727673        #  applied user-provided function to the generated expression
728674        if  postprocess_affect_expr! != =  nothing 
0 commit comments