/// <summary> /// Constructor /// </summary> /// <param name="parameter">Parameter</param> /// <param name="name">Name used by the decompiler</param> /// <param name="type">Type of local</param> /// <param name="flags">Flags</param> public SourceParameter(Parameter parameter, string name, TypeSig type, SourceVariableFlags flags) { Parameter = parameter ?? throw new ArgumentNullException(nameof(parameter)); Name = name ?? throw new ArgumentNullException(nameof(name)); Type = type ?? throw new ArgumentNullException(nameof(type)); Flags = flags; }
/// <summary> /// Constructor /// </summary> /// <param name="parameter">Parameter</param> /// <param name="name">Name used by the decompiler</param> /// <param name="hoistedField">Hoisted field</param> /// <param name="flags">Flags</param> public SourceParameter(Parameter parameter, string name, FieldDef hoistedField, SourceVariableFlags flags) { Parameter = parameter ?? throw new ArgumentNullException(nameof(parameter)); Name = name ?? throw new ArgumentNullException(nameof(name)); HoistedField = hoistedField ?? throw new ArgumentNullException(nameof(hoistedField)); Type = hoistedField.FieldType; Flags = flags; }
/// <summary> /// Constructor /// </summary> /// <param name="local">Local or null</param> /// <param name="name">Name used by the decompiler</param> /// <param name="hoistedField">Hoisted field</param> /// <param name="flags">Flags</param> public SourceLocal(Local local, string name, FieldDef hoistedField, SourceVariableFlags flags) { Debug.Assert((flags & SourceVariableFlags.DecompilerGenerated) == 0); Local = local; Name = name ?? throw new ArgumentNullException(nameof(name)); HoistedField = hoistedField ?? throw new ArgumentNullException(nameof(hoistedField)); Type = hoistedField.FieldType; // It's decompiler generated if Local == null && HoistedField == null Flags = flags & ~SourceVariableFlags.DecompilerGenerated; }
/// <summary> /// Constructor /// </summary> /// <param name="local">Local or null</param> /// <param name="name">Name used by the decompiler</param> /// <param name="type">Type of local</param> /// <param name="flags">Flags</param> public SourceLocal(Local local, string name, TypeSig type, SourceVariableFlags flags) { Debug.Assert((flags & SourceVariableFlags.DecompilerGenerated) == 0); Local = local; Name = name ?? throw new ArgumentNullException(nameof(name)); Type = type ?? throw new ArgumentNullException(nameof(type)); // It's decompiler generated if Local == null && HoistedField == null if (local == null) { flags |= SourceVariableFlags.DecompilerGenerated; } else { flags &= ~SourceVariableFlags.DecompilerGenerated; } Flags = flags; }