public OptionalModifierType (TypeReference modifierType, TypeReference type) : base (type) { Mixin.CheckModifier (modifierType, type); this.modifier_type = modifierType; this.etype = MD.ElementType.CModOpt; }
public static TypeDefinition Resolve (IAssemblyResolver resolver, TypeReference type) { type = type.GetElementType (); var scope = type.Scope; switch (scope.MetadataScopeType) { case MetadataScopeType.AssemblyNameReference: var assembly = resolver.Resolve ((AssemblyNameReference) scope); if (assembly == null) return null; return GetType (resolver, assembly.MainModule, type); case MetadataScopeType.ModuleDefinition: return GetType (resolver, (ModuleDefinition) scope, type); case MetadataScopeType.ModuleReference: var modules = type.Module.Assembly.Modules; var module_ref = (ModuleReference) scope; for (int i = 0; i < modules.Count; i++) { var netmodule = modules [i]; if (netmodule.Name == module_ref.Name) return GetType (resolver, netmodule, type); } break; } throw new NotSupportedException (); }
internal ParameterReference (string name, TypeReference parameterType) { if (parameterType == null) throw new ArgumentNullException ("parameterType"); this.name = name ?? string.Empty; this.parameter_type = parameterType; }
internal PropertyReference (string name, TypeReference propertyType) : base (name) { if (propertyType == null) throw new ArgumentNullException ("propertyType"); property_type = propertyType; }
public FieldReference (string name, TypeReference fieldType, TypeReference declaringType) : this (name, fieldType) { if (declaringType == null) throw new ArgumentNullException("declaringType"); this.DeclaringType = declaringType; }
public FieldReference (string name, TypeReference fieldType) : base (name) { if (fieldType == null) throw new ArgumentNullException ("fieldType"); this.field_type = fieldType; this.token = new MetadataToken (TokenType.MemberRef); }
public ArrayType(TypeReference type, int rank) : base(type) { Mixin.CheckType(type); if (rank == 1) return; m_Dimensions = new System.Collections.ObjectModel.ReadOnlyCollection<ArrayDimension>(new ArrayDimension[rank]); this.etype = MD.ElementType.Array; }
public ArrayType(TypeReference type, IEnumerable<ArrayDimension> dimensions) : base(type) { Mixin.CheckType(type); m_Dimensions = dimensions.ToReadOnlyCollectionOrNull(); if (m_Dimensions.Count == 1 && !m_Dimensions[0].IsSized) m_Dimensions = null; this.etype = MD.ElementType.Array; }
public ByReferenceType (TypeReference type) : base (type) { Mixin.CheckType (type); this.etype = MD.ElementType.ByRef; }
public CustomAttributeArgument (TypeReference type, object value) { Mixin.CheckType (type); this.type = type; this.value = value; }
public void AddTypeReference (TypeReference type) { TypeReferences [type.token.RID - 1] = type; }
public static void TryProcessPrimitiveType (TypeReference type) { var scope = type.scope; if (scope == null) return; if (scope.MetadataScopeType != MetadataScopeType.AssemblyNameReference) return; if (scope.Name != "mscorlib") return; if (type.Namespace != "System") return; if (primitive_value_types == null) InitializePrimitives (); Row<ElementType, bool> primitive_data; if (!primitive_value_types.TryGetValue (type.Name, out primitive_data)) return; type.etype = primitive_data.Col1; type.IsValueType = primitive_data.Col2; }
/// <summary> /// Gets whether the type supports collection initializers. /// </summary> static bool IsCollectionType(TypeReference tr) { if (tr == null) return false; TypeDefinition td = tr.Resolve(); while (td != null) { if (td.Interfaces.Any(intf => intf.Name == "IEnumerable" && intf.Namespace == "System.Collections")) return true; td = td.BaseType != null ? td.BaseType.Resolve() : null; } return false; }
string GetNameByType(TypeReference type) { type = TypeAnalysis.UnpackModifiers(type); GenericInstanceType git = type as GenericInstanceType; if (git != null && git.ElementType.FullName == "System.Nullable`1" && git.GenericArguments.Count == 1) { type = ((GenericInstanceType)type).GenericArguments[0]; } string name; if (type.IsArray) { name = "array"; } else if (type.IsPointer || type.IsByReference) { name = "ptr"; } else if (type.Name.EndsWith("Exception", StringComparison.Ordinal)) { name = "ex"; } else if (!typeNameToVariableNameDict.TryGetValue(type.FullName, out name)) { name = type.Name; // remove the 'I' for interfaces if (name.Length >= 3 && name[0] == 'I' && char.IsUpper(name[1]) && char.IsLower(name[2])) name = name.Substring(1); name = CleanUpVariableName(name); } return name; }
public ArrayType(TypeReference type) : base(type) { Mixin.CheckType(type); this.etype = MD.ElementType.Array; }
public RequiredModifierType (TypeReference modifierType, TypeReference type) : base (type) { Mixin.CheckModifier (modifierType, type); this.modifier_type = modifierType; this.etype = MD.ElementType.CModReqD; }
public TypeReference ImportType (Type type, IGenericContext context, ImportGenericKind import_kind) { if (IsTypeSpecification (type) || ImportOpenGenericType (type, import_kind)) return ImportTypeSpecification (type, context); var reference = new TypeReference ( string.Empty, type.Name, module, ImportScope (type.Assembly), type.IsValueType); reference.etype = ImportElementType (type); if (IsNestedType (type)) reference.DeclaringType = ImportType (type.DeclaringType, context, import_kind); else reference.Namespace = type.Namespace; if (type.IsGenericType) ImportGenericParameters (reference, type.GetGenericArguments ()); return reference; }
TypeReference ImportTypeSpecification (TypeReference type, IGenericContext context) { switch (type.etype) { case ElementType.SzArray: var vector = (ArrayType) type; return new ArrayType (ImportType (vector.ElementType, context)); case ElementType.Ptr: var pointer = (PointerType) type; return new PointerType (ImportType (pointer.ElementType, context)); case ElementType.ByRef: var byref = (ByReferenceType) type; return new ByReferenceType (ImportType (byref.ElementType, context)); case ElementType.Pinned: var pinned = (PinnedType) type; return new PinnedType (ImportType (pinned.ElementType, context)); case ElementType.Sentinel: var sentinel = (SentinelType) type; return new SentinelType (ImportType (sentinel.ElementType, context)); case ElementType.CModOpt: var modopt = (OptionalModifierType) type; return new OptionalModifierType ( ImportType (modopt.ModifierType, context), ImportType (modopt.ElementType, context)); case ElementType.CModReqD: var modreq = (RequiredModifierType) type; return new RequiredModifierType ( ImportType (modreq.ModifierType, context), ImportType (modreq.ElementType, context)); case ElementType.Array: var array = (ArrayType) type; return new ArrayType (ImportType (array.ElementType, context), array.Dimensions); case ElementType.GenericInst: var instance = (GenericInstanceType) type; var element_type = ImportType (instance.ElementType, context); var imported_instance = new GenericInstanceType (element_type); var arguments = instance.GenericArguments; var imported_arguments = imported_instance.GenericArguments; for (int i = 0; i < arguments.Count; i++) imported_arguments.Add (ImportType (arguments [i], context)); return imported_instance; case ElementType.Var: if (context == null || context.Type == null) throw new InvalidOperationException (); return ((TypeReference) context.Type).GetElementType ().GenericParameters [((GenericParameter) type).Position]; case ElementType.MVar: if (context == null || context.Method == null) throw new InvalidOperationException (); return context.Method.GenericParameters [((GenericParameter) type).Position]; } throw new NotSupportedException (type.etype.ToString ()); }
public TypeReference ImportType (TypeReference type, IGenericContext context) { if (type.IsTypeSpecification ()) return ImportTypeSpecification (type, context); var reference = new TypeReference ( type.Namespace, type.Name, module, ImportScope (type.Scope), type.IsValueType); MetadataSystem.TryProcessPrimitiveType (reference); if (type.IsNested) reference.DeclaringType = ImportType (type.DeclaringType, context); if (type.HasGenericParameters) ImportGenericParameters (reference, type); return reference; }
public FieldDefinition (string name, FieldAttributes attributes, TypeReference fieldType) : base (name, fieldType) { this.attributes = (ushort) attributes; }
public TypeDefinition (string @namespace, string name, TypeAttributes attributes, TypeReference baseType) : this (@namespace, name, attributes) { this.BaseType = baseType; }
public MethodDefinition (string name, MethodAttributes attributes, TypeReference returnType) : base (name, returnType) { this.attributes = (ushort) attributes; this.HasThis = !this.IsStatic; this.token = new MetadataToken (TokenType.Method); }
public GenericInstanceType (TypeReference type) : base (type) { base.IsValueType = type.IsValueType; this.etype = MD.ElementType.GenericInst; }
public PointerType (TypeReference type) : base (type) { Mixin.CheckType (type); this.etype = MD.ElementType.Ptr; }
public static void CheckModifier (TypeReference modifierType, TypeReference type) { if (modifierType == null) throw new ArgumentNullException ("modifierType"); if (type == null) throw new ArgumentNullException ("type"); }
TypeReference LookupSystemValueType (ref TypeReference typeRef, string name, ElementType element_type) { lock (module.SyncRoot) { if (typeRef != null) return typeRef; var type = LookupType ("System", name); type.etype = element_type; type.IsValueType = true; return typeRef = type; } }
public void InsertParameterIndex () { var object_ref = new TypeReference ("System", "Object", null, null, false); var method = new MethodDefinition ("foo", MethodAttributes.Static, object_ref); var x = new ParameterDefinition ("x", ParameterAttributes.None, object_ref); var y = new ParameterDefinition ("y", ParameterAttributes.None, object_ref); var z = new ParameterDefinition ("y", ParameterAttributes.None, object_ref); method.Parameters.Add (x); method.Parameters.Add (z); Assert.AreEqual (0, x.Index); Assert.AreEqual (-1, y.Index); Assert.AreEqual (1, z.Index); method.Parameters.Insert (1, y); Assert.AreEqual (0, x.Index); Assert.AreEqual (1, y.Index); Assert.AreEqual (2, z.Index); }
public MethodReference (string name, TypeReference returnType) : base (name) { if (returnType == null) throw new ArgumentNullException ("returnType"); this.return_type = new MethodReturnType (this); this.return_type.ReturnType = returnType; this.token = new MetadataToken (TokenType.MemberRef); }
public CallSite (TypeReference returnType) : this () { if (returnType == null) throw new ArgumentNullException ("returnType"); this.signature.ReturnType = returnType; }
public MethodReference (string name, TypeReference returnType, TypeReference declaringType) : this (name, returnType) { if (declaringType == null) throw new ArgumentNullException ("declaringType"); this.DeclaringType = declaringType; }