@@ -31,22 +31,25 @@ import ..SimplifyModule: combine_operators, simplify_tree!
3131struct Metadata{NT<: NamedTuple }
3232 _data:: NT
3333end
34- _data (x:: Metadata ) = getfield (x, :_data )
34+ unpack_metadata (x) = x # Fallback for when the user doesn't use the Metadata type
35+ unpack_metadata (x:: Metadata ) = getfield (x, :_data )
3536
36- Base. propertynames (x:: Metadata ) = propertynames (_data (x))
37- @unstable @inline Base. getproperty (x:: Metadata , f:: Symbol ) = getproperty (_data (x), f)
38- Base. show (io:: IO , x:: Metadata ) = print (io, " Metadata(" , _data (x), " )" )
37+ Base. propertynames (x:: Metadata ) = propertynames (unpack_metadata (x))
38+ @unstable @inline function Base. getproperty (x:: Metadata , f:: Symbol )
39+ return getproperty (unpack_metadata (x), f)
40+ end
41+ Base. show (io:: IO , x:: Metadata ) = print (io, " Metadata(" , unpack_metadata (x), " )" )
3942@inline _copy (x) = copy (x)
4043@inline _copy (x:: NamedTuple ) = copy_named_tuple (x)
4144@inline _copy (x:: Nothing ) = nothing
4245@inline function copy_named_tuple (nt:: NamedTuple )
4346 return NamedTuple {keys(nt)} (map (_copy, values (nt)))
4447end
4548@inline function Base. copy (metadata:: Metadata )
46- return Metadata (_copy (_data (metadata)))
49+ return Metadata (_copy (unpack_metadata (metadata)))
4750end
48- @inline Base.:(== )(x:: Metadata , y:: Metadata ) = _data (x) == _data (y)
49- @inline Base. hash (x:: Metadata , h:: UInt ) = hash (_data (x), h)
51+ @inline Base.:(== )(x:: Metadata , y:: Metadata ) = unpack_metadata (x) == unpack_metadata (y)
52+ @inline Base. hash (x:: Metadata , h:: UInt ) = hash (unpack_metadata (x), h)
5053
5154"""
5255 AbstractExpression{T,N}
216219Create a new expression based on `ex` but with a different `metadata`.
217220"""
218221function with_metadata (ex:: AbstractExpression ; metadata... )
219- return with_metadata (ex, Metadata ((; metadata... )))
222+ return with_metadata (
223+ ex, Metadata ((; unpack_metadata (get_metadata (ex))... , metadata... ))
224+ )
220225end
221226function with_metadata (ex:: AbstractExpression , metadata:: Metadata )
222227 return constructorof (typeof (ex))(get_contents (ex), metadata)
0 commit comments