Ejemplo n.º 1
0
        public void GenericTypeArgumentsEncoder_AddArgument()
        {
            var b = new BlobBuilder();
            var e = new GenericTypeArgumentsEncoder(b);

            var s = e.AddArgument();

            AssertEx.Equal(new byte[0], b.ToArray());
            Assert.Same(b, s.Builder);
        }
Ejemplo n.º 2
0
        private EntityHandle MakeMemberReferenceHandle(TypeSystemEntity methodOrField)
        {
            EntityHandle handle;

            if (!_memberRefOrSpecHandles.TryGetValue(methodOrField, out handle))
            {
                MethodDesc method     = methodOrField as MethodDesc;
                FieldDesc  field      = methodOrField as FieldDesc;
                TypeDesc   owningType = (method != null ? method.OwningType : field.OwningType);
                string     name       = (method != null ? method.Name : field.Name);

                BlobHandle signature = method != null?
                                       MakeSignatureHandle(method.GetTypicalMethodDefinition()) :
                                           MakeSignatureHandle(field);

                handle = _metadataBuilder.AddMemberReference(
                    MakeTypeRefOrSpecHandle(owningType),
                    _metadataBuilder.GetOrAddString(name),
                    signature);

                if (method != null && method.HasInstantiation && !method.IsTypicalMethodDefinition)
                {
                    BlobEncoder methodSpecEncoder = new BlobEncoder(new BlobBuilder());

                    GenericTypeArgumentsEncoder argEncoder = methodSpecEncoder.MethodSpecificationSignature(method.Instantiation.Length);
                    for (int i = 0; i < method.Instantiation.Length; i++)
                    {
                        SignatureTypeEncoder argTypeEncoder = argEncoder.AddArgument();
                        _signatureEmitter.EncodeTypeSignature(argTypeEncoder, method.Instantiation[i]);
                    }

                    handle = _metadataBuilder.AddMethodSpecification(handle, _metadataBuilder.GetOrAddBlob(methodSpecEncoder.Builder));
                }

                _memberRefOrSpecHandles[methodOrField] = handle;
            }

            return(handle);
        }
Ejemplo n.º 3
0
        public void GenericTypeArgumentsEncoder_AddArgument()
        {
            var b = new BlobBuilder();
            var e = new GenericTypeArgumentsEncoder(b);

            var s = e.AddArgument();
            AssertEx.Equal(new byte[0], b.ToArray());
            Assert.Same(b, s.Builder);
        }