Esempio n. 1
0
            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]);
            }
Esempio n. 2
0
        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);
            }
        }