Ejemplo n.º 1
0
        internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            // [param]
            if (IsParams)
            {
                yield return(DeclaringCompilation.CreateParamsAttribute());
            }

            // [Nullable(1)] - does not return null
            if (HasNotNull && Type.IsReferenceType)
            {
                yield return(DeclaringCompilation.CreateNullableAttribute(NullableContextUtils.NotAnnotatedAttributeValue));
            }

            // [DefaultValue]
            if (DefaultValueField != null)
            {
                yield return(DeclaringCompilation.CreateDefaultValueAttribute(ContainingType, DefaultValueField));
            }

            //
            foreach (var attr in GetAttributes())
            {
                yield return(attr);
            }
        }
Ejemplo n.º 2
0
        internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            if (IsParams)
            {
                yield return(new SynthesizedAttributeData(
                                 (MethodSymbol)DeclaringCompilation.GetWellKnownTypeMember(WellKnownMember.System_ParamArrayAttribute__ctor),
                                 ImmutableArray <TypedConstant> .Empty, ImmutableArray <KeyValuePair <string, TypedConstant> > .Empty));
            }

            yield break;
        }
Ejemplo n.º 3
0
        internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            foreach (AttributeData attribute in GetAttributes())
            {
                yield return(attribute);
            }

            // Yield hidden attributes last, order might be important.
            foreach (AttributeData attribute in _lazyHiddenAttributes)
            {
                yield return(attribute);
            }
        }
Ejemplo n.º 4
0
        internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            var attrs = base.GetCustomAttributesToEmit(compilationState);

            if (_lazyAttributesToEmit.IsDefault)
            {
                _lazyAttributesToEmit = CreateAttributesToEmit().ToImmutableArray();
            }

            attrs = attrs.Concat(_lazyAttributesToEmit);

            //
            return(attrs);
        }
Ejemplo n.º 5
0
        internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            // [param]
            if (IsParams)
            {
                yield return(new SynthesizedAttributeData(
                                 (MethodSymbol)DeclaringCompilation.GetWellKnownTypeMember(WellKnownMember.System_ParamArrayAttribute__ctor),
                                 ImmutableArray <TypedConstant> .Empty, ImmutableArray <KeyValuePair <string, TypedConstant> > .Empty));
            }

            // [NotNull]
            if (IsNotNull && Type.IsReferenceType)
            {
                yield return(new SynthesizedAttributeData(
                                 DeclaringCompilation.CoreMethods.Ctors.NotNullAttribute,
                                 ImmutableArray <TypedConstant> .Empty, ImmutableArray <KeyValuePair <string, TypedConstant> > .Empty));
            }

            // [DefaultValue]
            if (this.Initializer is BoundArrayEx arr)
            {
                var typeParameter   = new KeyValuePair <string, TypedConstant>("Type", new TypedConstant(DeclaringCompilation.CoreTypes.DefaultValueType.Symbol, TypedConstantKind.Enum, 1 /*PhpArray*/));
                var namedparameters = ImmutableArray.Create(typeParameter);

                if (arr.Items.Length != 0)
                {
                    try
                    {
                        var byteSymbol      = DeclaringCompilation.GetSpecialType(SpecialType.System_Byte);
                        var serializedValue = Encoding.UTF8.GetBytes(arr.PhpSerializeOrThrow());
                        var p = new KeyValuePair <string, TypedConstant>(
                            "SerializedValue",
                            new TypedConstant(DeclaringCompilation.CreateArrayTypeSymbol(byteSymbol), serializedValue.Select(DeclaringCompilation.CreateTypedConstant).AsImmutable()));

                        namedparameters = namedparameters.Add(p);
                    }
                    catch (Exception ex)
                    {
                        throw new InvalidOperationException($"Cannot construct serialized parameter default value. Routine '{Routine.Name}' in {Routine.ContainingFile.RelativeFilePath}, {ex.Message}.", ex);
                    }
                }

                yield return(new SynthesizedAttributeData(
                                 DeclaringCompilation.CoreMethods.Ctors.DefaultValueAttribute,
                                 ImmutableArray <TypedConstant> .Empty, namedparameters));
            }

            //
            yield break;
        }
Ejemplo n.º 6
0
        internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            foreach (AttributeData attribute in GetAttributes())
            {
                yield return(attribute);
            }

            //// Yield hidden attributes last, order might be important.
            //if (FilterOutDecimalConstantAttribute())
            //{
            //    var containingPEModuleSymbol = _containingType.ContainingPEModule;
            //    yield return new PEAttributeData(containingPEModuleSymbol,
            //                              containingPEModuleSymbol.Module.FindLastTargetAttribute(_handle, AttributeDescription.DecimalConstantAttribute).Handle);
            //}
        }
Ejemplo n.º 7
0
        internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            // params
            if (IsParams)
            {
                yield return(DeclaringCompilation.CreateParamsAttribute());
            }

            // TODO: preserve [NotNull]

            // [DefaultValue]
            if (DefaultValueField != null)
            {
                yield return(DeclaringCompilation.CreateDefaultValueAttribute(ContainingType, DefaultValueField));
            }

            //
            yield break;
        }
Ejemplo n.º 8
0
        internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            // params
            if (IsParams)
            {
                yield return(DeclaringCompilation.CreateParamsAttribute());
            }

            // TODO: preserve [NotNull]

            // [DefaultValue]
            if (this.Initializer is BoundArrayEx arr)
            {
                yield return(DeclaringCompilation.CreateDefaultValueAttribute(_container, arr));
            }

            //
            yield break;
        }
Ejemplo n.º 9
0
        protected PEModuleBuilder(
            PhpCompilation compilation,
            SourceModuleSymbol sourceModule,
            Cci.ModulePropertiesForSerialization serializationProperties,
            IEnumerable<ResourceDescription> manifestResources,
            OutputKind outputKind,
            EmitOptions emitOptions)
        {
            Debug.Assert(sourceModule != null);
            Debug.Assert(serializationProperties != null);

            _compilation = compilation;
            _sourceModule = sourceModule;
            _serializationProperties = serializationProperties;
            this.ManifestResources = manifestResources;
            _outputKind = outputKind;
            _emitOptions = emitOptions;
            this.CompilationState = new CommonModuleCompilationState();
            _debugDocuments = new ConcurrentDictionary<string, Cci.DebugSourceDocument>(compilation.IsCaseSensitive ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase);
            _synthesized = new SynthesizedManager(this);

            AssemblyOrModuleSymbolToModuleRefMap.Add(sourceModule, this);
        }
Ejemplo n.º 10
0
        internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            // [param]
            if (IsParams)
            {
                yield return(DeclaringCompilation.CreateParamsAttribute());
            }

            // [NotNull]
            if (IsNotNull && Type.IsReferenceType)
            {
                yield return(DeclaringCompilation.CreateNotNullAttribute());
            }

            // [DefaultValue]
            if (this.Initializer is BoundArrayEx arr)
            {
                yield return(DeclaringCompilation.CreateDefaultValueAttribute(Routine, arr));
            }

            //
            yield break;
        }
Ejemplo n.º 11
0
        internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            // [param]
            if (IsParams)
            {
                yield return(DeclaringCompilation.CreateParamsAttribute());
            }

            // [NotNull]
            if (IsNotNull && Type.IsReferenceType)
            {
                yield return(DeclaringCompilation.CreateNotNullAttribute());
            }

            // [DefaultValue]
            if (DefaultValueField != null)
            {
                yield return(DeclaringCompilation.CreateDefaultValueAttribute(ContainingType, DefaultValueField));
            }

            //
            yield break;
        }
 internal virtual IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
 {
     return(this.GetAttributes());
 }
Ejemplo n.º 13
0
        internal override IEnumerable<AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            foreach (AttributeData attribute in GetAttributes())
            {
                yield return attribute;
            }

            //// Yield hidden attributes last, order might be important.
            //if (FilterOutDecimalConstantAttribute())
            //{
            //    var containingPEModuleSymbol = _containingType.ContainingPEModule;
            //    yield return new PEAttributeData(containingPEModuleSymbol,
            //                              containingPEModuleSymbol.Module.FindLastTargetAttribute(_handle, AttributeDescription.DecimalConstantAttribute).Handle);
            //}
        }
Ejemplo n.º 14
0
 internal virtual IEnumerable<AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
 {
     return this.GetAttributes();
 }
Ejemplo n.º 15
0
 internal override IEnumerable<AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
 {
     return GetAttributes();
 }
Ejemplo n.º 16
0
 internal override IEnumerable <AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
 {
     return(GetAttributes());
 }
Ejemplo n.º 17
0
        //public override ImmutableArray<AttributeData> GetAttributes()
        //{
        //    if (_lazyCustomAttributes.IsDefault)
        //    {
        //        Debug.Assert(!_handle.IsNil);
        //        var containingPEModuleSymbol = (PEModuleSymbol)this.ContainingModule;

        //        // Filter out ParamArrayAttributes if necessary and cache
        //        // the attribute handle for GetCustomAttributesToEmit
        //        bool filterOutParamArrayAttribute = (!_lazyIsParams.HasValue() || _lazyIsParams.Value());

        //        ConstantValue defaultValue = this.ExplicitDefaultConstantValue;
        //        AttributeDescription filterOutConstantAttributeDescription = default(AttributeDescription);

        //        if ((object)defaultValue != null)
        //        {
        //            if (defaultValue.Discriminator == ConstantValueTypeDiscriminator.DateTime)
        //            {
        //                filterOutConstantAttributeDescription = AttributeDescription.DateTimeConstantAttribute;
        //            }
        //            else if (defaultValue.Discriminator == ConstantValueTypeDiscriminator.Decimal)
        //            {
        //                filterOutConstantAttributeDescription = AttributeDescription.DecimalConstantAttribute;
        //            }
        //        }

        //        if (filterOutParamArrayAttribute || filterOutConstantAttributeDescription.Signatures != null)
        //        {
        //            CustomAttributeHandle paramArrayAttribute;
        //            CustomAttributeHandle constantAttribute;

        //            ImmutableArray<AttributeData> attributes =
        //                containingPEModuleSymbol.GetCustomAttributesForToken(
        //                    _handle,
        //                    out paramArrayAttribute,
        //                    filterOutParamArrayAttribute ? AttributeDescription.ParamArrayAttribute : default(AttributeDescription),
        //                    out constantAttribute,
        //                    filterOutConstantAttributeDescription);

        //            if (!paramArrayAttribute.IsNil || !constantAttribute.IsNil)
        //            {
        //                var builder = ArrayBuilder<AttributeData>.GetInstance();

        //                if (!paramArrayAttribute.IsNil)
        //                {
        //                    builder.Add(new PEAttributeData(containingPEModuleSymbol, paramArrayAttribute));
        //                }

        //                if (!constantAttribute.IsNil)
        //                {
        //                    builder.Add(new PEAttributeData(containingPEModuleSymbol, constantAttribute));
        //                }

        //                ImmutableInterlocked.InterlockedInitialize(ref _lazyHiddenAttributes, builder.ToImmutableAndFree());
        //            }
        //            else
        //            {
        //                ImmutableInterlocked.InterlockedInitialize(ref _lazyHiddenAttributes, ImmutableArray<CSharpAttributeData>.Empty);
        //            }

        //            if (!_lazyIsParams.HasValue())
        //            {
        //                Debug.Assert(filterOutParamArrayAttribute);
        //                _lazyIsParams = (!paramArrayAttribute.IsNil).ToThreeState();
        //            }

        //            ImmutableInterlocked.InterlockedInitialize(
        //                ref _lazyCustomAttributes,
        //                attributes);
        //        }
        //        else
        //        {
        //            ImmutableInterlocked.InterlockedInitialize(ref _lazyHiddenAttributes, ImmutableArray<CSharpAttributeData>.Empty);
        //            containingPEModuleSymbol.LoadCustomAttributes(_handle, ref _lazyCustomAttributes);
        //        }
        //    }

        //    Debug.Assert(!_lazyHiddenAttributes.IsDefault);
        //    return _lazyCustomAttributes;
        //}

        internal override IEnumerable<AttributeData> GetCustomAttributesToEmit(CommonModuleCompilationState compilationState)
        {
            foreach (AttributeData attribute in GetAttributes())
            {
                yield return attribute;
            }

            // Yield hidden attributes last, order might be important.
            foreach (AttributeData attribute in _lazyHiddenAttributes)
            {
                yield return attribute;
            }
        }