Exemple #1
0
        private GenericParameter GetGenericParameter(GenericParameterType type, uint var)
        {
            IGenericParameterProvider method;
            IGenericContext           genericContext = this.reader.context;
            int num = (int)var;

            if (genericContext == null)
            {
                return(this.GetUnboundGenericParameter(type, num));
            }
            if (type == GenericParameterType.Type)
            {
                method = genericContext.Type;
            }
            else
            {
                if (type != GenericParameterType.Method)
                {
                    throw new NotSupportedException();
                }
                method = genericContext.Method;
            }
            if (!genericContext.IsDefinition)
            {
                SignatureReader.CheckGenericContext(method, num);
            }
            if (num >= method.GenericParameters.Count)
            {
                return(this.GetUnboundGenericParameter(type, num));
            }
            return(method.GenericParameters[num]);
        }
        public CodeType ToCodeType(Type type, bool parseGenerics = true)
        {
            if (CodeType.ByName(type.Name.ToLower()) != null)
            {
                return(CodeType.ByName(type.Name.ToLower()));
            }

            UserType ut = null;

            if (type.IsArray)
            {
                ut = new ArrayType(ToCodeType(type.GetElementType()));
            }
            else if (type.IsGenericType && parseGenerics)
            {
                CodeType[] parameters = new CodeType[type.GetGenericArguments().Length];
                for (int i = 0; i < parameters.Length; i++)
                {
                    parameters[i] = new GenericParameterType(ToCodeType(type.GetGenericArguments()[i]), i);
                }

                ut = GenericType.NewGenericType(UserType.NewUserType(type), parameters);
            }
            else
            {
                ut = UserType.NewUserType(type);
            }

            if (ut != null)
            {
                ReferenceTracker.AddUsedReference(ut.GetAssembly());
            }

            return(ut);
        }
        private GenericParameter GetGenericParameter(GenericParameterType type, uint var)
        {
            IGenericContext context = this.reader.context;

            if (context == null)
            {
                return(this.GetUnboundGenericParameter(type, (int)var));
            }
            IGenericParameterProvider genericParameterProvider;

            switch (type)
            {
            case GenericParameterType.Type:
                genericParameterProvider = context.Type;
                break;

            case GenericParameterType.Method:
                genericParameterProvider = context.Method;
                break;

            default:
                throw new NotSupportedException();
            }
            if (!context.IsDefinition)
            {
                SignatureReader.CheckGenericContext(genericParameterProvider, (int)var);
            }
            if (var >= (uint)genericParameterProvider.GenericParameters.Count)
            {
                return(this.GetUnboundGenericParameter(type, (int)var));
            }
            return(genericParameterProvider.GenericParameters[(int)var]);
        }
Exemple #4
0
 static TypeInfo bindGenericParameters(Library typeSystem, GenericParameterBindings genericsScope, TypeInfo typeInfo)
 {
     if (genericsScope.hasBinding(typeInfo))
     {
         return(genericsScope.getBindingValue(typeInfo));
     }
     else if (typeInfo.IsArray)
     {
         return(bindGenericParameters(typeSystem, genericsScope, typeInfo.ElementType).ArrayType);
     }
     else if (typeInfo.TypeKind == TypeKind.UpperBoundedWildcard)
     {
         return(bindGenericParameters(typeSystem, genericsScope, typeInfo.WildcardBound).UpperBoundedWildcard);
     }
     else if (typeInfo.TypeKind == TypeKind.LowerBoundedWildcard)
     {
         return(bindGenericParameters(typeSystem, genericsScope, typeInfo.WildcardBound).LowerBoundedWildcard);
     }
     else if (!typeInfo.IsClosed && typeInfo.GenericArguments.any())
     {
         return(typeSystem.getGenericType(typeInfo, bindGenericParameters(typeSystem, genericsScope, typeInfo.GenericArguments), genericsScope));
     }
     else if (typeInfo.IsGenericParameter && typeInfo.GenericParameterBounds.any())
     {
         var param = new GenericParameterType(typeSystem, typeInfo.FullName, typeInfo);
         genericsScope.declareBinding(typeInfo, param);
         foreach (var t in typeInfo.GenericParameterBounds)
         {
             param.genericParameterBounds.add(bindGenericParameters(typeSystem, genericsScope, t));
         }
         return(param);
     }
     return(typeInfo);
 }
Exemple #5
0
 public DummyGenericParameterProvider(bool methodTypeParameter)
 {
     type = methodTypeParameter ? GenericParameterType.Method :
            GenericParameterType.Type;
     parameters = new Mono.Collections.Generic.Collection <GenericParameter>(1);
     parameters.Add(new GenericParameter(this));
 }
Exemple #6
0
 private ClrGenericParameterStandin(
     GenericParameterType kind,
     int position)
 {
     this.Kind     = kind;
     this.Position = position;
 }
Exemple #7
0
        private GenericParameter GetGenericParameter(GenericParameterType type, uint var)
        {
            IGenericParameterProvider method;
            IGenericContext           context = this.reader.context;
            int index = (int)var;

            if (context == null)
            {
                return(this.GetUnboundGenericParameter(type, index));
            }
            switch (type)
            {
            case GenericParameterType.Type:
                method = context.Type;
                break;

            case GenericParameterType.Method:
                method = context.Method;
                break;

            default:
                throw new NotSupportedException();
            }
            if (!context.IsDefinition)
            {
                CheckGenericContext(method, index);
            }
            return((index < method.GenericParameters.Count) ? method.GenericParameters[index] : this.GetUnboundGenericParameter(type, index));
        }
Exemple #8
0
        public void ResolveGenericParameterWithEmptyTypeShouldThrow(GenericParameterType parameterType)
        {
            var context = new GenericContext();

            var parameter = new GenericParameterSignature(parameterType, 0);

            Assert.Throws <ArgumentOutOfRangeException>(() => context.GetTypeArgument(parameter));
        }
        public void SzArrayType(GenericParameterType parameterType, int index)
        {
            // 0![]
            var signature = new SzArrayTypeSignature(new GenericParameterSignature(parameterType, index));

            Assert.Equal(new SzArrayTypeSignature(GetTypeArguments(parameterType)[index]),
                         signature.InstantiateGenericTypes(_context), Comparer);
        }
        public TypeInfo addGenericArgument(String name)
        {
            checkCreated();
            var type = new GenericParameterType(this.DeclaringType.Library, name, null);

            genericArguments.add(type);
            return(type);
        }
Exemple #11
0
 /// <summary>
 /// Creates a generic parameter stand-in.
 /// </summary>
 /// <param name="kind">
 /// The kind of generic parameter to create a stand-in for.
 /// </param>
 /// <param name="position">
 /// The position of the generic parameter in the generic
 /// parameter list.
 /// </param>
 /// <returns>A generic parameter stand-in.</returns>
 internal static ClrGenericParameterStandin Create(
     GenericParameterType kind,
     int position)
 {
     return(instanceCache.Intern(
                new ClrGenericParameterStandin(
                    kind,
                    position)));
 }
Exemple #12
0
 private ClrGenericParameterStandin(
     GenericParameterType kind,
     int position,
     bool isReferenceType)
 {
     this.Kind            = kind;
     this.Position        = position;
     this.IsReferenceType = isReferenceType;
 }
Exemple #13
0
            public GenericParameterTypeRefResolver(GenericParameterType type, int index)
            {
                _type  = type;
                _index = index;

                if (index < 0)
                {
                    throw new WeavingException($"Invalid generic parameter index: {index}");
                }
            }
Exemple #14
0
 private static GenericParameter CreateGenericParameter(int position, GenericParameterType type, ModuleDefinition module)
 {
     return((GenericParameter)typeof(GenericParameter)
            .GetConstructor(
                BindingFlags.NonPublic | BindingFlags.Instance,
                null,
                new[] { typeof(int), typeof(GenericParameterType), typeof(ModuleDefinition) },
                null)
            .Invoke(new object[] { position, type, module }));
 }
Exemple #15
0
 internal GenericParameter(int position, GenericParameterType type, ModuleDefinition module)
     : base(string.Empty, string.Empty)
 {
     Mixin.CheckModule(module);
     this.position = position;
     this.type     = type;
     base.etype    = ConvertGenericParameterType(type);
     base.module   = module;
     base.token    = new MetadataToken(TokenType.GenericParam);
 }
        private InvokeMethodInfo BuildInvokeMethod(BuildMethod method, List <TypeSignature> genericArguments)
        {
            var invokeMethodInfo = new InvokeMethodInfo();

            int argumentCount = method.Parameters.Count + 1;

            if (method.HasThis)
            {
                argumentCount++;
            }

            var arguments      = new TypeSignature[argumentCount];
            var parameterFlags = new int[argumentCount];

            // Arguments
            {
                int index = 0;
                if (method.HasThis)
                {
                    arguments[index++] = new GenericParameterType(true, 0);
                    genericArguments.Add(TypeReference.GetPrimitiveType(PrimitiveTypeCode.Object, _module.Assembly));
                }

                var parameters = method.Parameters;

                for (int i = 0; i < parameters.Count; i++)
                {
                    var parameter = parameters[i];
                    arguments[index]      = BuildType(parameter.Type, genericArguments);
                    parameterFlags[index] = GetParameterFlags(parameter);
                    index++;
                }

                // index : [mscorlib]System.Int32
                arguments[index++] = TypeReference.GetPrimitiveType(PrimitiveTypeCode.Int32, _module.Assembly);
            }

            var returnType = BuildType(method.ReturnType.Type, genericArguments);

            invokeMethodInfo.CallSite =
                new CallSite(
                    false,
                    false,
                    MethodCallingConvention.Default,
                    returnType,
                    arguments,
                    -1,
                    genericArguments.Count);

            invokeMethodInfo.ParameterFlags = parameterFlags;

            invokeMethodInfo.GenericParameterCount = genericArguments.Count;

            return(invokeMethodInfo);
        }
        DataType TryGetGenericTypeFromMethodGroup(GenericParameterType gt, DelegateType dt, MethodGroup mg, GenericParameterType[] gparams, DataType[] gargs)
        {
            dt.AssignBaseType();
            var pl = dt.Parameters;

            foreach (var c in mg.Candidates)
            {
                var m = c;
                if (m.IsGenericDefinition)
                {
                    DataType[] typeArgs;
                    if (TryGetGenericTypeArgumentsFromParameterList(c.GenericParameters, c.Parameters,
                                                                    dt.GenericArguments, out typeArgs))
                    {
                        for (int i = 0; i < typeArgs.Length; i++)
                        {
                            typeArgs[i] = TryParameterize(typeArgs[i], gparams, gargs);
                            if (typeArgs[i] == null)
                            {
                                goto CONTINUE;
                            }
                        }

                        m = TypeBuilder.Parameterize(mg.Source, c, typeArgs);
                    }
                    else
                    {
                        goto CONTINUE;
                    }
                }

                for (int j = 0; j < Math.Min(pl.Length, m.Parameters.Length); j++)
                {
                    var at = TryGetGenericTypeArgumentRecursive(gt, pl[j].Type, m.Parameters[j].Type);
                    if (at != null)
                    {
                        return(at);
                    }
                }

                if (!m.ReturnType.IsVoid)
                {
                    var at = TryGetGenericTypeArgumentRecursive(gt, dt.ReturnType, m.ReturnType);
                    if (at != null)
                    {
                        return(at);
                    }
                }
CONTINUE:
                ;
            }

            return(null);
        }
Exemple #18
0
        public static GenericArgumentOwnerType CecilGenericOwnerToC2JGenericOwner(GenericParameterType cecilOwner)
        {
            switch (cecilOwner)
            {
            case GenericParameterType.Method: return(GenericArgumentOwnerType.Method);

            case GenericParameterType.Type: return(GenericArgumentOwnerType.Type);

            default: return(GenericArgumentOwnerType.Type);
            }
        }
Exemple #19
0
 public GenericParameter(string name, IGenericParameterProvider owner) : base(string.Empty, name)
 {
     if (owner == null)
     {
         throw new ArgumentNullException();
     }
     this.position = -1;
     this.owner    = owner;
     this.type     = owner.GenericParameterType;
     base.etype    = ConvertGenericParameterType(this.type);
     base.token    = new MetadataToken(TokenType.GenericParam);
 }
Exemple #20
0
        private static ElementType ConvertGenericParameterType(GenericParameterType type)
        {
            switch (type)
            {
            case GenericParameterType.Type:
                return(ElementType.Var);

            case GenericParameterType.Method:
                return(ElementType.MVar);
            }
            throw new ArgumentOutOfRangeException();
        }
Exemple #21
0
 internal GenericParameter(int position, GenericParameterType type, ModuleDefinition module) : base(string.Empty, string.Empty)
 {
     if (module == null)
     {
         throw new ArgumentNullException();
     }
     this.position = position;
     this.type     = type;
     base.etype    = ConvertGenericParameterType(type);
     base.module   = module;
     base.token    = new MetadataToken(TokenType.GenericParam);
 }
        private DelegateTypeInfo BuildInfo(BuildMethod method, List <TypeSignature> genericArguments)
        {
            var typeInfo = new DelegateTypeInfo();

            int argumentCount = method.Parameters.Count;

            if (method.HasThis)
            {
                argumentCount++;
            }

            var arguments      = new TypeSignature[argumentCount];
            var parameterFlags = new int[argumentCount];

            if (argumentCount > 0)
            {
                int index = 0;
                if (method.HasThis)
                {
                    arguments[index++] = new GenericParameterType(false, 0);
                    genericArguments.Add(TypeReference.GetPrimitiveType(PrimitiveTypeCode.Object, _module.Assembly));
                }

                var parameters = method.Parameters;

                for (int i = 0; i < parameters.Count; i++)
                {
                    var parameter = parameters[i];
                    arguments[index]      = BuildType(parameter.Type, genericArguments);
                    parameterFlags[index] = GetParameterFlags(parameter);
                    index++;
                }
            }

            var returnType = BuildType(method.ReturnType.Type, genericArguments);

            typeInfo.InvokeCallSite =
                new CallSite(
                    true,
                    false,
                    MethodCallingConvention.Default,
                    returnType,
                    arguments,
                    -1,
                    0);

            typeInfo.InvokeParameterFlags = parameterFlags;

            typeInfo.GenericParameterCount = genericArguments.Count;

            return(typeInfo);
        }
Exemple #23
0
        public GenericParameter(int position, GenericParameterType type, ModuleDefinition module)
            : base(string.Empty, string.Empty)
        {
            if (module == null)
            {
                throw new ArgumentNullException();
            }

            this.position = position;
            this.type     = type;
            this.etype    = ConvertGenericParameterType(type);
            this.module   = module;
        }
        private IList <TypeSignature> GetTypeArguments(GenericParameterType type)
        {
            switch (type)
            {
            case GenericParameterType.Type:
                return(_typeArgs);

            case GenericParameterType.Method:
                return(_methodArgs);

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
        public void ArrayType(GenericParameterType parameterType, int index)
        {
            // 0![0..10]
            var genericParameter = new GenericParameterSignature(parameterType, index);
            var signature        = new ArrayTypeSignature(genericParameter)
            {
                Dimensions = { new ArrayDimension(10, 0) }
            };

            Assert.Equal(new ArrayTypeSignature(GetTypeArguments(parameterType)[index])
            {
                Dimensions = { new ArrayDimension(10, 0) }
            }, signature.InstantiateGenericTypes(_context), Comparer);
        }
Exemple #26
0
        public TypeParameterKind GetTypeParameterKind(GenericParameterType type)
        {
            switch (type)
            {
            case GenericParameterType.Type:
                return(TypeParameterKind.Type);

            case GenericParameterType.Method:
                return(TypeParameterKind.Method);

            default:
            {
                throw new Exception($"Expected either a type parameter kind of type or method, but not {type.ToString()}");
            }
            }
        }
        DataType TryGetGenericTypeArgumentRecursive(GenericParameterType gt, DataType pt, DataType at)
        {
            if (pt.Equals(gt))
            {
                return(at);
            }

            if (at.IsArray)
            {
                if (pt.IsArray)
                {
                    return(TryGetGenericTypeArgumentRecursive(gt, pt.ElementType, at.ElementType));
                }
                if (pt.MasterDefinition == Essentials.IEnumerable_T && pt.IsGenericParameterization)
                {
                    return(TryGetGenericTypeArgumentRecursive(gt, pt.GenericArguments[0], at.ElementType));
                }
            }

            if (pt.IsFlattenedParameterization && at.IsFlattenedParameterization && pt.FlattenedArguments.Length == at.FlattenedArguments.Length)
            {
                for (int i = 0; i < pt.FlattenedArguments.Length; i++)
                {
                    var dt = TryGetGenericTypeArgumentRecursive(gt, pt.FlattenedArguments[i], at.FlattenedArguments[i]);
                    if (dt != null)
                    {
                        return(dt);
                    }
                }
            }

            for (int i = 0; i < at.Interfaces.Length; i++)
            {
                var dt = TryGetGenericTypeArgumentRecursive(gt, pt, at.Interfaces[i]);
                if (dt != null)
                {
                    return(dt);
                }
            }

            if (at.Base != null)
            {
                return(TryGetGenericTypeArgumentRecursive(gt, pt, at.Base));
            }

            return(null);
        }
Exemple #28
0
        void SetConstraints(GenericTypeParameterBuilder builder, GenericParameterType definition)
        {
            var attrs = GenericParameterAttributes.None;

            switch (definition.ConstraintType)
            {
            case GenericConstraintType.Class:
                if (definition.Base != _essentials.Object)
                {
                    builder.SetBaseTypeConstraint(_linker.GetType(definition.Base));
                }
                else
                {
                    attrs |= GenericParameterAttributes.ReferenceTypeConstraint;
                }
                break;

            case GenericConstraintType.Struct:
                attrs |= GenericParameterAttributes.NotNullableValueTypeConstraint;
                break;
            }

            if (definition.Constructors.Count > 0)
            {
                attrs |= GenericParameterAttributes.DefaultConstructorConstraint;
            }

            if (attrs != GenericParameterAttributes.None)
            {
                builder.SetGenericParameterAttributes(attrs);
            }

            if (definition.Interfaces.Length > 0)
            {
                var interfaceTypes = new Type[definition.Interfaces.Length];

                for (int j = 0; j < definition.Interfaces.Length; j++)
                {
                    interfaceTypes[j] = _linker.GetType(definition.Interfaces[j]);
                }

                builder.SetInterfaceConstraints(interfaceTypes);
            }
        }
        private void LoadActions()
        {
            var mscorlib = AssemblyReference.GetMscorlib(_module.Assembly);

            for (int i = 0; i < 9; i++)
            {
                var delegateType = new DelegateType();

                var arguments = new TypeSignature[i];
                for (int j = 0; j < i; j++)
                {
                    arguments[j] = new GenericParameterType(false, j);
                }

                delegateType.InvokeCallSite =
                    new CallSite(
                        true,
                        false,
                        MethodCallingConvention.Default,
                        TypeReference.GetPrimitiveType(PrimitiveTypeCode.Void, _module.Assembly),
                        arguments,
                        -1,
                        0);

                string name = "Action";
                if (i > 0)
                {
                    name += "`" + i.ToString();
                }

                delegateType.DeclaringType = new TypeReference(
                    name,
                    "System",
                    mscorlib,
                    false);

                delegateType.GenericParameterCount = i;

                delegateType.InvokeParameterFlags = new int[i];

                _types.TryAdd(CreateTypeInfo(delegateType));
            }
        }
Exemple #30
0
        public GenericParameter Retarget(GenericParameter value)
        {
            IGenericParameterProvider provider;
            GenericParameterType      type = value.Type;

            if (type != GenericParameterType.Type)
            {
                if (type != GenericParameterType.Method)
                {
                    throw new Exception(string.Format("Unknown GenericParameterType value {0}.", value.Type));
                }
            }
            else
            {
                provider = this.types.Peek();
                goto Label_00DC;
            }
            provider = this.methods.Peek();
            if (!provider.HasGenericParameters)
            {
                MethodReference reference = (MethodReference)provider;
                if (reference.DeclaringType.IsArray)
                {
                    ArrayType declaringType = (ArrayType)reference.DeclaringType;
                    if (declaringType.ElementType.IsGenericParameter)
                    {
                        GenericParameter elementType = (GenericParameter)declaringType.ElementType;
                        if (elementType.FullName.Equals(value.FullName))
                        {
                            return(elementType);
                        }
                    }
                }
                throw new Exception(string.Format("Unknown generic parameter {0}.", value));
            }
Label_00DC:
            if (provider.GenericParameters.Count == 0)
            {
                return(value);
            }
            return(provider.GenericParameters.Single <GenericParameter>(p => (p.Position == value.Position)));
        }
        protected override void initializeMethods() {
            if (classInfo == null || classInfo.methods == null) {
                return;
            }
            initializeBaseTypes();
            
            foreach (var m in classInfo.methods) {
                var method = new ClassFileMethod(this, m.name, m.descriptor);
                method.modifiers = m.modifiers;
                methods.add(method);
                if (m.signature == null) {
                    method.returnType = getTypeInfo(m.returnType);
                    int i = 0;
                    foreach (var p in m.parameters) {
                        var pi = new ParameterInfo(i++, getTypeInfo(p.type));
                        method.parameters.add(pi);
                        if (p.annotations == null) {
                            pi.annotations = Collections.emptyList();
                        } else {
                            pi.annotations = buildAnnotationValues(p.annotations);
                        }
                    }
                    if (m.exceptions == null) {
                        method.exceptions = Collections.emptyList();
                    } else {
                        var ex = new ArrayList<TypeInfo>();
                        foreach (var s in  m.exceptions) {
                            var t = typeSystem.getType(s);
							if (hasGenericArguments(t)) {
                                t = t.RawType;
                            }
                            ex.add(t);
                        }
                        method.exceptions = ex;
                    }
                    method.genericArguments = Collections.emptyList();
                } else {
                    genericsScope.enterScope();
                    var genArgs = new ArrayList<TypeInfo>();
                    foreach (var t in m.signature.FormalTypeParameters) {
                        var tp = new GenericParameterType(this.Library, t.Name, null);
                        genArgs.add(tp);
                        genericsScope.declareBinding(t.Name, tp);
                    }
                    method.genericArguments = genArgs;
                    int i = 0;
                    foreach (var t in m.signature.getFormalTypeParameters()) {
                        if (t.FormalTypeParameterBounds.any()) {
                            foreach (var ts in t.FormalTypeParameterBounds) {
                                ((GenericParameterType)genArgs[i]).genericParameterBounds.add(getTypeInfo(ts));
                            }
                        }
                        i++;
                    }
                    method.returnType = getTypeInfo(m.signature.ReturnType);
                    i = 0;
                    foreach (var param in m.signature.Parameters) {
                        var annotations = m.parameters[i].annotations;
                        var pi = new ParameterInfo(i++, getTypeInfo(param));
                        method.parameters.add(pi);
                        if (annotations == null) {
                            pi.annotations = Collections.emptyList();
                        } else {
                            pi.annotations = buildAnnotationValues(annotations);
                        }
                    }
                    var excepts = new ArrayList<TypeInfo>();
                    foreach (var t in m.signature.Exceptions) {
                        excepts.add(getTypeInfo(t));
                    }
                    method.exceptions = excepts;
                    genericsScope.leaveScope();
                }
                if (m.defaultValue != null) {
                    method.defaultValue = buildAnnotationArrayElement(m.defaultValue);
                }
                if (m.annotations == null) {
                    method.annotations = Collections.emptyList();
                } else {
                    method.annotations = buildAnnotationValues(m.annotations);
                }
            }
            
            classInfo.methods = null;
            if (classInfo.fields == null) {
                classInfo = null;
                genericsScope = null;
            }
        }
        protected override void initializeBaseTypes() {
            if (classInfo == null || classInfo.name == null) {
                return;
            }
            classInfo.name = null;

            ReflectionHelper.declareEnclosingGenericParameters(genericsScope, this);
            if (classInfo.signature == null) {
                genericArguments = Query.empty();
                if (classInfo.superName != null) {
                    baseType = typeSystem.getType(classInfo.superName);
					if (hasGenericArguments(baseType)) {
                        baseType = baseType.RawType;
                    }
                    if (classInfo.interfaces != null) {
                        var ints = new ArrayList<TypeInfo>(sizeof(classInfo.interfaces));
                        foreach (var s in classInfo.interfaces) {
                            var t = typeSystem.getType(s);
							if (hasGenericArguments(t)) {
                                t = t.RawType;
                            }
                            ints.add(t);
                        }
                        interfaces = ints;
                    } else {
                        interfaces = Query.empty();
                    }
                } else {
                    interfaces = Query.empty();
                }
            } else {
                if (classInfo.signature.FormalTypeParameters.any()) {
                    var genArgs = new ArrayList<TypeInfo>();
                    foreach (var t in classInfo.signature.FormalTypeParameters) {
                        var tp = new GenericParameterType(this.Library, t.Name, null);
                        genArgs.add(tp);
                        genericsScope.declareBinding(t.Name, tp);
                    }
                    genericArguments = genArgs;
                    int i = 0;
                    foreach (var t in classInfo.signature.FormalTypeParameters) {
                        if (t.FormalTypeParameterBounds.any()) {
                            foreach (var ts in t.FormalTypeParameterBounds) {
                                ((GenericParameterType)genArgs[i]).genericParameterBounds.add(getTypeInfo(ts));
                            }
                        }
                        i++;
                    }
                } else {
                    genericArguments = Query.empty();
                }
                if (classInfo.signature.Superclass != null) {
                    baseType = getTypeInfo(classInfo.signature.Superclass);
                }
                int n = classInfo.signature.Superinterfaces.count();
                if (n > 0) {
                    var ints = new ArrayList<TypeInfo>(n);
                    foreach (var t in classInfo.signature.Superinterfaces) {
                        ints.add(getTypeInfo(t));
                    }
                    interfaces = ints;
                } else {
                    interfaces = Query.empty();
                }
                classInfo.signature = null;
            }

            if (classInfo.annotations == null) {
                this.annotations = Collections.emptyList();
            } else {
                this.annotations = buildAnnotationValues(classInfo.annotations);
            }
        }
 public TypeInfo addGenericArgument(String name) {
     checkCreated();
     var type = new GenericParameterType(this.Library, name, null);
     genericArguments.add(type);
     return type;
 }
Exemple #34
0
    IType ConvertTypeAndNullable(BuiltIns.FormalParamDesc t)
        {
        IType result;

        switch (t.Type)
            {
        case Constants.TYPE.Float:            result = this.FloatType; break;
        case Constants.TYPE.Integer:          result = this.IntegerType; break;
        case Constants.TYPE.Bool:             result = this.BoolType; break;
        case Constants.TYPE.Mixture:          result = this.MixtureType; break;
        case Constants.TYPE.Plex:             result = this.PlexType; break;
        case Constants.TYPE.Strand:           result = this.StrandType; break;
        case Constants.TYPE.Domain:           result = this.DomainType; break;
        case Constants.TYPE.Void:             result = this.VoidType; break;
        case Constants.TYPE.Object:           result = this.ObjectType; break;
        case Constants.TYPE.String:           result = this.StringType; break;
        case Constants.TYPE.Melt:             result = this.MeltType; break;
        case Constants.TYPE.SeqDesignObject:        result = this.SeqDesignType; break;
        case Constants.TYPE.GenericType0:     result = new GenericParameterType(0); break;
        case Constants.TYPE.List:             result = new ListTypeSymbol(this); break;
        case Constants.TYPE.ListOfString:     result = new ListTypeSymbol(this, this.StringType); break;
        default:
            throw new InternalErrorException("missing type in TypeFromEnum");
            }
        //
        return result;
        }
        public static GenericParameterSignature FromReader(MetadataHeader header, IBinaryStreamReader reader, GenericParameterType parameterType)
        {
            long position = reader.Position;

            uint index;
            if (!reader.TryReadCompressedUInt32(out index))
                return null;

            return new GenericParameterSignature(parameterType, (int) index)
            {
                StartOffset = position
            };
        }
 public GenericParameterSignature(GenericParameterType parameterType, int index)
 {
     ParameterType = parameterType;
     Index = index;
 }