Example #1
0
        internal static bool CheckAttributeUsage(this AttributeKind kind, FunctionAttributeIndex index, Value value)
        {
            FunctionIndexKinds allowedindices = kind.GetAllowedIndexes();

            switch (index)
            {
            case FunctionAttributeIndex.Function:
                if (!allowedindices.HasFlag(FunctionIndexKinds.Function))
                {
                    return(false);
                }

                break;

            case FunctionAttributeIndex.ReturnType:
                if (!allowedindices.HasFlag(FunctionIndexKinds.Return))
                {
                    return(false);
                }

                break;

            // case FunctionAttributeIndex.Parameter0:
            default:
            {
                if (value == default)
                {
                    throw new ArgumentNullException(nameof(value));
                }

                if (!allowedindices.HasFlag(FunctionIndexKinds.Parameter))
                {
                    return(false);
                }

                IrFunction?function = value switch
                {
                    IrFunction f => f,
                    CallInstruction call => call.TargetFunction,
                    Argument arg => arg.ContainingFunction,
                          _ => default,
                };
                int paramIndex = index - FunctionAttributeIndex.Parameter0;
                if (paramIndex >= (function?.Parameters.Count ?? 0))
                {
                    return(false);
                }
            }
 internal BasicBlockCollection(IrFunction function)
 {
     ContainingFunction = function;
 }
 internal FunctionParameterList(IrFunction owningFunction)
 {
     OwningFunction = owningFunction;
 }