public AnalysisNet.Types.IGenericParameterReference GetGenericParameter(Cecil.GenericParameter cecilParameter) { Cecil.IGenericParameterProvider owner = cecilParameter.Owner; if (genericParamsMap.TryGetValue(owner, out GenericParameterMap map)) { return(map[cecilParameter.Position]); } // populates map if (cecilParameter.Type == Cecil.GenericParameterType.Method) { typeExtractor.ExtractMethod(owner as Cecil.MethodReference); } else { // check my assumption if ((owner is Cecil.GenericInstanceType)) { throw new Exception(); } typeExtractor.ExtractType(owner as Cecil.TypeReference); } map = genericParamsMap[owner]; return(map[cecilParameter.Position]); }
private void ExtractParameters(Cecil.MethodDefinition methoddef, IList <AnalysisNetTac.Values.IVariable> ourParameters) { if (!methoddef.IsStatic) { AnalysisNet.Types.IType type = typeExtractor.ExtractType(methoddef.DeclaringType); AnalysisNetTac.Values.LocalVariable v = new AnalysisNetTac.Values.LocalVariable("this", true) { Type = type }; ourParameters.Add(v); thisParameter = v; } foreach (Cecil.ParameterDefinition parameter in methoddef.Parameters) { AnalysisNet.Types.IType type = typeExtractor.ExtractType(parameter.ParameterType); AnalysisNetTac.Values.LocalVariable v = new AnalysisNetTac.Values.LocalVariable(parameter.Name, true) { Type = type }; ourParameters.Add(v); parameters.Add(parameter.Index, v); } }