Skip to content

Commit 362364f

Browse files
committed
comment
1 parent 3e172bd commit 362364f

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

src/getsetall.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,15 @@ nestedsum(ls::Int) = ls
116116
nestedsum(ls::Val) = ls
117117
nestedsum(ls::Tuple) = sum(_val nestedsum, ls)
118118

119+
# to_nested_shape() definition uses both @eval and @generated
120+
#
121+
# @eval is needed because the code for different recursion depths should be different for inference,
122+
# not the same method with different parameters.
123+
#
124+
# @generated is used to unpack target lengths from the second argument at compile time to make to_nested_shape() as cheap as possible.
125+
#
126+
# Note: to_nested_shape() only operates on plain Julia types and won't be affected by user lens definition, unlike setall for example.
127+
# That's why it's safe to make it @generated.
119128
to_nested_shape(vs, ::Val{LS}, ::Val{1}) where {LS} = (@assert length(vs) == _val(LS); vs)
120129
for i in 2:10
121130
@eval @generated function to_nested_shape(vs, ls::Val{LS}, ::Val{$i}) where {LS}

0 commit comments

Comments
 (0)