@@ -77,22 +77,14 @@ backing(x::Tuple) = x
77
77
backing (x:: NamedTuple ) = x
78
78
backing (x:: Composite ) = getfield (x, :backing )
79
79
80
- function backing (x:: T ):: NamedTuple where T
81
- ! isstructtype (T) && throw (DomainError (T, " backing can only be use on composite types" ))
82
- nfields = fieldcount (T)
83
- names = ntuple (ii-> fieldname (T, ii), nfields)
84
- types = ntuple (ii-> fieldtype (T, ii), nfields)
85
-
86
- if @generated
87
- # @btime (()->ChainRulesCore.backing(Foo(1.0, 2.0)))()
88
- # # 5.590 ns (1 allocation: 32 bytes)
89
-
90
- vals = Expr (:tuple , ntuple (ii-> :(getfield (x, $ ii)), nfields)... )
91
- return :(NamedTuple {$names, Tuple{$(types...)}} ($ vals))
92
- else
93
- vals = ntuple (ii-> getfield (x, ii), nfields)
94
- return NamedTuple {names, Tuple{types...}} (vals)
95
- end
80
+ @generated function backing (x):: NamedTuple
81
+ ! isstructtype (x) && throw (DomainError (x, " backing can only be use on composite types" ))
82
+ nfields = fieldcount (x)
83
+ names = ntuple (ii-> fieldname (x, ii), nfields)
84
+ types = ntuple (ii-> fieldtype (x, ii), nfields)
85
+
86
+ vals = Expr (:tuple , ntuple (ii-> :(getfield (x, $ ii)), nfields)... )
87
+ return :(NamedTuple {$names, Tuple{$(types...)}} ($ vals))
96
88
end
97
89
98
90
"""
0 commit comments