<?xml version="1.0"?>
<doc>
    <assembly>
        <name>AssetRipper.CIL</name>
    </assembly>
    <members>
        <member name="M:AssetRipper.CIL.CilInstructionCollectionExtensions.AddNullRef(AsmResolver.DotNet.Code.Cil.CilInstructionCollection)">
            <summary>
            Load a null reference onto the stack.
            </summary>
            <remarks>
            The specified instructions come from the documentation for <see cref="M:System.Runtime.CompilerServices.Unsafe.NullRef``1"/>.<br/>
            They decompile as: <code>ref *(T*)null</code>
            The decompilation is valid C# and is the most optimized implementation.
            However, it does produce a compiler warning.
            </remarks>
            <param name="instructions"></param>
        </member>
        <member name="M:AssetRipper.CIL.CilInstructionCollectionExtensions.AddDefaultValueForUnknownType(AsmResolver.DotNet.Code.Cil.CilInstructionCollection,AsmResolver.DotNet.Signatures.Types.TypeSignature)">
            <summary>
            Load the default value onto the stack for an unknown type.
            </summary>
            <remarks>
            This is a silver bullet. It handles any type except void and by ref.
            </remarks>
            <param name="instructions"></param>
            <param name="type"></param>
        </member>
        <member name="M:AssetRipper.CIL.ParameterExtensions.IsOutParameter(AsmResolver.DotNet.Collections.Parameter,AsmResolver.DotNet.Signatures.Types.TypeSignature@)">
            <summary>
            Is this <see cref="T:AsmResolver.DotNet.Collections.Parameter"/> an out parameter?
            </summary>
            <param name="parameter"></param>
            <param name="parameterType">The base type of the <see cref="T:AsmResolver.DotNet.Signatures.Types.ByReferenceTypeSignature"/></param>
            <returns></returns>
        </member>
        <member name="T:System.Diagnostics.CodeAnalysis.ExperimentalAttribute">
            <summary>
            Indicates that an API is experimental and it may change in the future.
            </summary>
            <remarks>
            This attribute allows call sites to be flagged with a diagnostic that indicates that an experimental
            feature is used. Authors can use this attribute to ship preview features in their assemblies.
            </remarks>
        </member>
        <member name="M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.ExperimentalAttribute"/> class,
            specifying the ID that the compiler will use when reporting a use of the API the attribute applies to.
            </summary>
            <param name="diagnosticId">The ID that the compiler will use when reporting a use of the API the attribute applies to.</param>
        </member>
        <member name="P:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.DiagnosticId">
            <summary>
            Gets the ID that the compiler will use when reporting a use of the API the attribute applies to.
            </summary>
            <value>The unique diagnostic ID.</value>
            <remarks>
            The diagnostic ID is shown in build output for warnings and errors.
            <para>This property represents the unique ID that can be used to suppress the warnings or errors, if needed.</para>
            </remarks>
        </member>
        <member name="P:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.UrlFormat">
            <summary>
            Gets or sets the URL for corresponding documentation.
            The API accepts a format string instead of an actual URL, creating a generic URL that includes the diagnostic ID.
            </summary>
            <value>The format string that represents a URL to corresponding documentation.</value>
            <remarks>An example format string is <c>https://contoso.com/obsoletion-warnings/{0}</c>.</remarks>
        </member>
        <member name="M:System.Runtime.CompilerServices.CollectionBuilderAttribute.#ctor(System.Type,System.String)">
            <summary>
            Initialize the attribute to refer to the <paramref name="methodName"/> method on the <paramref name="builderType"/> type.
            </summary>
            <param name="builderType">The type of the builder to use to construct the collection.</param>
            <param name="methodName">The name of the method on the builder to use to construct the collection.</param>
            <remarks>
            <paramref name="methodName"/> must refer to a static method that accepts a single parameter of
            type <see cref="T:System.ReadOnlySpan`1"/> and returns an instance of the collection being built containing
            a copy of the data from that span.  In future releases of .NET, additional patterns may be supported.
            </remarks>
        </member>
        <member name="P:System.Runtime.CompilerServices.CollectionBuilderAttribute.BuilderType">
            <summary>
            Gets the type of the builder to use to construct the collection.
            </summary>
        </member>
        <member name="P:System.Runtime.CompilerServices.CollectionBuilderAttribute.MethodName">
            <summary>
            Gets the name of the method on the builder to use to construct the collection.
            </summary>
            <remarks>
            This should match the metadata name of the target method.
            For example, this might be ".ctor" if targeting the type's constructor.
            </remarks>
        </member>
        <member name="T:System.Runtime.CompilerServices.RequiresLocationAttribute">
            <summary>
            Reserved for use by a compiler for tracking metadata.
            This attribute should not be used by developers in source code.
            </summary>
        </member>
        <member name="T:System.Runtime.CompilerServices.UnsafeAccessorAttribute">
             <summary>
             Provides access to an inaccessible member of a specific type.
             </summary>
             <remarks>
             This attribute may be applied to an <code>extern static</code> method.
             The implementation of the <code>extern static</code> method annotated with
             this attribute will be provided by the runtime based on the information in
             the attribute and the signature of the method that the attribute is applied to.
             The runtime will try to find the matching method or field and forward the call
             to it. If the matching method or field is not found, the body of the <code>extern</code>
             method will throw <see cref="T:System.MissingFieldException" /> or <see cref="T:System.MissingMethodException" />.
             Only the specific type defined will be examined for inaccessible members. The type hierarchy
             is not walked looking for a match.
            
             For <see cref="F:System.Runtime.CompilerServices.UnsafeAccessorKind.Method"/>,
             <see cref="F:System.Runtime.CompilerServices.UnsafeAccessorKind.StaticMethod"/>,
             <see cref="F:System.Runtime.CompilerServices.UnsafeAccessorKind.Field"/>,
             and <see cref="F:System.Runtime.CompilerServices.UnsafeAccessorKind.StaticField"/>, the type of
             the first argument of the annotated <code>extern</code> method identifies the owning type.
             The value of the first argument is treated as <code>this</code> pointer for instance fields and methods.
             The first argument must be passed as <code>ref</code> for instance fields and methods on structs.
             The value of the first argument is not used by the implementation for <code>static</code> fields and methods.
            
             Return type is considered for the signature match. modreqs and modopts are initially not considered for
             the signature match. However, if an ambiguity exists ignoring modreqs and modopts, a precise match
             is attempted. If an ambiguity still exists <see cref="T:System.Reflection.AmbiguousMatchException" /> is thrown.
            
             By default, the attributed method's name dictates the name of the method/field. This can cause confusion
             in some cases since language abstractions, like C# local functions, generate mangled IL names. The
             solution to this is to use the <code>nameof</code> mechanism and define the <see cref="P:System.Runtime.CompilerServices.UnsafeAccessorAttribute.Name"/> property.
            
             <code>
             public void Method(Class c)
             {
                 PrivateMethod(c);
            
                 [UnsafeAccessor(UnsafeAccessorKind.Method, Name = nameof(PrivateMethod))]
                 extern static void PrivateMethod(Class c);
             }
             </code>
             </remarks>
        </member>
        <member name="M:System.Runtime.CompilerServices.UnsafeAccessorAttribute.#ctor(System.Runtime.CompilerServices.UnsafeAccessorKind)">
            <summary>
            Instantiates an <see cref="T:System.Runtime.CompilerServices.UnsafeAccessorAttribute"/>
            providing access to a member of kind <see cref="T:System.Runtime.CompilerServices.UnsafeAccessorKind"/>.
            </summary>
            <param name="kind">The kind of the target to which access is provided.</param>
        </member>
        <member name="P:System.Runtime.CompilerServices.UnsafeAccessorAttribute.Kind">
            <summary>
            Gets the kind of member to which access is provided.
            </summary>
        </member>
        <member name="P:System.Runtime.CompilerServices.UnsafeAccessorAttribute.Name">
            <summary>
            Gets or sets the name of the member to which access is provided.
            </summary>
            <remarks>
            The name defaults to the annotated method name if not specified.
            The name must be unset/<code>null</code> for <see cref="F:System.Runtime.CompilerServices.UnsafeAccessorKind.Constructor"/>.
            </remarks>
        </member>
        <member name="T:System.Runtime.CompilerServices.UnsafeAccessorKind">
            <summary>
            Specifies the kind of target to which an <see cref="T:System.Runtime.CompilerServices.UnsafeAccessorAttribute" /> is providing access.
            </summary>
        </member>
        <member name="F:System.Runtime.CompilerServices.UnsafeAccessorKind.Constructor">
            <summary>
            Provide access to a constructor.
            </summary>
        </member>
        <member name="F:System.Runtime.CompilerServices.UnsafeAccessorKind.Method">
            <summary>
            Provide access to a method.
            </summary>
        </member>
        <member name="F:System.Runtime.CompilerServices.UnsafeAccessorKind.StaticMethod">
            <summary>
            Provide access to a static method.
            </summary>
        </member>
        <member name="F:System.Runtime.CompilerServices.UnsafeAccessorKind.Field">
            <summary>
            Provide access to a field.
            </summary>
        </member>
        <member name="F:System.Runtime.CompilerServices.UnsafeAccessorKind.StaticField">
            <summary>
            Provide access to a static field.
            </summary>
        </member>
        <member name="T:System.Runtime.CompilerServices2.InlineArrayAttribute">
            <summary>
            Indicates that the instance's storage is sequentially replicated "length" times.
            </summary>
            <remarks>
            <para>
            This attribute can be used to annotate a <see langword="struct"/> type with a single field.
            The runtime will replicate that field in the actual type layout as many times as is specified.
            </para>
            <para>
            Here's an example of how an inline array type with 8 <see cref="T:System.Single"/> values can be declared:
            <code lang="csharp">
            [InlineArray(8)]
            struct Float8InlineArray
            {
                private float _value;
            }
            </code>
            </para>
            </remarks>
        </member>
        <member name="M:System.Runtime.CompilerServices2.InlineArrayAttribute.#ctor(System.Int32)">
            <summary>Creates a new <see cref="T:System.Runtime.CompilerServices2.InlineArrayAttribute"/> instance with the specified length.</summary>
            <param name="length">The number of sequential fields to replicate in the inline array type.</param>
        </member>
        <member name="P:System.Runtime.CompilerServices2.InlineArrayAttribute.Length">
            <summary>Gets the number of sequential fields to replicate in the inline array type.</summary>
        </member>
    </members>
</doc>
