diff --git a/xml/System.Reflection.Context/CustomReflectionContext.xml b/xml/System.Reflection.Context/CustomReflectionContext.xml
index 0e55d5bf7d5..63d27743ad5 100644
--- a/xml/System.Reflection.Context/CustomReflectionContext.xml
+++ b/xml/System.Reflection.Context/CustomReflectionContext.xml
@@ -34,8 +34,35 @@
Represents a customizable reflection context.
- For more information about this API, see Supplemental API remarks for CustomReflectionContext.
-
+ provides a way for you to add or remove custom attributes from reflection objects, or add dummy properties to those objects, without re-implementing the complete reflection model. The default simply wraps reflection objects without making any changes, but by subclassing and overriding the relevant methods, you can add, remove, or change the attributes that apply to any reflected parameter or member, or add new properties to a reflected type.
+
+ For example, suppose that your code follows the convention of applying a particular attribute to factory methods, but you are now required to work with third-party code that lacks attributes. You can use to specify a rule for identifying the objects that should have attributes and to supply the objects with those attributes when they are viewed from your code.
+
+ To use effectively, the code that uses the reflected objects must support the notion of specifying a reflection context, instead of assuming that all reflected objects are associated with the runtime reflection context. Many reflection methods in .NET provide a parameter for this purpose.
+
+ To modify the attributes that are applied to a reflected parameter or member, override the or method. These methods take the reflected object and the list of attributes under its current reflection context, and return the list of attributes it should have under the custom reflection context.
+
+> [!WARNING]
+> methods should not access the list of attributes of a reflected object or method directly by calling the method on the provided or instance, but should instead use the `declaredAttributes` list, which is passed as a parameter to the method overloads.
+
+ To add properties to a reflected type, override the method. The method accepts a parameter that specifies the reflected type, and returns a list of additional properties. You should use the method to create property objects to return. You can specify delegates when creating the property that will serve as the property accessor, and you can omit one of the accessors to create a read-only or write-only property. Note that such dummy properties have no metadata or Common Intermediate Language (CIL) backing.
+
+> [!WARNING]
+> Be cautious about equality among reflected objects when you work with reflection contexts, because objects may represent the same reflected object in multiple contexts. You can use the method to obtain a particular reflection context's version of a reflected object.
+
+> [!WARNING]
+> A object alters the attributes returned by a particular reflection object, such as those obtained by the method. It does not alter the custom attribute data returned by the method, and these two lists will not match when you use a custom reflection context.
+
+## Examples
+ The following example demonstrates how to subclass to add a custom attribute to all the members of a given type whose names begin with "To". To run this code, paste it into an empty console project, and make sure to include a reference to System.Reflection.Context.dll.
+
+ :::code language="csharp" source="~/snippets/csharp/System.Reflection.Context/CustomReflectionContext/Overview/program.cs" id="Snippet1":::
+
+ ]]>
+
diff --git a/xml/System.Reflection.Emit/AssemblyBuilder.xml b/xml/System.Reflection.Emit/AssemblyBuilder.xml
index 359596f8c31..c8e078fcbc2 100644
--- a/xml/System.Reflection.Emit/AssemblyBuilder.xml
+++ b/xml/System.Reflection.Emit/AssemblyBuilder.xml
@@ -386,9 +386,8 @@ The following code example shows how to define and use a dynamic assembly. The e
.
@@ -413,15 +412,10 @@ The following code example shows how to define and use a dynamic assembly. The e
-or-
- The length of is greater than the system-defined maximum length.
-
- -or-
-
- .NET Framework only: A module with the same has already been defined in this assembly.
-
+ The length of is greater than the system-defined maximum length.
is .
- .NET Core and .NET 5+ only: A dynamic module has already been defined in this assembly.
+ A dynamic module has already been defined in this assembly.
The caller does not have the required permission.
The assembly for default symbol writer cannot be loaded.
@@ -458,7 +452,7 @@ The following code example shows how to define and use a dynamic assembly. The e
The name of the dynamic module.
When overridden in a derived class, defines a dynamic module in this assembly.
A representing the defined dynamic module.
- .NET Core and .NET 5+ support only one module per assembly.
+ Only one module per assembly is supported.
@@ -870,7 +864,7 @@ The following code example shows how to define and use a dynamic assembly. The e
The name of the requested dynamic module.
When overridden in a derived class, returns the dynamic module with the specified name.
A representing the requested dynamic module.
- .NET Core and .NET 5+ support only one module per assembly..
+ Only one module per assembly is supported.
@@ -1524,8 +1518,6 @@ The following code example shows how to define and use a dynamic assembly. The e
## Remarks
This method does not return a complete list of referenced assemblies. For example, if you apply a custom attribute to the , the assembly in which the attribute was defined is included in the list returned by this method. However, if you use a object to specify the type of a method parameter, that type is not included.
- To get a complete list of referenced assemblies, save the assembly, load it into another application domain, and call the method.
-
]]>
@@ -1870,14 +1862,8 @@ The following code example shows how to define and use a dynamic assembly. The e
Gets a value that indicates whether this dynamic assembly is held in a collectible .
if this dynamic assembly is held in a collectible ; otherwise, .
-
-
-
+ To be added.
+
diff --git a/xml/System.Reflection.Emit/AssemblyBuilderAccess.xml b/xml/System.Reflection.Emit/AssemblyBuilderAccess.xml
index 6f9c8954d8d..d018cfc9a8e 100644
--- a/xml/System.Reflection.Emit/AssemblyBuilderAccess.xml
+++ b/xml/System.Reflection.Emit/AssemblyBuilderAccess.xml
@@ -50,7 +50,7 @@
Defines the access modes for a dynamic assembly.
- This enumeration defines only two fields ( and ) in .NET. In .NET Framework, it defines an additional three fields (, , and ). For more information, see AssemblyBuilder class remarks.
+ For more information about this enumeration, see AssemblyBuilder class remarks.
diff --git a/xml/System.Reflection.Emit/ConstructorBuilder.xml b/xml/System.Reflection.Emit/ConstructorBuilder.xml
index 986aa484fe4..df42179c245 100644
--- a/xml/System.Reflection.Emit/ConstructorBuilder.xml
+++ b/xml/System.Reflection.Emit/ConstructorBuilder.xml
@@ -746,9 +746,7 @@
method has been called. In the .NET Framework versions 1.0 and 1.1, is thrown. In the .NET Framework version 2.0, is thrown.
-
-
+ This property is not supported until after the method has been called.
## Examples
The code sample illustrates the use of `GetParameters`.
@@ -758,10 +756,6 @@
]]>
-
- has not been called on this constructor's type, in the .NET Framework versions 1.0 and 1.1.
-
- has not been called on this constructor's type, in the .NET Framework version 2.0.
diff --git a/xml/System.Reflection.Emit/DynamicMethod.xml b/xml/System.Reflection.Emit/DynamicMethod.xml
index 0a28c8596c8..87c0c9f3f08 100644
--- a/xml/System.Reflection.Emit/DynamicMethod.xml
+++ b/xml/System.Reflection.Emit/DynamicMethod.xml
@@ -61,7 +61,6 @@ The following code example creates a dynamic method that takes two parameters. T
How to: Define and Execute Dynamic Methods
Security Issues in Reflection Emit
- Walkthrough: Emitting Code in Partial Trust Scenarios
@@ -145,7 +144,7 @@ The following code example creates a dynamic method that takes two parameters. T
constructor.
@@ -153,19 +152,13 @@ The following code example creates a dynamic method that takes two parameters. T
This constructor specifies the method attributes and , and the calling convention .
-> [!NOTE]
-> This constructor was introduced in the .NET Framework 3.5 or later.
-
]]>
An element of is or .
is .
- .NET Framework and .NET Core versions older than 2.1:
- is a type for which returns .
How to: Define and Execute Dynamic Methods
Security Issues in Reflection Emit
- Walkthrough: Emitting Code in Partial Trust Scenarios
@@ -236,13 +229,13 @@ The following code example creates a dynamic method that takes two parameters. T
A object that specifies the return type of the dynamic method, or if the method has no return type.
An array of objects specifying the types of the parameters of the dynamic method, or if the method has no parameters.
- to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method, with this restriction: the trust level of the assemblies that contain those types and members must be equal to or less than the trust level of the call stack that emits the dynamic method; otherwise, .
+ to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method; otherwise, .
Initializes an anonymously hosted dynamic method, specifying the method name, return type, parameter types, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.
with the flag. This is always true when the code is executed with full trust. For partially trusted code, it is true only if the host explicitly grants the permission.
-
- > [!IMPORTANT]
- > If the permission has not been granted, a security exception is thrown when is called or when the dynamic method is invoked, not when this constructor is called. No special permissions are required to emit the dynamic method.
+- The call stack that emits the dynamic method is granted with the flag. This is always true when the code is executed with full trust.
- For example, a dynamic method that is created with `restrictedSkipVisibility` set to `true` can access a private member of any assembly on the call stack if the call stack has been granted restricted member access. If the dynamic method is created with partially trusted code on the call stack, it cannot access a private member of a type in a .NET Framework assembly, because such assemblies are fully trusted.
+ For example, a dynamic method that is created with `restrictedSkipVisibility` set to `true` can access a private member of any assembly on the call stack if the call stack has been granted restricted member access. If the dynamic method is created with partially trusted code on the call stack, it cannot access a private member of a type in a .NET assembly, because such assemblies are fully trusted.
If `restrictedSkipVisibility` is `false`, JIT visibility checks are enforced. The code in the dynamic method has access to public methods of public classes, and exceptions are thrown if it tries to access types or members that are `private`, `protected`, or `internal`.
@@ -263,19 +253,13 @@ The following code example creates a dynamic method that takes two parameters. T
This constructor specifies the method attributes and , and the calling convention .
-> [!NOTE]
-> This constructor was introduced in the .NET Framework 3.5 or later.
-
]]>
An element of is or .
is .
- .NET Framework and .NET Core versions older than 2.1:
- is a type for which returns .
How to: Define and Execute Dynamic Methods
Security Issues in Reflection Emit
- Walkthrough: Emitting Code in Partial Trust Scenarios
@@ -377,8 +361,6 @@ The following code example creates a dynamic method that takes two parameters. T
-or-
is .
- .NET Framework and .NET Core versions older than 2.1:
- is a type for which returns .
How to: Define and Execute Dynamic Methods
Security Issues in Reflection Emit
@@ -475,9 +457,6 @@ The following code example creates a dynamic method that takes two parameters. T
The example code creates an instance of `Example` and then creates two delegates. The first is of type `UseLikeStatic`, which has the same parameters as the dynamic method. The second is of type `UseLikeInstance`, which lacks the first parameter (of type `Example`). This delegate is created using the method overload; the second parameter of that method overload is an instance of `Example`, in this case the instance just created, which is bound to the newly created delegate. Whenever that delegate is invoked, the dynamic method acts on the bound instance of `Example`.
-> [!NOTE]
-> This is an example of the relaxed rules for delegate binding introduced in .NET Framework 2.0, along with new overloads of the method. For more information, see the class.
-
The `UseLikeStatic` delegate is invoked, passing in the instance of `Example` that is bound to the `UseLikeInstance` delegate. Then the `UseLikeInstance` delegate is invoked, so that both delegates act on the same instance of `Example`. The changes in the values of the internal field are displayed after each call. Finally, a `UseLikeInstance` delegate is bound to an instance of `DerivedFromExample`, and the delegate calls are repeated.
:::code language="csharp" source="~/snippets/csharp/System.Reflection.Emit/DynamicMethod/.ctor/source.cs" id="Snippet1":::
@@ -496,8 +475,6 @@ The following code example creates a dynamic method that takes two parameters. T
-or-
is .
- .NET Framework and .NET Core versions older than 2.1:
- is a type for which returns .
How to: Define and Execute Dynamic Methods
Security Issues in Reflection Emit
@@ -598,8 +575,6 @@ The following code example creates a dynamic method that takes two parameters. T
-or-
is .
- .NET Framework and .NET Core versions older than 2.1:
- is a type for which returns .
How to: Define and Execute Dynamic Methods
Security Issues in Reflection Emit
@@ -700,8 +675,6 @@ The following code example creates a dynamic method that takes two parameters. T
-or-
is .
- .NET Framework and .NET Core versions older than 2.1:
- is a type for which returns .
How to: Define and Execute Dynamic Methods
Security Issues in Reflection Emit
@@ -1212,9 +1185,6 @@ The following code example creates a dynamic method that takes two parameters. T
The example code creates an instance of `Example` and then creates two delegates. The first is of type `UseLikeStatic`, which has the same parameters as the dynamic method. The second is of type `UseLikeInstance`, which lacks the first parameter (of type `Example`). This delegate is created using the method overload; the second parameter of that method overload is an instance of `Example`, in this case the instance just created, which is bound to the newly created delegate. Whenever that delegate is invoked, the dynamic method acts on the bound instance of `Example`.
-> [!NOTE]
-> This is an example of the relaxed rules for delegate binding introduced in .NET Framework 2.0, along with new overloads of the method. For more information, see the class.
-
The `UseLikeStatic` delegate is invoked, passing in the instance of `Example` that is bound to the `UseLikeInstance` delegate. Then the `UseLikeInstance` delegate is invoked, so that both delegates act on the same instance of `Example`. The changes in the values of the internal field are displayed after each call. Finally, a `UseLikeInstance` delegate is bound to an instance of `DerivedFromExample`, and the delegate calls are repeated.
:::code language="csharp" source="~/snippets/csharp/System.Reflection.Emit/DynamicMethod/.ctor/source.cs" id="Snippet1":::
@@ -1823,8 +1793,6 @@ The following code example creates a dynamic method that takes two parameters. T
## Remarks
The objects returned by this method are for information only. Use the method to set or change the characteristics of the parameters.
-
-
## Examples
The following code example displays the parameters of a dynamic method. This code example is part of a larger example provided for the class.
@@ -1881,8 +1849,6 @@ The following code example creates a dynamic method that takes two parameters. T
## Remarks
If this property is set to `true`, the emitted Microsoft intermediate language (MSIL) includes initialization of local variables. If it is set to `false`, local variables are not initialized and the generated code is unverifiable.
-
-
## Examples
The following code example displays the property of a dynamic method. This code example is part of a larger example provided for the class.
@@ -1958,7 +1924,7 @@ The following code example creates a dynamic method that takes two parameters. T
If the dynamic method has no parameters, the value of `parameters` should be `null`. Otherwise the number, type, and order of elements in the parameters array should be identical to the number, type, and order of parameters of the dynamic method.
> [!NOTE]
-> This method overload is called by the method overload inherited from the class, so the preceding remarks apply to both overloads.
+> This method overload is called by the method overload inherited from the class, so the preceding remarks apply to both overloads.
This method does not demand permissions directly, but invoking the dynamic method can result in security demands, depending on the method. For example, no demands are made for anonymously hosted dynamic methods that are created with the `restrictedSkipVisibility` parameter set to `false`. On the other hand, if you create a method with `restrictedSkipVisibility` set to `true` so it can access a hidden member of a target assembly, the method will cause a demand for the permissions of the target assembly plus with the flag.
@@ -2084,46 +2050,31 @@ The following code example creates a dynamic method that takes two parameters. T
## Remarks
The , , and properties report the transparency level of the dynamic method as determined by the common language runtime (CLR). The combinations of these properties are shown in the following table:
-|Security level|IsSecurityCritical|IsSecuritySafeCritical|IsSecurityTransparent|
-|--------------------|------------------------|----------------------------|---------------------------|
-|Critical|`true`|`false`|`false`|
-|Safe critical|`true`|`true`|`false`|
-|Transparent|`false`|`false`|`true`|
+| Security level | IsSecurityCritical | IsSecuritySafeCritical | IsSecurityTransparent |
+|----------------|--------------------|------------------------|-----------------------|
+| Critical | `true` | `false` | `false` |
+| Safe critical | `true` | `true` | `false` |
+| Transparent | `false` | `false` | `true` |
Using these properties is much simpler than examining the security annotations of an assembly and its types, checking the current trust level, and attempting to duplicate the runtime's rules.
The transparency of a dynamic method depends on the module it is associated with. If the dynamic method is associated with a type rather than a module, its transparency depends on the module that contains the type. Dynamic methods do not have security annotations, so they are assigned the default transparency for the associated module.
- Anonymously hosted dynamic methods are always transparent, because the system-provided module that contains them is transparent.
-
- The transparency of a dynamic method that is associated with a trusted assembly (that is, a strong-named assembly that is installed in the global assembly cache) is described in the following table.
- |Assembly annotation|Level 1 transparency|Level 2 transparency|
- |-------------------------|--------------------------|--------------------------|
- |Fully transparent|Transparent|Transparent|
- |Fully critical|Critical|Critical|
- |Mixed transparency|Transparent|Transparent|
- |Security-agnostic|Safe-critical|Critical|
-
- For example, if you associate a dynamic method with a type that is in mscorlib.dll, which has level 2 mixed transparency, the dynamic method is transparent and cannot execute critical code. For information about transparency levels, see [Security-Transparent Code, Level 1](/dotnet/framework/misc/security-transparent-code-level-1) and [Security-Transparent Code, Level 2](/dotnet/framework/misc/security-transparent-code-level-2).
+ | Assembly annotation | Level 1 transparency | Level 2 transparency |
+ |---------------------|----------------------|----------------------|
+ | Fully transparent | Transparent | Transparent |
+ | Fully critical | Critical | Critical |
+ | Mixed transparency | Transparent | Transparent |
+ | Security-agnostic | Safe-critical | Critical |
- > [!NOTE]
- > Associating a dynamic method with a module in a trusted level 1 assembly that is security-agnostic, such as System.dll, does not permit elevation of trust. If the grant set of the code that calls the dynamic method does not include the grant set of System.dll (that is, full trust), is thrown when the dynamic method is called.
-
-- The transparency of a dynamic method that is associated with a partially trusted assembly depends on how the assembly is loaded. If the assembly is loaded with partial trust (for example, into a sandboxed application domain), the runtime ignores the security annotations of the assembly. The assembly and all its types and members, including dynamic methods, are treated as transparent. The runtime pays attention to security annotations only if the partial-trust assembly is loaded with full trust (for example, into the default application domain of a desktop application). In that case, the runtime assigns the dynamic method the default transparency for methods according to the assembly's annotations.
-
- For more information about reflection emit and transparency, see [Security Issues in Reflection Emit](/dotnet/framework/reflection-and-codedom/security-issues-in-reflection-emit). For information about transparency, see [Security Changes](/dotnet/framework/security/security-changes).
+ For example, if you associate a dynamic method with a type that is in mscorlib.dll, which has level 2 mixed transparency, the dynamic method is transparent and cannot execute critical code.
]]>
The dynamic method doesn't have a method body.
-
-
- Security Issues in Reflection Emit
- Security Considerations for Reflection
- Security Changes in the .NET Framework Version 4.0
- Security-Transparent Code, Level 1
- Security-Transparent Code, Level 2
@@ -2166,46 +2117,29 @@ The following code example creates a dynamic method that takes two parameters. T
## Remarks
The , , and properties report the transparency level of the dynamic method as determined by the common language runtime (CLR). The combinations of these properties are shown in the following table:
-|Security level|IsSecurityCritical|IsSecuritySafeCritical|IsSecurityTransparent|
-|--------------------|------------------------|----------------------------|---------------------------|
-|Critical|`true`|`false`|`false`|
-|Safe critical|`true`|`true`|`false`|
-|Transparent|`false`|`false`|`true`|
+| Security level | IsSecurityCritical | IsSecuritySafeCritical | IsSecurityTransparent |
+|----------------|--------------------|------------------------|-----------------------|
+| Critical | `true` | `false` | `false` |
+| Safe critical | `true` | `true` | `false` |
+| Transparent | `false` | `false` | `true` |
Using these properties is much simpler than examining the security annotations of an assembly and its types, checking the current trust level, and attempting to duplicate the runtime's rules.
The transparency of a dynamic method depends on the module it is associated with. If the dynamic method is associated with a type rather than a module, its transparency depends on the module that contains the type. Dynamic methods do not have security annotations, so they are assigned the default transparency for the associated module.
- Anonymously hosted dynamic methods are always transparent, because the system-provided module that contains them is transparent.
-
- The transparency of a dynamic method that is associated with a trusted assembly (that is, a strong-named assembly that is installed in the global assembly cache) is described in the following table.
- |Assembly annotation|Level 1 transparency|Level 2 transparency|
- |-------------------------|--------------------------|--------------------------|
- |Fully transparent|Transparent|Transparent|
- |Fully critical|Critical|Critical|
- |Mixed transparency|Transparent|Transparent|
- |Security-agnostic|Safe-critical|Critical|
-
- For example, if you associate a dynamic method with a type that is in mscorlib.dll, which has level 2 mixed transparency, the dynamic method is transparent and cannot execute critical code. For information about transparency levels, see [Security-Transparent Code, Level 1](/dotnet/framework/misc/security-transparent-code-level-1) and [Security-Transparent Code, Level 2](/dotnet/framework/misc/security-transparent-code-level-2).
-
- > [!NOTE]
- > Associating a dynamic method with a module in a trusted level 1 assembly that is security-agnostic, such as System.dll, does not permit elevation of trust. If the grant set of the code that calls the dynamic method does not include the grant set of System.dll (that is, full trust), is thrown when the dynamic method is called.
-
-- The transparency of a dynamic method that is associated with a partially trusted assembly depends on how the assembly is loaded. If the assembly is loaded with partial trust (for example, into a sandboxed application domain), the runtime ignores the security annotations of the assembly. The assembly and all its types and members, including dynamic methods, are treated as transparent. The runtime pays attention to security annotations only if the partial-trust assembly is loaded with full trust (for example, into the default application domain of a desktop application). In that case, the runtime assigns the dynamic method the default transparency for methods according to the assembly's annotations.
-
- For more information about reflection emit and transparency, see [Security Issues in Reflection Emit](/dotnet/framework/reflection-and-codedom/security-issues-in-reflection-emit). For information about transparency, see [Security Changes](/dotnet/framework/security/security-changes).
+ | Assembly annotation | Level 1 transparency | Level 2 transparency |
+ |---------------------|----------------------|----------------------|
+ | Fully transparent | Transparent | Transparent |
+ | Fully critical | Critical | Critical |
+ | Mixed transparency | Transparent | Transparent |
+ | Security-agnostic | Safe-critical | Critical |
]]>
The dynamic method doesn't have a method body.
-
-
- Security Issues in Reflection Emit
- Security Considerations for Reflection
- Security Changes in the .NET Framework Version 4.0
- Security-Transparent Code, Level 1
- Security-Transparent Code, Level 2
@@ -2248,46 +2182,29 @@ The following code example creates a dynamic method that takes two parameters. T
## Remarks
The , , and properties report the transparency level of the dynamic method as determined by the common language runtime (CLR). The combinations of these properties are shown in the following table:
-|Security level|IsSecurityCritical|IsSecuritySafeCritical|IsSecurityTransparent|
-|--------------------|------------------------|----------------------------|---------------------------|
-|Critical|`true`|`false`|`false`|
-|Safe critical|`true`|`true`|`false`|
-|Transparent|`false`|`false`|`true`|
+| Security level | IsSecurityCritical | IsSecuritySafeCritical | IsSecurityTransparent |
+|----------------|--------------------|------------------------|-----------------------|
+| Critical | `true` | `false` | `false` |
+| Safe critical | `true` | `true` | `false` |
+| Transparent | `false` | `false` | `true` |
Using these properties is much simpler than examining the security annotations of an assembly and its types, checking the current trust level, and attempting to duplicate the runtime's rules.
The transparency of a dynamic method depends on the module it is associated with. If the dynamic method is associated with a type rather than a module, its transparency depends on the module that contains the type. Dynamic methods do not have security annotations, so they are assigned the default transparency for the associated module.
- Anonymously hosted dynamic methods are always transparent, because the system-provided module that contains them is transparent.
-
- The transparency of a dynamic method that is associated with a trusted assembly (that is, a strong-named assembly that is installed in the global assembly cache) is described in the following table.
- |Assembly annotation|Level 1 transparency|Level 2 transparency|
- |-------------------------|--------------------------|--------------------------|
- |Fully transparent|Transparent|Transparent|
- |Fully critical|Critical|Critical|
- |Mixed transparency|Transparent|Transparent|
- |Security-agnostic|Safe-critical|Critical|
-
- For example, if you associate a dynamic method with a type that is in mscorlib.dll, which has level 2 mixed transparency, the dynamic method is transparent and cannot execute critical code. For information about transparency levels, see [Security-Transparent Code, Level 1](/dotnet/framework/misc/security-transparent-code-level-1) and [Security-Transparent Code, Level 2](/dotnet/framework/misc/security-transparent-code-level-2).
-
- > [!NOTE]
- > Associating a dynamic method with a module in a trusted level 1 assembly that is security-agnostic, such as System.dll, does not permit elevation of trust. If the grant set of the code that calls the dynamic method does not include the grant set of System.dll (that is, full trust), is thrown when the dynamic method is called.
-
-- The transparency of a dynamic method that is associated with a partially trusted assembly depends on how the assembly is loaded. If the assembly is loaded with partial trust (for example, into a sandboxed application domain), the runtime ignores the security annotations of the assembly. The assembly and all its types and members, including dynamic methods, are treated as transparent. The runtime pays attention to security annotations only if the partial-trust assembly is loaded with full trust (for example, into the default application domain of a desktop application). In that case, the runtime assigns the dynamic method the default transparency for methods according to the assembly's annotations.
-
- For more information about reflection emit and transparency, see [Security Issues in Reflection Emit](/dotnet/framework/reflection-and-codedom/security-issues-in-reflection-emit). For information about transparency, see [Security Changes](/dotnet/framework/security/security-changes).
+ | Assembly annotation | Level 1 transparency | Level 2 transparency |
+ |---------------------|----------------------|----------------------|
+ | Fully transparent | Transparent | Transparent |
+ | Fully critical | Critical | Critical |
+ | Mixed transparency | Transparent | Transparent |
+ | Security-agnostic | Safe-critical | Critical |
]]>
The dynamic method doesn't have a method body.
-
-
- Security Issues in Reflection Emit
- Security Considerations for Reflection
- Security Changes in the .NET Framework Version 4.0
- Security-Transparent Code, Level 1
- Security-Transparent Code, Level 2
diff --git a/xml/System.Reflection.Emit/EnumBuilder.xml b/xml/System.Reflection.Emit/EnumBuilder.xml
index a92d791790a..7e6a6232bdd 100644
--- a/xml/System.Reflection.Emit/EnumBuilder.xml
+++ b/xml/System.Reflection.Emit/EnumBuilder.xml
@@ -65,18 +65,9 @@
[!NOTE]
-> In the .NET Framework versions 1.0 and 1.1, it is necessary to define enumerations using because emits enumerations whose elements are of type instead of the enumeration type. In the .NET Framework version 2.0, emits enumerations whose elements have the correct type.
-
-
-
## Examples
- The following code example demonstrates the construction of an enumeration within a dynamic assembly, using `EnumBuilder`. The example defines an enumeration named `Elevation`, with an underlying type of , and creates two elements: `Low`, with a value of 0, and `High`, with a value of 1. After the type has been created, the assembly is saved with the name `TempAssembly.dll`. You can use the [Ildasm.exe (IL Disassembler)](/dotnet/framework/tools/ildasm-exe-il-disassembler) to examine the contents of this assembly.
-> [!NOTE]
-> Prior to the .NET Framework version 2.0, this code example does not produce a correct enumeration.
+The following code example demonstrates the construction of an enumeration within a dynamic assembly, using `EnumBuilder`. The example defines an enumeration named `Elevation`, with an underlying type of , and creates two elements: `Low`, with a value of 0, and `High`, with a value of 1. After the type has been created, the assembly is saved with the name `TempAssembly.dll`. You can use the [Ildasm.exe (IL Disassembler)](/dotnet/framework/tools/ildasm-exe-il-disassembler) to examine the contents of this assembly.
:::code language="csharp" source="~/snippets/csharp/System.Reflection.Emit/EnumBuilder/Overview/modulebuilder_defineenum.cs" id="Snippet1":::
:::code language="vb" source="~/snippets/visualbasic/System.Reflection.Emit/EnumBuilder/Overview/modulebuilder_defineenum.vb" id="Snippet1":::
@@ -600,17 +591,9 @@ The following code sample demonstrates the use of the `AssemblyQualifiedName` pr
## Remarks
The defined field will have the field attributes , , and set.
-> [!NOTE]
-> In the .NET Framework versions 1.0 and 1.1, it is necessary to define enumerations using because emits enumerations whose elements are of type instead of the enumeration type. In the .NET Framework version 2.0, emits enumerations whose elements have the correct type.
-
-
-
## Examples
The following code example demonstrates the construction of an enumeration within a dynamic assembly, using `EnumBuilder`. The example defines an enumeration named `Elevation`, with an underlying type of , and creates two elements: `Low`, with a value of 0, and `High`, with a value of 1. After the type has been created, the assembly is saved with the name `TempAssembly.dll`. You can use the [Ildasm.exe (IL Disassembler)](/dotnet/framework/tools/ildasm-exe-il-disassembler) to examine the contents of this assembly.
-> [!NOTE]
-> Prior to the .NET Framework version 2.0, this code example does not produce a correct enumeration.
-
:::code language="csharp" source="~/snippets/csharp/System.Reflection.Emit/EnumBuilder/Overview/modulebuilder_defineenum.cs" id="Snippet1":::
:::code language="vb" source="~/snippets/visualbasic/System.Reflection.Emit/EnumBuilder/Overview/modulebuilder_defineenum.vb" id="Snippet1":::
diff --git a/xml/System.Reflection.Emit/FieldBuilder.xml b/xml/System.Reflection.Emit/FieldBuilder.xml
index d140ef73b33..05e323038c4 100644
--- a/xml/System.Reflection.Emit/FieldBuilder.xml
+++ b/xml/System.Reflection.Emit/FieldBuilder.xml
@@ -738,7 +738,8 @@
. This is not CLS-compliant, but it can be useful in interop scenarios.
+
+`defaultValue` is restricted to the following types: `Boolean`, `SByte`, `Int16`, `Int32`, `Int64`, `Byte`, `UInt16`, `UInt32`, `UInt64`, `Single`, `Double`, `DateTime`, `Char`, `String`, and `Enum`. If the field type is a reference type, CLS compliance requires `defaultValue` to be `null`. However, `defaultValue` can be non-null for a reference type as long as the value can be assigned to that reference type. For example, an `Int32` value can be assigned to a field of type . This is not CLS-compliant, but it can be useful in interop scenarios.
]]>
diff --git a/xml/System.Reflection.Emit/ILGenerator.xml b/xml/System.Reflection.Emit/ILGenerator.xml
index f8d0c6529dc..13e7de462ed 100644
--- a/xml/System.Reflection.Emit/ILGenerator.xml
+++ b/xml/System.Reflection.Emit/ILGenerator.xml
@@ -1882,7 +1882,6 @@ The following code example emits two methods, a `varargs` method and a method th
does not specify a method call.
is .
- The calling convention for the method is not , but optional parameter types are supplied. This exception is thrown in the .NET Framework versions 1.0 and 1.1, In subsequent versions, no exception is thrown.
@@ -2455,8 +2454,6 @@ The following code example emits two methods, a `varargs` method and a method th
property is accessed before any MSIL instructions have been emitted, it returns 0 (zero).
When MSIL is generated for dynamic languages, this property can be used to map offsets in the MSIL stream to source code line numbers. The resulting information can be used to provide stack traces when exceptions are thrown.
diff --git a/xml/System.Reflection.Emit/MethodBuilder.xml b/xml/System.Reflection.Emit/MethodBuilder.xml
index 60bf1e986b3..83fbe3dd743 100644
--- a/xml/System.Reflection.Emit/MethodBuilder.xml
+++ b/xml/System.Reflection.Emit/MethodBuilder.xml
@@ -490,9 +490,6 @@ The following example uses the class
Parameter numbering begins with 1, so `position` is 1 for the first parameter. If `position` is zero, this method affects the return value.
-> [!NOTE]
-> In the .NET Framework versions 1.0 and 1.1, an exception is thrown if `position` is zero, so this method cannot be used to modify attributes of the return value in those versions.
-
]]>
The method has no parameters.
diff --git a/xml/System.Reflection.Emit/ModuleBuilder.xml b/xml/System.Reflection.Emit/ModuleBuilder.xml
index 2d116aa9683..0926dd8fa63 100644
--- a/xml/System.Reflection.Emit/ModuleBuilder.xml
+++ b/xml/System.Reflection.Emit/ModuleBuilder.xml
@@ -313,13 +313,6 @@
[!IMPORTANT]
-> Earlier versions of the .NET Framework throw instead of when `url` is `null`.
-
-
-
## Examples
The following code sample illustrates the use of `DefineDocument` to attach an external symbol document (in this case, a raw IL file) to a dynamic module.
@@ -329,7 +322,7 @@
]]>
- is . This is a change from earlier versions of the .NET Framework.
+ is .
This method is called on a dynamic module that is not a debug module.
@@ -420,15 +413,9 @@
For more information about the built-in integer types that can be specified as the underlying types of enumerations, see [Class Library Overview](/dotnet/standard/class-library-overview).
-> [!NOTE]
-> In the .NET Framework versions 1.0 and 1.1, it is necessary to define enumerations using because emits enumerations whose elements are of type instead of the enumeration type. In the .NET Framework version 2.0, emits enumerations whose elements have the correct type.
-
## Examples
The following example illustrates the use of `DefineEnum` to implement an enumeration class in a dynamic module. The example defines an enumeration named `Elevation` that has an underlying type of , and creates two elements: `Low`, with a value of 0, and `High`, with a value of 1. After the type has been created, the assembly is saved with the name `TempAssembly.dll`. You can use the [Ildasm.exe (IL Disassembler)](/dotnet/framework/tools/ildasm-exe-il-disassembler) to examine the contents of this assembly.
-> [!NOTE]
-> Prior to the .NET Framework version 2.0, this code example does not produce a correct enumeration.
-
:::code language="csharp" source="~/snippets/csharp/System.Reflection.Emit/EnumBuilder/Overview/modulebuilder_defineenum.cs" id="Snippet1":::
:::code language="vb" source="~/snippets/visualbasic/System.Reflection.Emit/EnumBuilder/Overview/modulebuilder_defineenum.vb" id="Snippet1":::
diff --git a/xml/System.Reflection.Emit/OpCodes.xml b/xml/System.Reflection.Emit/OpCodes.xml
index e1e225e9006..a9ebcc8950e 100644
--- a/xml/System.Reflection.Emit/OpCodes.xml
+++ b/xml/System.Reflection.Emit/OpCodes.xml
@@ -113,13 +113,13 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; `value1` is added to `value2`.
+3. `value2` and `value1` are popped from the stack; `value1` is added to `value2`.
-4. The result is pushed onto the stack.
+4. The result is pushed onto the stack.
Overflow is not detected for integer operations (for proper overflow handling, see ).
@@ -129,26 +129,26 @@
The acceptable operand types and their corresponding result data type are listed in the table below. If there is no entry for a particular type combination (for example, `int32` and `float`; `int32` and `int64`), it is an invalid Microsoft Intermediate Language (MSIL) and generates an error.
-|operand|value1 type|value2 type|result type|
-|-------------|-----------------|-----------------|-----------------|
-|add|`int32`|`int32`|`int32`|
-|add|`int32`|`native int`|`native int`|
-|add|`int32`|`&`|`&`|
-|add|`int32`|`*`|`*`|
-|add|`int64`|`int64`|`int64`|
-|add|`native int`|`int32`|`native int`|
-|add|`native int`|`native int`|`native int`|
-|add|`native int`|`&`|`&`|
-|add|`native int`|`*`|`*`|
-|add|`F`|`F`|`F`|
-|add|`&`|`int32`|`&`|
-|add|`&`|`native int`|`&`|
-|add|`*`|`int32`|`*`|
-|add|`*`|`native int`|`*`|
+| operand | value1 type | value2 type | result type |
+|---------|--------------|--------------|--------------|
+| add | `int32` | `int32` | `int32` |
+| add | `int32` | `native int` | `native int` |
+| add | `int32` | `&` | `&` |
+| add | `int32` | `*` | `*` |
+| add | `int64` | `int64` | `int64` |
+| add | `native int` | `int32` | `native int` |
+| add | `native int` | `native int` | `native int` |
+| add | `native int` | `&` | `&` |
+| add | `native int` | `*` | `*` |
+| add | `F` | `F` | `F` |
+| add | `&` | `int32` | `&` |
+| add | `&` | `native int` | `&` |
+| add | `*` | `int32` | `*` |
+| add | `*` | `native int` | `*` |
The following method overload can use the `add` opcode:
--
+-
]]>
@@ -205,13 +205,13 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; `value1` is added to `value2` with a check for overflow.
+3. `value2` and `value1` are popped from the stack; `value1` is added to `value2` with a check for overflow.
-4. The result is pushed onto the stack.
+4. The result is pushed onto the stack.
is thrown if the result is not represented in the result type.
@@ -238,7 +238,7 @@
The following method overload can use the `add.ovf` opcode:
--
+-
]]>
@@ -295,13 +295,13 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; `value1` is added to `value2` with a check for overflow.
+3. `value2` and `value1` are popped from the stack; `value1` is added to `value2` with a check for overflow.
-4. The result is pushed onto the stack.
+4. The result is pushed onto the stack.
is thrown if the result is not represented in the result type.
@@ -328,7 +328,7 @@
The following method overload can use the `add.ovf.un` opcode:
--
+-
]]>
@@ -385,13 +385,13 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value1` and `value2` are popped from the stack; the bitwise AND of the two values is computed.
+3. `value1` and `value2` are popped from the stack; the bitwise AND of the two values is computed.
-4. The result is pushed onto the stack.
+4. The result is pushed onto the stack.
The `and` instruction computes the bitwise AND of the top two values on the stack and leaves the result on the stack.
@@ -399,7 +399,7 @@
The following method overload can use the `and` opcode:
--
+-
]]>
@@ -460,7 +460,7 @@
The following method overload can use the `arglist` opcode:
--
+-
]]>
@@ -517,11 +517,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is equal to `value2`, the branch operation is performed.
The `beq` instruction transfers control to the specified target instruction if `value1` is equal to `value2`. The effect is the same as performing a `ceq` instruction followed by a `brtrue` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -533,7 +533,7 @@
The following method overload can use the `beq` opcode:
--
+-
]]>
@@ -590,11 +590,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is equal to `value2`, the branch operation is performed.
The `beq.s` instruction transfers control to the specified target instruction if `value1` is equal to `value2`. The effect is the same as performing a `ceq` instruction followed by a `brtrue` branch to the specific target instruction. The target instruction is represented as a 1-byte signed offset from the beginning of the instruction following the current instruction.
@@ -606,7 +606,7 @@
The following method overload can use the `beq.s` opcode:
--
+-
]]>
@@ -663,11 +663,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is greater than or equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is greater than or equal to `value2`, the branch operation is performed.
The `bge` instruction transfers control to the specified target instruction if `value1` is greater than or equal to `value2`. The effect is identical to performing a `clt` instruction (`clt.un` for floats) followed by a `brfalse` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -675,7 +675,7 @@
The following method overload can use the `bge` opcode:
--
+-
]]>
@@ -732,11 +732,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is greater than or equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is greater than or equal to `value2`, the branch operation is performed.
The `bge.s` instruction transfers control to the specified target instruction if `value1` is greater than or equal to `value2`. The effect is identical to performing a `clt` instruction (`clt.un` for floats) followed by a `brfalse` branch to the specific target instruction. The target instruction is represented as a 1-byte signed offset from the beginning of the instruction following the current instruction.
@@ -744,7 +744,7 @@
The following method overload can use the `bge.s` opcode:
--
+-
]]>
@@ -801,11 +801,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is greater than or equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is greater than or equal to `value2`, the branch operation is performed.
The `bge.un` instruction transfers control to the specified target instruction if `value1` is greater than or equal to `value2`, when compared using unsigned integer or unordered float values. The effect is identical to performing a `clt.un` instruction (`clt` for floats) followed by a `brfalse` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -813,7 +813,7 @@
The following method overload can use the `bge.un` opcode:
--
+-
]]>
@@ -870,11 +870,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is greater than or equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is greater than or equal to `value2`, the branch operation is performed.
The `bge.un.s` instruction transfers control to the specified target instruction if `value1` is greater than or equal to `value2`, when compared using unsigned integer or unordered float values. The effect is identical to performing a `clt.un` instruction (`clt` for floats) followed by a `brfalse` branch to the specific target instruction. The target instruction is represented as a 1-byte signed offset from the beginning of the instruction following the current instruction.
@@ -882,7 +882,7 @@
The following method overload can use the `bge.un.s` opcode:
--
+-
]]>
@@ -939,11 +939,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is greater than `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is greater than `value2`, the branch operation is performed.
The `bgt` instruction transfers control to the specified target instruction if `value1` is greater than `value2`. The effect is identical to performing a `cgt` instruction followed by a `brtrue` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -951,7 +951,7 @@
The following method overload can use the `bgt` opcode:
--
+-
]]>
@@ -1008,11 +1008,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is greater than `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is greater than `value2`, the branch operation is performed.
The `bgt.s` instruction transfers control to the specified target instruction if `value1` is greater than `value2`. The effect is identical to performing a `cgt` instruction followed by a `brtrue` branch to the specific target instruction. The target instruction is represented as a 1-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1020,7 +1020,7 @@
The following method overload can use the `bgt.s` opcode:
--
+-
]]>
@@ -1077,11 +1077,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is greater than `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is greater than `value2`, the branch operation is performed.
The `bgt.un` instruction transfers control to the specified target instruction if `value1` is greater than `value2`, when compared using unsigned integer or unordered float values. The effect is identical to performing a `cgt.un` instruction followed by a `brtrue` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1089,7 +1089,7 @@
The following method overload can use the `bgt.un` opcode:
--
+-
]]>
@@ -1146,11 +1146,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is greater than `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is greater than `value2`, the branch operation is performed.
The `bgt.un.s` instruction transfers control to the specified target instruction if `value1` is greater than `value2`, when compared using unsigned integer or unordered float values. The effect is identical to performing a `cgt.un` instruction followed by a `brtrue` branch to the specific target instruction. The target instruction is represented as a 1-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1158,7 +1158,7 @@
The following method overload can use the `bgt.un.s` opcode:
--
+-
]]>
@@ -1215,11 +1215,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is less than or equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is less than or equal to `value2`, the branch operation is performed.
The `ble` instruction transfers control to the specified target instruction if `value1` is less than or equal to `value2`. The effect is identical to performing a `cgt` instruction (`cgt.un` for floats) followed by a `brfalse` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1227,7 +1227,7 @@
The following method overload can use the `ble` opcode:
--
+-
]]>
@@ -1284,11 +1284,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is less than or equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is less than or equal to `value2`, the branch operation is performed.
The `ble.s` instruction transfers control to the specified target instruction if `value1` is less than or equal to `value2`. The effect is identical to performing a `cgt` instruction (`cgt.un` for floats) instruction followed by a`brfalse` branch to the specific target instruction. The target instruction is represented as a 1-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1296,7 +1296,7 @@
The following method overload can use the `ble.s` opcode:
--
+-
]]>
@@ -1353,11 +1353,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is less than or equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is less than or equal to `value2`, the branch operation is performed.
The `ble.un` instruction transfers control to the specified target instruction if `value1` is less than or equal to `value2`, when compared using unsigned integer or unordered float values. The effect is identical to performing a `cgt.un` instruction (`cgt` for floats) followed by a `brfalse` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1365,7 +1365,7 @@
The following method overload can use the `ble.un` opcode:
--
+-
]]>
@@ -1422,11 +1422,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is less than or equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is less than or equal to `value2`, the branch operation is performed.
The `ble.un.s` instruction transfers control to the specified target instruction if `value1` is less than or equal to `value2`, when compared using unsigned integer or unordered float values. The effect is identical to performing a `cgt.un` instruction (`cgt` for floats) followed by a `brfalse` branch to the specific target instruction. The target instruction is represented as a 1-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1434,7 +1434,7 @@
The following method overload can use the `ble.un.s` opcode:
--
+-
]]>
@@ -1491,11 +1491,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is less than `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is less than `value2`, the branch operation is performed.
The `blt` instruction transfers control to the specified target instruction if `value1` is less than or equal to `value2`. The effect is identical to performing a `clt` instruction followed by a `brtrue` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1503,7 +1503,7 @@
The following method overload can use the `blt` opcode:
--
+-
]]>
@@ -1560,11 +1560,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is less than `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is less than `value2`, the branch operation is performed.
The `blt.s` instruction transfers control to the specified target instruction if `value1` is less than `value2`. The effect is identical to performing a `clt` instruction followed by a `brtrue` branch to the specific target instruction. The target instruction is represented as a 1-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1572,7 +1572,7 @@
The following method overload can use the `blt.s` opcode:
--
+-
]]>
@@ -1629,11 +1629,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is less than `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is less than `value2`, the branch operation is performed.
The `blt.un` instruction transfers control to the specified target instruction if `value1` is less than `value2`, when compared using unsigned integer or unordered float values. The effect is identical to performing a `clt.un` instruction followed by a `brtrue` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1641,7 +1641,7 @@
The following method overload can use the `blt.un` opcode:
--
+-
]]>
@@ -1698,11 +1698,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is less than `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is less than `value2`, the branch operation is performed.
The `blt.un` instruction transfers control to the specified target instruction if `value1` is less than `value2`, when compared using unsigned integer or unordered float values. The effect is identical to performing a `clt.un` instruction followed by a `brtrue` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1710,7 +1710,7 @@
The following method overload can use the `blt.un.s` opcode:
--
+-
]]>
@@ -1767,11 +1767,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is not equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is not equal to `value2`, the branch operation is performed.
The `bne.un` instruction transfers control to the specified target instruction if `value1` is not equal to `value2`, when compared using unsigned integer or unordered float values. The effect is identical to performing a `ceq` instruction followed by a `brfalse` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1779,7 +1779,7 @@
The following method overload can use the `bne.un` opcode:
--
+-
]]>
@@ -1836,11 +1836,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; if `value1` is not equal to `value2`, the branch operation is performed.
+3. `value2` and `value1` are popped from the stack; if `value1` is not equal to `value2`, the branch operation is performed.
The `bne.un` instruction transfers control to the specified target instruction if `value1` is not equal to `value2`, when compared using unsigned integer or unordered float values. The effect is identical to performing a `ceq` instruction followed by a `brfalse` branch to the specific target instruction. The target instruction is represented as a 4-byte signed offset from the beginning of the instruction following the current instruction.
@@ -1848,7 +1848,7 @@
The following method overload can use the `bne.un.s` opcode:
--
+-
]]>
@@ -1905,11 +1905,11 @@
The stack transitional behavior, in sequential order, is:
-1. A value type is pushed onto the stack.
+1. A value type is pushed onto the stack.
-2. The value type is popped from the stack; the `box` operation is performed.
+2. The value type is popped from the stack; the `box` operation is performed.
-3. An object reference to the resulting "boxed" value type is pushed onto the stack.
+3. An object reference to the resulting "boxed" value type is pushed onto the stack.
A value type has two separate representations within the Common Language Infrastructure (CLI):
@@ -1925,7 +1925,7 @@
The following method overload can use the `box` opcode:
--
+-
]]>
@@ -1988,7 +1988,7 @@
The following method overload can use the `br` opcode:
--
+-
]]>
@@ -2051,7 +2051,7 @@
The following method overload can use the `br.s` opcode:
--
+-
]]>
@@ -2116,7 +2116,7 @@
The following method overload can use the `break` opcode:
--
+-
]]>
@@ -2173,9 +2173,9 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack by a previous operation.
+1. `value` is pushed onto the stack by a previous operation.
-2. `value` is popped from the stack; if `value` is `false`, branch to `target`.
+2. `value` is popped from the stack; if `value` is `false`, branch to `target`.
The `brfalse` instruction (and its aliases `brnull` and `brzero`) transfers control to the specified target instruction if `value` (of type `int32`, `int64`, object reference `O`, managed pointer `&`, transient pointer `*`, `native int`) is zero (`false`). If `value` is non-zero (`true`) execution continues at the next instruction.
@@ -2185,7 +2185,7 @@
The following method overload can use the `brfalse` opcode:
--
+-
]]>
@@ -2242,9 +2242,9 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack by a previous operation.
+1. `value` is pushed onto the stack by a previous operation.
-2. `value` is popped from the stack; if `value` is `false`, branch to `target`.
+2. `value` is popped from the stack; if `value` is `false`, branch to `target`.
The `brfalse.s` instruction (and its aliases `brnull` and `brzero`) transfers control to the specified target instruction if `value` (of type `int32`, `int64`, object reference `O`, managed pointer `&`, transient pointer `*`, `native int`) is zero (`false`). If `value` is non-zero (`true`) execution continues at the next instruction.
@@ -2254,7 +2254,7 @@
The following method overload can use the `brfalse.s` opcode:
--
+-
]]>
@@ -2311,9 +2311,9 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack by a previous operation.
+1. `value` is pushed onto the stack by a previous operation.
-2. `value` is popped from the stack; if `value` is `true`, branch to `target`.
+2. `value` is popped from the stack; if `value` is `true`, branch to `target`.
The `brtrue` instruction transfers control to the specified target instruction if `value` (type `native int`) is nonzero (`true`). If `value` is zero (`false`) execution continues at the next instruction.
@@ -2325,7 +2325,7 @@
The following method overload can use the `brtrue` opcode:
--
+-
]]>
@@ -2382,9 +2382,9 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack by a previous operation.
+1. `value` is pushed onto the stack by a previous operation.
-2. `value` is popped from the stack; if `value` is `true`, branch to `target`.
+2. `value` is popped from the stack; if `value` is `true`, branch to `target`.
The `brtrue.s` instruction transfers control to the specified target instruction if `value` (type `native int`) is nonzero (`true`). If `value` is zero (`false`) execution continues at the next instruction.
@@ -2396,7 +2396,7 @@
The following method overload can use the `brtrue.s` opcode:
--
+-
]]>
@@ -2453,11 +2453,11 @@
The stack transitional behavior, in sequential order, is:
-1. Method arguments `arg1` through `argN` are pushed onto the stack.
+1. Method arguments `arg1` through `argN` are pushed onto the stack.
-2. Method arguments `arg1` through `argN` are popped from the stack; the method call is performed with these arguments and control is transferred to the method referred to by the method descriptor. When complete, a return value is generated by the callee method and sent to the caller.
+2. Method arguments `arg1` through `argN` are popped from the stack; the method call is performed with these arguments and control is transferred to the method referred to by the method descriptor. When complete, a return value is generated by the callee method and sent to the caller.
-3. The return value is pushed onto the stack.
+3. The return value is pushed onto the stack.
The `call` instruction calls the method indicated by the method descriptor passed with the instruction. The method descriptor is a metadata token that indicates the method to call and the number, type, and order of the arguments that have been placed on the stack to be passed to that method as well as the calling convention to be used. The `call` instruction can be immediately preceded by a `tail` () prefix instruction to specify that the current method state should be released before transferring control. If the call transfers control to a method of higher trust than the origin method, the stack frame is not released. Instead, the execution continues silently as if the `tail` had not been supplied. The metadata token carries sufficient information to determine whether the call is to a static method, an instance method, a virtual method, or a global function. In all of these cases the destination address is determined entirely from the method descriptor (contrast this with the instruction for calling virtual methods, where the destination address also depends upon the runtime type of the instance reference pushed before the ).
@@ -2476,11 +2476,11 @@
The following method overloads can use the `call` opcode:
--
+-
--
+-
--
+-
> [!NOTE]
> The method is provided for `varargs` calls. Use the method for normal calls.
@@ -2540,13 +2540,13 @@
The stack transitional behavior, in sequential order, is:
-1. Method arguments `arg1` through `argN` are pushed onto the stack.
+1. Method arguments `arg1` through `argN` are pushed onto the stack.
-2. The method entry pointer is pushed onto the stack.
+2. The method entry pointer is pushed onto the stack.
-3. Method arguments `arg1` through `argN` and the method entry pointer are popped from the stack; the call to the method is performed. When complete, a return value is generated by the callee method and sent to the caller.
+3. Method arguments `arg1` through `argN` and the method entry pointer are popped from the stack; the call to the method is performed. When complete, a return value is generated by the callee method and sent to the caller.
-4. The return value is pushed onto the stack.
+4. The return value is pushed onto the stack.
The `calli` instruction calls the method entry pointer with the arguments `arg1` through `argN`. The types of these arguments are described by the specific calling convention (`callSiteDesc`). The `calli` instruction may be immediately preceded by a `tail` prefix () to specify that the current method state should be released before transferring control. If the call would transfer control to a method of higher trust than the origin method the stack frame will not be released; instead, the execution will continue silently as if the `tail` had not been supplied.
@@ -2560,9 +2560,9 @@
The following methods can be used to perform a `calli` instruction on the stack. Note that `calli` should be called through the below methods rather than using the class to place the instruction directly on the stack.
-- for calls using a managed calling convention.
+- for calls using a managed calling convention.
-- for calls using an unmanaged calling convention.
+- for calls using an unmanaged calling convention.
]]>
@@ -2619,13 +2619,13 @@
The stack transitional behavior, in sequential order, is:
-1. An object reference `obj` is pushed onto the stack.
+1. An object reference `obj` is pushed onto the stack.
-2. Method arguments `arg1` through `argN` are pushed onto the stack.
+2. Method arguments `arg1` through `argN` are pushed onto the stack.
-3. Method arguments `arg1` through `argN` and the object reference `obj` are popped from the stack; the method call is performed with these arguments and control is transferred to the method in `obj` referred to by the method metadata token. When complete, a return value is generated by the callee method and sent to the caller.
+3. Method arguments `arg1` through `argN` and the object reference `obj` are popped from the stack; the method call is performed with these arguments and control is transferred to the method in `obj` referred to by the method metadata token. When complete, a return value is generated by the callee method and sent to the caller.
-4. The return value is pushed onto the stack.
+4. The return value is pushed onto the stack.
The `callvirt` instruction calls a late-bound method on an object. That is, the method is chosen based on the runtime type of `obj` rather than the compile-time class visible in the method pointer. `Callvirt` can be used to call both virtual and instance methods. The `callvirt` instruction may be immediately preceded by a `tail` () prefix to specify that the current stack frame should be released before transferring control. If the call would transfer control to a method of higher trust than the original method the stack frame will not be released.
@@ -2648,9 +2648,9 @@
The following method overload can use the `callvirt` opcode:
--
+-
--
+-
]]>
@@ -2707,11 +2707,11 @@
The stack transitional behavior, in sequential order, is:
-1. An object reference is pushed onto the stack.
+1. An object reference is pushed onto the stack.
-2. The object reference is popped from the stack; the referenced object is cast as the specified `class`.
+2. The object reference is popped from the stack; the referenced object is cast as the specified `class`.
-3. If successful, a new object reference is pushed onto the stack.
+3. If successful, a new object reference is pushed onto the stack.
The `castclass` instruction attempts to cast the object reference (type `O`) atop the stack to a specified class. The new class is specified by a metadata token indicating the desired class. If the class of the object on the top of the stack does not implement the new class (assuming the new class is an interface) and is not a derived class of the new class then an is thrown. If the object reference is a null reference, `castclass` succeeds and returns the new object as a null reference.
@@ -2721,7 +2721,7 @@
The following method overload can use the `castclass` opcode:
--
+-
]]>
@@ -2778,13 +2778,13 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; `value1` is compared to `value2`.
+3. `value2` and `value1` are popped from the stack; `value1` is compared to `value2`.
-4. If `value1` is equal to `value2`, 1 is pushed onto the stack; otherwise 0 is pushed onto the stack.
+4. If `value1` is equal to `value2`, 1 is pushed onto the stack; otherwise 0 is pushed onto the stack.
The `ceq` instruction compares `value1` and `value2`. If `value1` is equal to `value2`, then 1 (of type `int32`) is pushed on the stack. Otherwise 0 (of type `int32`) is pushed on the stack.
@@ -2792,7 +2792,7 @@
The following method overload can use the `ceq` opcode:
--
+-
]]>
@@ -2849,13 +2849,13 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; `cgt` tests if `value1` is greater than `value2`.
+3. `value2` and `value1` are popped from the stack; `cgt` tests if `value1` is greater than `value2`.
-4. If `value1` is greater than `value2`, 1 is pushed onto the stack; otherwise 0 is pushed onto the stack.
+4. If `value1` is greater than `value2`, 1 is pushed onto the stack; otherwise 0 is pushed onto the stack.
The `cgt` instruction compares `value1` and `value2`. If `value1` is strictly greater than `value2`, then an `int32` value of 1 is pushed on the stack. Otherwise, an `int32` value of 0 is pushed on the stack.
@@ -2863,7 +2863,7 @@
The following method overload can use the `cgt` opcode:
--
+-
]]>
@@ -2920,13 +2920,13 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; `cgt.un` tests if `value1` is greater than `value2`.
+3. `value2` and `value1` are popped from the stack; `cgt.un` tests if `value1` is greater than `value2`.
-4. If `value1` is greater than `value2`, 1 is pushed onto the stack; otherwise 0 is pushed onto the stack.
+4. If `value1` is greater than `value2`, 1 is pushed onto the stack; otherwise 0 is pushed onto the stack.
An `int32` value of 1 is pushed on the stack if any of the following is `true` :
@@ -2938,7 +2938,7 @@
The following method overload can use the `cgt.un` opcode:
--
+-
]]>
@@ -2995,11 +2995,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the `ckfinite` instruction is performed on it.
+2. `value` is popped from the stack and the `ckfinite` instruction is performed on it.
-3. `value` is pushed back onto the stack if no exception is thrown.
+3. `value` is pushed back onto the stack if no exception is thrown.
The `ckfinite instruction` throws if `value` (a floating-point number) is either a "not a number" value (NaN) or a `+-` infinity value. `Ckfinite` leaves the value on the stack if no exception is thrown. Execution is unspecified if `value` is not a floating-point number.
@@ -3009,7 +3009,7 @@
The following method overload can use the `ckfinite` opcode:
--
+-
]]>
@@ -3066,13 +3066,13 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; `clt` tests if `value1` is less than `value2`.
+3. `value2` and `value1` are popped from the stack; `clt` tests if `value1` is less than `value2`.
-4. If `value1` is less than `value2`, 1 is pushed onto the stack; otherwise 0 is pushed onto the stack.
+4. If `value1` is less than `value2`, 1 is pushed onto the stack; otherwise 0 is pushed onto the stack.
The `clt` instruction compares `value1` and `value2`. If `value1` is strictly less than `value2`, then an `int32` value of 1 is pushed on the stack. Otherwise, an `int32` value of 0 is pushed on the stack.
@@ -3080,7 +3080,7 @@
The following method overload can use the `clt` opcode:
--
+-
]]>
@@ -3137,17 +3137,17 @@
The stack transitional behavior, in sequential order, is:
-1. `value1` is pushed onto the stack.
+1. `value1` is pushed onto the stack.
-2. `value2` is pushed onto the stack.
+2. `value2` is pushed onto the stack.
-3. `value2` and `value1` are popped from the stack; `clt.un` tests if `value1` is less than `value2`.
+3. `value2` and `value1` are popped from the stack; `clt.un` tests if `value1` is less than `value2`.
-4. If `value1` is less than `value2`, 1 is pushed onto the stack; otherwise 0 is pushed onto the stack.
+4. If `value1` is less than `value2`, 1 is pushed onto the stack; otherwise 0 is pushed onto the stack.
The `clt.un` instruction compares `value1` and `value2`. An `int32` value of 1 is pushed on the stack if any of the following is true:
-- `value1` is strictly less than `value2` (as for `clt`).
+- `value1` is strictly less than `value2` (as for `clt`).
- For floating-point numbers, `value1` is not ordered with respect to `value2`.
@@ -3157,7 +3157,7 @@
The following method overload can use the `clt.un` opcode:
--
+-
]]>
@@ -3215,9 +3215,9 @@
The state of the MSIL stack at this point must be as follows:
-1. A managed pointer, `ptr`, is pushed onto the stack. The type of `ptr` must be a managed pointer (`&`) to `thisType`. Note that this is different from the case of an unprefixed `callvirt` instruction, which expects a reference of `thisType`.
+1. A managed pointer, `ptr`, is pushed onto the stack. The type of `ptr` must be a managed pointer (`&`) to `thisType`. Note that this is different from the case of an unprefixed `callvirt` instruction, which expects a reference of `thisType`.
-2. Method arguments `arg1` through `argN` are pushed onto the stack, just as with an unprefixed `callvirt` instruction.
+2. Method arguments `arg1` through `argN` are pushed onto the stack, just as with an unprefixed `callvirt` instruction.
The `constrained` prefix is designed to allow `callvirt` instructions to be made in a uniform way independent of whether `thisType` is a value type or a reference type.
@@ -3241,7 +3241,7 @@
The following method overload can use the `constrained` opcode:
--
+-
]]>
@@ -3298,11 +3298,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.i` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -3314,7 +3314,7 @@
The following method overload can use the `conv.i` opcode:
--
+-
]]>
@@ -3371,11 +3371,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.i1` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -3387,7 +3387,7 @@
The following method overload can use the `conv.i1` opcode:
--
+-
]]>
@@ -3444,11 +3444,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.i2` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -3460,7 +3460,7 @@
The following method overload can use the `conv.i2` opcode:
--
+-
]]>
@@ -3517,11 +3517,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.i4` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -3533,7 +3533,7 @@
The following method overload can use the `conv.i4` opcode:
--
+-
]]>
@@ -3590,11 +3590,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.i8` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -3606,7 +3606,7 @@
The following method overload can use the `conv.i8` opcode:
--
+-
]]>
@@ -3663,11 +3663,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.i` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -3677,7 +3677,7 @@
The following method overload can use the `conv.ovf.i` opcode:
--
+-
]]>
@@ -3734,11 +3734,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.i.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -3748,7 +3748,7 @@
The following method overload can use the `conv.ovf.i.un` opcode:
--
+-
]]>
@@ -3805,11 +3805,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.i1` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -3819,7 +3819,7 @@
The following method overload can use the `conv.ovf.i1` opcode:
--
+-
]]>
@@ -3876,11 +3876,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.i1.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -3890,7 +3890,7 @@
The following method overload can use the `conv.ovf.i1.un` opcode:
--
+-
]]>
@@ -3947,11 +3947,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.i2` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -3961,7 +3961,7 @@
The following method overload can use the `conv.ovf.i2` opcode:
--
+-
]]>
@@ -4018,11 +4018,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.i2.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4032,7 +4032,7 @@
The following method overload can use the `conv.ovf.i2.un` opcode:
--
+-
]]>
@@ -4089,11 +4089,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.i4` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4103,7 +4103,7 @@
The following method overload can use the `conv.ovf.i4` opcode:
--
+-
]]>
@@ -4160,11 +4160,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.i4.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4174,7 +4174,7 @@
The following method overload can use the `conv.ovf.i4.un` opcode:
--
+-
]]>
@@ -4231,11 +4231,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.i8` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4245,7 +4245,7 @@
The following method overload can use the `conv.ovf.i8` opcode:
--
+-
]]>
@@ -4302,11 +4302,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.i8.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4316,7 +4316,7 @@
The following method overload can use the `conv.ovf.i8.un` opcode:
--
+-
]]>
@@ -4373,11 +4373,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.u` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4387,7 +4387,7 @@
The following method overload can use the `conv.ovf.u` opcode:
--
+-
]]>
@@ -4444,11 +4444,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.u.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4458,7 +4458,7 @@
The following method overload can use the `conv.uvf.u.un` opcode:
--
+-
]]>
@@ -4515,11 +4515,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.u1` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4529,7 +4529,7 @@
The following method overload can use the `conv.ovf.u1` opcode:
--
+-
]]>
@@ -4586,11 +4586,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.u1.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4600,7 +4600,7 @@
The following method overload can use the `conv.ovf.u1.un` opcode:
--
+-
]]>
@@ -4657,11 +4657,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.u2` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4671,7 +4671,7 @@
The following method overload can use the `conv.ovf.u2` opcode:
--
+-
]]>
@@ -4728,11 +4728,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.u2.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4742,7 +4742,7 @@
The following method overload can use the `conv.ovf.u2.un` opcode:
--
+-
]]>
@@ -4799,11 +4799,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.u4` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4813,7 +4813,7 @@
The following method overload can use the `conv.ovf.u4` opcode:
--
+-
]]>
@@ -4870,11 +4870,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.u4.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4884,7 +4884,7 @@
The following method overload can use the `conv.ovf.u4.un` opcode:
--
+-
]]>
@@ -4941,11 +4941,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.u8` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -4955,7 +4955,7 @@
The following method overload can use the `conv.ovf.u8` opcode:
--
+-
]]>
@@ -5012,11 +5012,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
+2. `value` is popped from the stack and the conversion operation is attempted. If overflow occurs, an exception is thrown.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.ovf.u8.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and places that converted value on the top of the stack. If the value is too large or too small to be represented by the target type, an exception is thrown.
@@ -5026,7 +5026,7 @@
The following method overload can use the `conv.ovf.u8.un` opcode:
--
+-
]]>
@@ -5083,11 +5083,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.r.un` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -5099,7 +5099,7 @@
The following method overload can use the `conv.r.un` opcode:
--
+-
]]>
@@ -5156,11 +5156,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.r4` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -5172,7 +5172,7 @@
The following method overload can use the `conv.r4` opcode:
--
+-
]]>
@@ -5229,11 +5229,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.r8` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -5245,7 +5245,7 @@
The following method overload can use the `conv.r8` opcode:
--
+-
]]>
@@ -5302,11 +5302,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.u` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -5318,7 +5318,7 @@
The following method overload can use the `conv.u` opcode:
--
+-
]]>
@@ -5375,11 +5375,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.u1` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -5391,7 +5391,7 @@
The following method overload can use the `conv.u1` opcode:
--
+-
]]>
@@ -5448,11 +5448,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.u2` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -5464,7 +5464,7 @@
The following method overload can use the `conv.u2` opcode:
--
+-
]]>
@@ -5521,11 +5521,11 @@
The stack transitional behavior, in sequential order, is:
-1. `value` is pushed onto the stack.
+1. `value` is pushed onto the stack.
-2. `value` is popped from the stack and the conversion operation is attempted.
+2. `value` is popped from the stack and the conversion operation is attempted.
-3. If the conversion is successful, the resulting value is pushed onto the stack.
+3. If the conversion is successful, the resulting value is pushed onto the stack.
The `conv.u4` opcode converts the `value` on top of the stack to the type specified in the opcode, and leave that converted value on the top of the stack. Integer values of less than 4 bytes are extended to `int32` when they are loaded onto the evaluation stack (unless `conv.i` or `conv.u` is used, in which case the result is also `native int`). Floating-point values are converted to the `F` type.
@@ -5537,7 +5537,7 @@
The following