@@ -31,7 +31,8 @@ function flatten_expr!(x)
3131 x
3232end
3333
34- function build_function (rhss, vs, ps = (), args = (), conv = simplified_expr, expression = Val{true }; constructor= nothing )
34+ function build_function (rhss, vs, ps = (), args = (), conv = simplified_expr, expression = Val{true };
35+ checkbounds = false , constructor= nothing )
3536 _vs = map (x-> x isa Operation ? x. op : x, vs)
3637 _ps = map (x-> x isa Operation ? x. op : x, ps)
3738 var_pairs = [(u. name, :(u[$ i])) for (i, u) ∈ enumerate (_vs)]
@@ -48,12 +49,16 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
4849
4950 sys_expr = build_expr (:tuple , [conv (rhs) for rhs ∈ rhss])
5051 let_expr = Expr (:let , var_eqs, sys_expr)
51-
52+ bounds_block = checkbounds ? let_expr : :(@inbounds begin $ let_expr end )
53+ ip_bounds_block = checkbounds ? ip_let_expr : :(@inbounds begin $ ip_let_expr end )
54+
5255 fargs = ps == () ? :(u,$ (args... )) : :(u,p,$ (args... ))
5356
5457 oop_ex = :(
5558 ($ (fargs. args... ),) -> begin
56- X = $ let_expr
59+ @inbounds begin
60+ X = $ bounds_block
61+ end
5762 T = promote_type (map (typeof,X)... )
5863 convert .(T,X)
5964 construct = $ (constructor === nothing ? :(u isa ModelingToolkit. StaticArrays. StaticArray ? ModelingToolkit. StaticArrays. similar_type (typeof (u), eltype (X)) : x-> (du= similar (u, T, $ (size (rhss)... )); vec (du) .= x; du)) : constructor)
@@ -63,7 +68,9 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
6368
6469 iip_ex = :(
6570 ($ X,$ (fargs. args... )) -> begin
66- $ ip_let_expr
71+ @inbounds begin
72+ $ ip_bounds_block
73+ end
6774 nothing
6875 end
6976 )
0 commit comments