private static ReadOnlyCollection <byte> GetDynamicFlags(CustomAttributeData attribute) { var arguments = attribute.ConstructorArguments; if (arguments.Count == 0) { return(DynamicFlagsTrue); } else if (arguments.Count == 1) { var argument = arguments[0]; var argumentType = argument.ArgumentType; if (argumentType.IsArray && argumentType.GetElementType().IsBoolean()) { var collection = GetAttributeArrayArgumentValue(argument); var numFlags = collection.Count; var builder = ArrayBuilder <bool> .GetInstance(numFlags); foreach (var typedArg in collection) { builder.Add((bool)typedArg.Value); } var result = DynamicFlagsCustomTypeInfo.ToBytes(builder); builder.Free(); return(result); } } return(null); }
private ReadOnlyCollection <byte> SubstituteDynamicFlags(Type type, ReadOnlyCollection <byte> dynamicFlagsOpt) { var builder = ArrayBuilder <bool> .GetInstance(); int f = 0; foreach (Type curr in new TypeWalker(type)) { if (curr.IsGenericParameter && curr.DeclaringType.Equals(_typeDefinition)) { AppendRangeFor( curr, _dynamicFlags, _dynamicFlagStartIndices, DynamicFlagsCustomTypeInfo.GetFlag, builder); } else { builder.Add(DynamicFlagsCustomTypeInfo.GetFlag(dynamicFlagsOpt, f)); } f++; } var result = DynamicFlagsCustomTypeInfo.ToBytes(builder); builder.Free(); return(result); }
internal static DkmClrCustomTypeInfo MakeCustomTypeInfo(params bool[] dynamicFlags) { if (dynamicFlags == null || dynamicFlags.Length == 0) { return(null); } var builder = ArrayBuilder <bool> .GetInstance(dynamicFlags.Length); builder.AddRange(dynamicFlags); var result = CustomTypeInfo.Create(DynamicFlagsCustomTypeInfo.ToBytes(builder), tupleElementNames: null); builder.Free(); return(result); }