@@ -250,11 +250,9 @@ metadata(::Union{Instruction, GlobalObject})
250250 MD_section_prefix = 20 ,
251251 MD_absolute_symbol = 21 ,
252252 MD_associated = 22 )
253- MDKind (name:: String ) = API. LLVMGetMDKindIDInContext (context (), name, length (name))
253+ MDKind (name:: String ) = MDKind ( API. LLVMGetMDKindIDInContext (context (), name, length (name) ))
254254MDKind (kind:: MDKind ) = kind
255255
256- # XXX : automatically converting string keys to MDKind is too automagical
257-
258256# instructions (using MetadataAsValue values)
259257
260258# TODO : doesn't actually iterate, since we can't list the available keys
325323Base. setindex! (md:: GlobalMetadataDict , node:: Metadata , key) =
326324 API. LLVMGlobalSetMetadata (md. val, MDKind (key), node)
327325
326+ Base. get (md:: GlobalMetadataDict , key, default) = get (md, MDKind (key), default)
327+ function Base. get (md:: GlobalMetadataDict , key:: MDKind , default)
328+ for (k, v) in md
329+ if k == key
330+ return v
331+ end
332+ end
333+ return default
334+ end
335+
336+ Base. haskey (md:: GlobalMetadataDict , key) = get (md, key, nothing ) != = nothing
337+ function Base. getindex (md:: GlobalMetadataDict , key)
338+ val = get (md, key, nothing )
339+ val === nothing && throw (KeyError (key))
340+ return val
341+ end
342+
328343Base. delete! (md:: GlobalMetadataDict , key) =
329344 API. LLVMGlobalEraseMetadata (md. val, MDKind (key))
330345
0 commit comments