Beispiel #1
0
        internal MDOperand(MDNode owningNode, LLVMMDOperandRef handle)
        {
            handle.ValidateNotDefault(nameof(handle));

            OperandHandle = handle;
            OwningNode    = owningNode;
        }
Beispiel #2
0
        internal MDOperand(MDNode owningNode, LLVMMDOperandRef handle)
        {
            if (handle.Pointer == IntPtr.Zero)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            OperandHandle = handle;
            OwningNode    = owningNode;
        }
        public IEnumerator <MDOperand> GetEnumerator( )
        {
            for (uint i = 0; i < Count; ++i)
            {
                LLVMMDOperandRef handle = NativeMethods.MDNodeGetOperand(OwningNode.MetadataHandle, i);
                if (handle.Pointer == IntPtr.Zero)
                {
                    yield break;
                }

                yield return(MDOperand.FromHandle(OwningNode, handle));
            }
        }
Beispiel #4
0
        internal MDOperand GetOperandFor(MDNode owningNode, LLVMMDOperandRef handle)
        {
            if (owningNode.Context != this)
            {
                throw new ArgumentException("Cannot get operand for a node from a different context", nameof(owningNode));
            }

            if (handle.Pointer == IntPtr.Zero)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            if (MDOperandCache.TryGetValue(handle, out MDOperand retVal))
            {
                return(retVal);
            }

            retVal = new MDOperand(owningNode, handle);
            MDOperandCache.Add(handle, retVal);
            return(retVal);
        }
Beispiel #5
0
 internal static MDOperand FromHandle(MDNode owningNode, LLVMMDOperandRef handle)
 {
     return(owningNode.Context.GetOperandFor(owningNode, handle));
 }