@@ -2691,111 +2691,6 @@ HRESULT MethodTableBuilder::FindMethodDeclarationForMethodImpl(
2691
2691
#pragma warning(disable:21000) // Suppress PREFast warning about overly large function
2692
2692
#endif // _PREFAST_
2693
2693
2694
- static void GetNameOfTypeDefOrRef(Module* pModule, mdToken tk, LPCSTR* pName, LPCSTR* pNamespace)
2695
- {
2696
- *pName = "";
2697
- *pNamespace = "";
2698
- if (TypeFromToken(tk) == mdtTypeDef)
2699
- {
2700
- IfFailThrow(pModule->GetMDImport()->GetNameOfTypeDef(tk, pName, pNamespace));
2701
- }
2702
- else if (TypeFromToken(tk) == mdtTypeRef)
2703
- {
2704
- IfFailThrow(pModule->GetMDImport()->GetNameOfTypeRef(tk, pNamespace, pName));
2705
- }
2706
- }
2707
-
2708
- static bool IsTypeDefOrRefImplementedInSystemModule(Module* pModule, mdToken tk)
2709
- {
2710
- if (TypeFromToken(tk) == mdtTypeDef)
2711
- {
2712
- if (pModule->IsSystem())
2713
- {
2714
- return true;
2715
- }
2716
- }
2717
- else if (TypeFromToken(tk) == mdtTypeRef)
2718
- {
2719
- mdToken tkTypeDef;
2720
- Module* pModuleOfTypeDef;
2721
-
2722
- ClassLoader::ResolveTokenToTypeDefThrowing(pModule, tk, &pModuleOfTypeDef, &tkTypeDef);
2723
- if (pModuleOfTypeDef->IsSystem())
2724
- {
2725
- return true;
2726
- }
2727
- }
2728
-
2729
- return false;
2730
- }
2731
-
2732
- static MethodReturnKind ClassifyMethodReturnKind(SigPointer sig, Module* pModule, ULONG* offsetOfAsyncDetails, bool *isValueTask)
2733
- {
2734
- // Without FEATURE_RUNTIME_ASYNC every declared method is classified as a NormalMethod.
2735
- // Thus code that handles runtime async scenarios becomes unreachable.
2736
- #ifdef FEATURE_RUNTIME_ASYNC
2737
- PCCOR_SIGNATURE initialSig = sig.GetPtr();
2738
- uint32_t data;
2739
- IfFailThrow(sig.GetCallingConvInfo(&data));
2740
- if (data & IMAGE_CEE_CS_CALLCONV_GENERIC)
2741
- {
2742
- // Skip over generic argument count
2743
- IfFailThrow(sig.GetData(&data));
2744
- }
2745
-
2746
- // skip argument count
2747
- IfFailThrow(sig.GetData(&data));
2748
-
2749
- // now look at return type
2750
- // NOTE: this will skip modifiers
2751
- CorElementType elemType;
2752
- IfFailThrow(sig.GetElemType(&elemType));
2753
-
2754
- // can't reason about ELEMENT_TYPE_INTERNAL, but should not see it in metadata
2755
- if (elemType == ELEMENT_TYPE_INTERNAL)
2756
- ThrowHR(COR_E_BADIMAGEFORMAT);
2757
-
2758
- *offsetOfAsyncDetails = (ULONG)(sig.GetPtr() - initialSig) - 1;
2759
- LPCSTR name, _namespace;
2760
- mdToken tk;
2761
- if (elemType == ELEMENT_TYPE_GENERICINST)
2762
- {
2763
- IfFailThrow(sig.GetElemType(&elemType));
2764
- // can't reason about ELEMENT_TYPE_INTERNAL, but should not see it in metadata
2765
- if (elemType == ELEMENT_TYPE_INTERNAL)
2766
- ThrowHR(COR_E_BADIMAGEFORMAT);
2767
-
2768
- *isValueTask = (elemType == ELEMENT_TYPE_VALUETYPE);
2769
- IfFailThrow(sig.GetToken(&tk));
2770
- IfFailThrow(sig.GetData(&data));
2771
- if (data == 1)
2772
- {
2773
- // This might be System.Threading.Tasks.Task`1
2774
- GetNameOfTypeDefOrRef(pModule, tk, &name, &_namespace);
2775
- if ((strcmp(name, *isValueTask ? "ValueTask`1" : "Task`1") == 0) && strcmp(_namespace, "System.Threading.Tasks") == 0)
2776
- {
2777
- if (IsTypeDefOrRefImplementedInSystemModule(pModule, tk))
2778
- return MethodReturnKind::GenericTaskReturningMethod;
2779
- }
2780
- }
2781
- }
2782
- else if ((elemType == ELEMENT_TYPE_CLASS) || (elemType == ELEMENT_TYPE_VALUETYPE))
2783
- {
2784
- IfFailThrow(sig.GetToken(&tk));
2785
- *isValueTask = (elemType == ELEMENT_TYPE_VALUETYPE);
2786
- // This might be System.Threading.Tasks.Task or ValueTask
2787
- GetNameOfTypeDefOrRef(pModule, tk, &name, &_namespace);
2788
- if ((strcmp(name, *isValueTask ? "ValueTask" : "Task") == 0) && strcmp(_namespace, "System.Threading.Tasks") == 0)
2789
- {
2790
- if (IsTypeDefOrRefImplementedInSystemModule(pModule, tk))
2791
- return MethodReturnKind::NonGenericTaskReturningMethod;
2792
- }
2793
- }
2794
- #endif // FEATURE_RUNTIME_ASYNC
2795
-
2796
- return MethodReturnKind::NormalMethod;
2797
- }
2798
-
2799
2694
//---------------------------------------------------------------------------------------
2800
2695
//
2801
2696
// Used by BuildMethodTable
0 commit comments