internal TypeDesc[] GetTypeSequence(ref NativeParser parser) { uint count = parser.GetSequenceCount(); TypeDesc[] sequence = new TypeDesc[count]; for (uint i = 0; i < count; i++) { sequence[i] = GetType(ref parser); } return(sequence); }
internal override bool MatchParsedEntry(ref NativeParser entryParser, ref ExternalReferencesTable externalReferencesLookup, IntPtr moduleHandle) { // Compare entry with inputs as we parse it. If we get a mismatch, stop parsing and move to the next entry... RuntimeTypeHandle parsedDeclaringTypeHandle = externalReferencesLookup.GetRuntimeTypeHandleFromIndex(entryParser.GetUnsigned()); if (!parsedDeclaringTypeHandle.Equals(_declaringType)) { return(false); } // Hash table names / sigs are indirected through to the native layout info MethodNameAndSignature nameAndSignature; if (!TypeLoaderEnvironment.Instance.TryGetMethodNameAndSignatureFromNativeLayoutOffset(moduleHandle, entryParser.GetUnsigned(), out nameAndSignature)) { return(false); } if (!nameAndSignature.Equals(_nameAndSignature)) { return(false); } int parsedArity = (int)entryParser.GetSequenceCount(); int lookupArity = (_methodToLookup != null ? _methodToLookup.Instantiation.Length : _genericMethodArgumentHandles.Length); if (parsedArity != lookupArity) { return(false); } for (int i = 0; i < parsedArity; i++) { RuntimeTypeHandle parsedArg = externalReferencesLookup.GetRuntimeTypeHandleFromIndex(entryParser.GetUnsigned()); RuntimeTypeHandle lookupArg = (_methodToLookup != null ? _methodToLookup.Instantiation[i].RuntimeTypeHandle : _genericMethodArgumentHandles[i]); if (!parsedArg.Equals(lookupArg)) { return(false); } } return(true); }