/// <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; } }
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); }
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; }