Exemple #1
0
        /// <inheritdoc />
        public IConcreteValue this[IVariable variable]
        {
            get
            {
                if (!_variables.TryGetValue(variable, out var value))
                {
                    value = variable switch
                    {
                        CilVariable cilVariable => _valueFactory.CreateValue(cilVariable.Variable.VariableType, false),
                        CilParameter cilParameter => _valueFactory.CreateValue(cilParameter.Parameter.ParameterType,
                                                                               false),
                        _ => throw new NotSupportedException($"IVariable implementation {variable.GetType()} is not supported.")
                    };
                    _variables[variable] = value;
                }

                return(value);
            }
            set
            {
                if (!(variable is CilParameter) && !(variable is CilVariable))
                {
                    throw new NotSupportedException($"IVariable implementation {variable.GetType()} is not supported.");
                }

                _variables[variable] = value;
            }
        }
Exemple #2
0
        internal static CilParameter[] DecodeParameters(MethodSignature <CilType> signature, ParameterHandleCollection parameters, ref CilReaders readers)
        {
            ImmutableArray <CilType> types = signature.ParameterTypes;
            int requiredCount = Math.Min(signature.RequiredParameterCount, types.Length);

            if (requiredCount == 0)
            {
                return(new CilParameter[0]);
            }
            CilParameter[] result = new CilParameter[requiredCount];
            for (int i = 0; i < requiredCount; i++)
            {
                var parameter = readers.MdReader.GetParameter(parameters.ElementAt(i));
                result[i] = CilParameter.Create(parameter, ref readers, types[i].ToString());
            }
            return(result);
        }
Exemple #3
0
 internal static CilParameter[] DecodeParameters(MethodSignature<CilType> signature, ParameterHandleCollection parameters, ref CilReaders readers)
 {
     ImmutableArray<CilType> types = signature.ParameterTypes;
     int requiredCount = Math.Min(signature.RequiredParameterCount, types.Length);
     if (requiredCount == 0)
     {
         return new CilParameter[0];
     }
     CilParameter[] result = new CilParameter[requiredCount];
     for (int i = 0; i < requiredCount; i++)
     {
         var parameter = readers.MdReader.GetParameter(parameters.ElementAt(i));
         result[i] = CilParameter.Create(parameter, ref readers, types[i].ToString());
     }
     return result;
 }