@@ -27,15 +27,14 @@ partial struct HandleCallAction
2727 readonly FlowAnnotations _annotations ;
2828 readonly RequireDynamicallyAccessedMembersAction _requireDynamicallyAccessedMembersAction ;
2929
30- public bool Invoke ( MethodProxy calledMethod , MultiValue instanceValue , IReadOnlyList < MultiValue > argumentValues , out MultiValue methodReturnValue , out IntrinsicId intrinsicId )
30+ public bool Invoke ( MethodProxy calledMethod , MultiValue instanceValue , IReadOnlyList < MultiValue > argumentValues , IntrinsicId intrinsicId , out MultiValue methodReturnValue )
3131 {
3232 MultiValue ? returnValue = null ;
3333
3434 bool requiresDataFlowAnalysis = _annotations . MethodRequiresDataFlowAnalysis ( calledMethod ) ;
3535 var annotatedMethodReturnValue = _annotations . GetMethodReturnValue ( calledMethod ) ;
3636 Debug . Assert ( requiresDataFlowAnalysis || annotatedMethodReturnValue . DynamicallyAccessedMemberTypes == DynamicallyAccessedMemberTypes . None ) ;
3737
38- intrinsicId = Intrinsics . GetIntrinsicIdForMethod ( calledMethod ) ;
3938 switch ( intrinsicId ) {
4039 case IntrinsicId . IntrospectionExtensions_GetTypeInfo :
4140 Debug . Assert ( instanceValue . IsEmpty ( ) ) ;
@@ -251,24 +250,25 @@ GenericParameterValue genericParam
251250 // GetNestedTypes (BindingFlags)
252251 // GetMembers (BindingFlags)
253252 //
254- case var callType when ( callType == IntrinsicId . Type_GetConstructors || callType == IntrinsicId . Type_GetMethods || callType == IntrinsicId . Type_GetFields ||
255- callType == IntrinsicId . Type_GetProperties || callType == IntrinsicId . Type_GetEvents || callType == IntrinsicId . Type_GetNestedTypes || callType == IntrinsicId . Type_GetMembers )
256- && calledMethod . IsDeclaredOnType ( "System.Type" )
257- && calledMethod . HasParameterOfType ( 0 , "System.Reflection.BindingFlags" )
258- && ! calledMethod . IsStatic ( ) : {
259-
253+ case IntrinsicId . Type_GetConstructors__BindingFlags :
254+ case IntrinsicId . Type_GetMethods__BindingFlags :
255+ case IntrinsicId . Type_GetFields__BindingFlags :
256+ case IntrinsicId . Type_GetProperties__BindingFlags :
257+ case IntrinsicId . Type_GetEvents__BindingFlags :
258+ case IntrinsicId . Type_GetNestedTypes__BindingFlags :
259+ case IntrinsicId . Type_GetMembers__BindingFlags : {
260260 BindingFlags ? bindingFlags ;
261261 bindingFlags = GetBindingFlagsFromValue ( argumentValues [ 0 ] ) ;
262262 DynamicallyAccessedMemberTypes memberTypes ;
263263 if ( BindingFlagsAreUnsupported ( bindingFlags ) ) {
264- memberTypes = callType switch {
265- IntrinsicId . Type_GetConstructors => DynamicallyAccessedMemberTypes . PublicConstructors | DynamicallyAccessedMemberTypes . NonPublicConstructors ,
266- IntrinsicId . Type_GetMethods => DynamicallyAccessedMemberTypes . PublicMethods | DynamicallyAccessedMemberTypes . NonPublicMethods ,
267- IntrinsicId . Type_GetEvents => DynamicallyAccessedMemberTypes . PublicEvents | DynamicallyAccessedMemberTypes . NonPublicEvents ,
268- IntrinsicId . Type_GetFields => DynamicallyAccessedMemberTypes . PublicFields | DynamicallyAccessedMemberTypes . NonPublicFields ,
269- IntrinsicId . Type_GetProperties => DynamicallyAccessedMemberTypes . PublicProperties | DynamicallyAccessedMemberTypes . NonPublicProperties ,
270- IntrinsicId . Type_GetNestedTypes => DynamicallyAccessedMemberTypes . PublicNestedTypes | DynamicallyAccessedMemberTypes . NonPublicNestedTypes ,
271- IntrinsicId . Type_GetMembers => DynamicallyAccessedMemberTypes . PublicConstructors | DynamicallyAccessedMemberTypes . NonPublicConstructors |
264+ memberTypes = intrinsicId switch {
265+ IntrinsicId . Type_GetConstructors__BindingFlags => DynamicallyAccessedMemberTypes . PublicConstructors | DynamicallyAccessedMemberTypes . NonPublicConstructors ,
266+ IntrinsicId . Type_GetMethods__BindingFlags => DynamicallyAccessedMemberTypes . PublicMethods | DynamicallyAccessedMemberTypes . NonPublicMethods ,
267+ IntrinsicId . Type_GetEvents__BindingFlags => DynamicallyAccessedMemberTypes . PublicEvents | DynamicallyAccessedMemberTypes . NonPublicEvents ,
268+ IntrinsicId . Type_GetFields__BindingFlags => DynamicallyAccessedMemberTypes . PublicFields | DynamicallyAccessedMemberTypes . NonPublicFields ,
269+ IntrinsicId . Type_GetProperties__BindingFlags => DynamicallyAccessedMemberTypes . PublicProperties | DynamicallyAccessedMemberTypes . NonPublicProperties ,
270+ IntrinsicId . Type_GetNestedTypes__BindingFlags => DynamicallyAccessedMemberTypes . PublicNestedTypes | DynamicallyAccessedMemberTypes . NonPublicNestedTypes ,
271+ IntrinsicId . Type_GetMembers__BindingFlags => DynamicallyAccessedMemberTypes . PublicConstructors | DynamicallyAccessedMemberTypes . NonPublicConstructors |
272272 DynamicallyAccessedMemberTypes . PublicEvents | DynamicallyAccessedMemberTypes . NonPublicEvents |
273273 DynamicallyAccessedMemberTypes . PublicFields | DynamicallyAccessedMemberTypes . NonPublicFields |
274274 DynamicallyAccessedMemberTypes . PublicMethods | DynamicallyAccessedMemberTypes . NonPublicMethods |
@@ -277,14 +277,14 @@ GenericParameterValue genericParam
277277 _ => throw new ArgumentException ( $ "Reflection call '{ calledMethod . GetDisplayName ( ) } ' inside '{ GetContainingSymbolDisplayName ( ) } ' is of unexpected member type.") ,
278278 } ;
279279 } else {
280- memberTypes = callType switch {
281- IntrinsicId . Type_GetConstructors => GetDynamicallyAccessedMemberTypesFromBindingFlagsForConstructors ( bindingFlags ) ,
282- IntrinsicId . Type_GetMethods => GetDynamicallyAccessedMemberTypesFromBindingFlagsForMethods ( bindingFlags ) ,
283- IntrinsicId . Type_GetEvents => GetDynamicallyAccessedMemberTypesFromBindingFlagsForEvents ( bindingFlags ) ,
284- IntrinsicId . Type_GetFields => GetDynamicallyAccessedMemberTypesFromBindingFlagsForFields ( bindingFlags ) ,
285- IntrinsicId . Type_GetProperties => GetDynamicallyAccessedMemberTypesFromBindingFlagsForProperties ( bindingFlags ) ,
286- IntrinsicId . Type_GetNestedTypes => GetDynamicallyAccessedMemberTypesFromBindingFlagsForNestedTypes ( bindingFlags ) ,
287- IntrinsicId . Type_GetMembers => GetDynamicallyAccessedMemberTypesFromBindingFlagsForMembers ( bindingFlags ) ,
280+ memberTypes = intrinsicId switch {
281+ IntrinsicId . Type_GetConstructors__BindingFlags => GetDynamicallyAccessedMemberTypesFromBindingFlagsForConstructors ( bindingFlags ) ,
282+ IntrinsicId . Type_GetMethods__BindingFlags => GetDynamicallyAccessedMemberTypesFromBindingFlagsForMethods ( bindingFlags ) ,
283+ IntrinsicId . Type_GetEvents__BindingFlags => GetDynamicallyAccessedMemberTypesFromBindingFlagsForEvents ( bindingFlags ) ,
284+ IntrinsicId . Type_GetFields__BindingFlags => GetDynamicallyAccessedMemberTypesFromBindingFlagsForFields ( bindingFlags ) ,
285+ IntrinsicId . Type_GetProperties__BindingFlags => GetDynamicallyAccessedMemberTypesFromBindingFlagsForProperties ( bindingFlags ) ,
286+ IntrinsicId . Type_GetNestedTypes__BindingFlags => GetDynamicallyAccessedMemberTypesFromBindingFlagsForNestedTypes ( bindingFlags ) ,
287+ IntrinsicId . Type_GetMembers__BindingFlags => GetDynamicallyAccessedMemberTypesFromBindingFlagsForMembers ( bindingFlags ) ,
288288 _ => throw new ArgumentException ( $ "Reflection call '{ calledMethod . GetDisplayName ( ) } ' inside '{ GetContainingSymbolDisplayName ( ) } ' is of unexpected member type.") ,
289289 } ;
290290 }
@@ -307,11 +307,9 @@ GenericParameterValue genericParam
307307 // GetProperty (string, Type, Type[], ParameterModifier[])
308308 // GetProperty (string, BindingFlags, Binder, Type, Type[], ParameterModifier[])
309309 //
310- case var fieldPropertyOrEvent when ( fieldPropertyOrEvent == IntrinsicId . Type_GetField || fieldPropertyOrEvent == IntrinsicId . Type_GetProperty || fieldPropertyOrEvent == IntrinsicId . Type_GetEvent )
311- && calledMethod . IsDeclaredOnType ( "System.Type" )
312- && calledMethod . HasParameterOfType ( 0 , "System.String" )
313- && ! calledMethod . IsStatic ( ) : {
314-
310+ case IntrinsicId . Type_GetField :
311+ case IntrinsicId . Type_GetProperty :
312+ case IntrinsicId . Type_GetEvent : {
315313 if ( instanceValue . IsEmpty ( ) || argumentValues [ 0 ] . IsEmpty ( ) ) {
316314 returnValue = MultiValueLattice . Top ;
317315 break ;
@@ -324,7 +322,7 @@ GenericParameterValue genericParam
324322 // Assume a default value for BindingFlags for methods that don't use BindingFlags as a parameter
325323 bindingFlags = BindingFlags . Instance | BindingFlags . Static | BindingFlags . Public ;
326324
327- DynamicallyAccessedMemberTypes memberTypes = fieldPropertyOrEvent switch {
325+ DynamicallyAccessedMemberTypes memberTypes = intrinsicId switch {
328326 IntrinsicId . Type_GetEvent => GetDynamicallyAccessedMemberTypesFromBindingFlagsForEvents ( bindingFlags ) ,
329327 IntrinsicId . Type_GetField => GetDynamicallyAccessedMemberTypesFromBindingFlagsForFields ( bindingFlags ) ,
330328 IntrinsicId . Type_GetProperty => GetDynamicallyAccessedMemberTypesFromBindingFlagsForProperties ( bindingFlags ) ,
@@ -336,7 +334,7 @@ GenericParameterValue genericParam
336334 if ( value is SystemTypeValue systemTypeValue ) {
337335 foreach ( var stringParam in argumentValues [ 0 ] ) {
338336 if ( stringParam is KnownStringValue stringValue && ! BindingFlagsAreUnsupported ( bindingFlags ) ) {
339- switch ( fieldPropertyOrEvent ) {
337+ switch ( intrinsicId ) {
340338 case IntrinsicId . Type_GetEvent :
341339 MarkEventsOnTypeHierarchy ( systemTypeValue . RepresentedType , stringValue . Contents , bindingFlags ) ;
342340 break ;
@@ -527,18 +525,18 @@ GenericParameterValue genericParam
527525 // static GetRuntimeMethod (this Type type, string name, Type[] parameters)
528526 // static GetRuntimeProperty (this Type type, string name)
529527 //
530- case var getRuntimeMember when getRuntimeMember == IntrinsicId . RuntimeReflectionExtensions_GetRuntimeEvent
531- || getRuntimeMember == IntrinsicId . RuntimeReflectionExtensions_GetRuntimeField
532- || getRuntimeMember == IntrinsicId . RuntimeReflectionExtensions_GetRuntimeMethod
533- || getRuntimeMember == IntrinsicId . RuntimeReflectionExtensions_GetRuntimeProperty : {
528+ case IntrinsicId . RuntimeReflectionExtensions_GetRuntimeEvent :
529+ case IntrinsicId . RuntimeReflectionExtensions_GetRuntimeField :
530+ case IntrinsicId . RuntimeReflectionExtensions_GetRuntimeMethod :
531+ case IntrinsicId . RuntimeReflectionExtensions_GetRuntimeProperty : {
534532
535533 if ( argumentValues [ 0 ] . IsEmpty ( ) || argumentValues [ 1 ] . IsEmpty ( ) ) {
536534 returnValue = MultiValueLattice . Top ;
537535 break ;
538536 }
539537
540538 BindingFlags bindingFlags = BindingFlags . Instance | BindingFlags . Static | BindingFlags . Public ;
541- DynamicallyAccessedMemberTypes requiredMemberTypes = getRuntimeMember switch {
539+ DynamicallyAccessedMemberTypes requiredMemberTypes = intrinsicId switch {
542540 IntrinsicId . RuntimeReflectionExtensions_GetRuntimeEvent => DynamicallyAccessedMemberTypes . PublicEvents ,
543541 IntrinsicId . RuntimeReflectionExtensions_GetRuntimeField => DynamicallyAccessedMemberTypes . PublicFields ,
544542 IntrinsicId . RuntimeReflectionExtensions_GetRuntimeMethod => DynamicallyAccessedMemberTypes . PublicMethods ,
@@ -552,7 +550,7 @@ GenericParameterValue genericParam
552550 if ( value is SystemTypeValue systemTypeValue ) {
553551 foreach ( var stringParam in argumentValues [ 1 ] ) {
554552 if ( stringParam is KnownStringValue stringValue ) {
555- switch ( getRuntimeMember ) {
553+ switch ( intrinsicId ) {
556554 case IntrinsicId . RuntimeReflectionExtensions_GetRuntimeEvent :
557555 MarkEventsOnTypeHierarchy ( systemTypeValue . RepresentedType , stringValue . Contents , bindingFlags ) ;
558556 break ;
@@ -642,8 +640,9 @@ GenericParameterValue genericParam
642640 // static Field (Expression, Type, String)
643641 // static Property (Expression, Type, String)
644642 //
645- case var fieldOrPropertyInstrinsic when fieldOrPropertyInstrinsic == IntrinsicId . Expression_Field || fieldOrPropertyInstrinsic == IntrinsicId . Expression_Property : {
646- DynamicallyAccessedMemberTypes memberTypes = fieldOrPropertyInstrinsic == IntrinsicId . Expression_Property
643+ case IntrinsicId . Expression_Field :
644+ case IntrinsicId . Expression_Property : {
645+ DynamicallyAccessedMemberTypes memberTypes = intrinsicId == IntrinsicId . Expression_Property
647646 ? DynamicallyAccessedMemberTypes . PublicProperties | DynamicallyAccessedMemberTypes . NonPublicProperties
648647 : DynamicallyAccessedMemberTypes . PublicFields | DynamicallyAccessedMemberTypes . NonPublicFields ;
649648
@@ -658,7 +657,7 @@ GenericParameterValue genericParam
658657 foreach ( var stringParam in argumentValues [ 2 ] ) {
659658 if ( stringParam is KnownStringValue stringValue ) {
660659 BindingFlags bindingFlags = argumentValues [ 0 ] . AsSingleValue ( ) is NullValue ? BindingFlags . Static : BindingFlags . Default ;
661- if ( fieldOrPropertyInstrinsic == IntrinsicId . Expression_Property ) {
660+ if ( intrinsicId == IntrinsicId . Expression_Property ) {
662661 MarkPropertiesOnTypeHierarchy ( systemTypeValue . RepresentedType , stringValue . Contents , bindingFlags ) ;
663662 } else {
664663 MarkFieldsOnTypeHierarchy ( systemTypeValue . RepresentedType , stringValue . Contents , bindingFlags ) ;
@@ -1015,7 +1014,7 @@ GenericParameterValue genericParam
10151014 // static CreateInstance (System.Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture)
10161015 // static CreateInstance (System.Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes) { throw null; }
10171016 //
1018- case IntrinsicId . Activator_CreateInstance_Type : {
1017+ case IntrinsicId . Activator_CreateInstance__Type : {
10191018 int ? ctorParameterCount = null ;
10201019 BindingFlags bindingFlags = BindingFlags . Instance ;
10211020 if ( calledMethod . GetParametersCount ( ) > 1 ) {
@@ -1085,7 +1084,7 @@ GenericParameterValue genericParam
10851084 // static CreateInstance (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes)
10861085 // static CreateInstance (string assemblyName, string typeName, object?[]? activationAttributes)
10871086 //
1088- case IntrinsicId . Activator_CreateInstance_AssemblyName_TypeName :
1087+ case IntrinsicId . Activator_CreateInstance__AssemblyName_TypeName :
10891088 ProcessCreateInstanceByName ( calledMethod , argumentValues ) ;
10901089 break ;
10911090
@@ -1119,10 +1118,10 @@ GenericParameterValue genericParam
11191118 // CreateInstanceFromAndUnwrap (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object? []? args, System.Globalization.CultureInfo? culture, object? []? activationAttributes)
11201119 // CreateInstanceFromAndUnwrap (string assemblyFile, string typeName, object? []? activationAttributes)
11211120 //
1122- case var appDomainCreateInstance when appDomainCreateInstance == IntrinsicId . AppDomain_CreateInstance
1123- || appDomainCreateInstance == IntrinsicId . AppDomain_CreateInstanceAndUnwrap
1124- || appDomainCreateInstance == IntrinsicId . AppDomain_CreateInstanceFrom
1125- || appDomainCreateInstance == IntrinsicId . AppDomain_CreateInstanceFromAndUnwrap :
1121+ case IntrinsicId . AppDomain_CreateInstance :
1122+ case IntrinsicId . AppDomain_CreateInstanceAndUnwrap :
1123+ case IntrinsicId . AppDomain_CreateInstanceFrom :
1124+ case IntrinsicId . AppDomain_CreateInstanceFromAndUnwrap :
11261125 ProcessCreateInstanceByName ( calledMethod , argumentValues ) ;
11271126 break ;
11281127
0 commit comments