예제 #1
0
        public TypeDecl(
            Text.Span span, Text.Span headingSpan,
            bool isConditional, PhpMemberAttributes memberAttributes, bool isPartial,
            List <FormalTypeParam> /*!*/ genericParams, INamedTypeRef baseClass,
            List <INamedTypeRef> /*!*/ implementsList, List <TypeMemberDecl> /*!*/ elements, Text.Span bodySpan,
            List <CustomAttribute> attributes)
            : base(span)
        {
            Debug.Assert(genericParams != null && implementsList != null && elements != null);
            Debug.Assert((memberAttributes & PhpMemberAttributes.Trait) == 0 || (memberAttributes & PhpMemberAttributes.Interface) == 0, "Interface cannot be a trait");

            this.typeSignature    = new TypeSignature(genericParams);
            this.baseClass        = baseClass;
            this.MemberAttributes = memberAttributes;
            this.IsConditional    = isConditional;
            this.ImplementsList   = implementsList.AsArray();
            this.members          = elements;
            this.members.TrimExcess();

            if (attributes != null && attributes.Count != 0)
            {
                this.Attributes = new CustomAttributes(attributes);
            }
            this.headingSpan    = headingSpan;
            this.bodySpan       = bodySpan;
            this.partialKeyword = isPartial;
        }
예제 #2
0
 public AnonymousTypeDecl(
     Text.Span span, Text.Span headingSpan,
     bool isConditional, PhpMemberAttributes memberAttributes, bool isPartial,
     IList <FormalTypeParam> /*!*/ genericParams, INamedTypeRef baseClass,
     IList <INamedTypeRef> /*!*/ implementsList, IList <TypeMemberDecl> /*!*/ elements, Text.Span bodySpan)
     : base(span, headingSpan, isConditional,
            memberAttributes, isPartial, genericParams, baseClass, implementsList, elements, bodySpan)
 {
 }
예제 #3
0
 private void VisitINamedTypeRef(INamedTypeRef tref)
 {
     if (tref is ClassTypeRef)
     {
         VisitClassTypeRef((ClassTypeRef)tref);
     }
     else
     {
         VisitTranslatedTypeRef((TranslatedTypeRef)tref);
     }
 }
예제 #4
0
        public NamedTypeDecl(
            Text.Span span, Text.Span headingSpan, bool isConditional, PhpMemberAttributes memberAttributes, bool isPartial,
            NameRef className, IList <FormalTypeParam> /*!*/ genericParams, INamedTypeRef baseClass,
            IList <INamedTypeRef> /*!*/ implementsList, IList <TypeMemberDecl> /*!*/ elements, Text.Span bodySpan)
            : base(span, headingSpan, isConditional,
                   memberAttributes, isPartial, genericParams, baseClass, implementsList, elements, bodySpan)
        {
            Debug.Assert(genericParams != null && implementsList != null && elements != null);
            Debug.Assert((memberAttributes & PhpMemberAttributes.Trait) == 0 || (memberAttributes & PhpMemberAttributes.Interface) == 0, "Interface cannot be a trait");

            this.name = className;
        }
예제 #5
0
 private void VisitNamedTypeRef(INamedTypeRef tref) => VisitElement((TypeRef)tref);
예제 #6
0
 public virtual TypeRef AnonymousTypeReference(Span span, Span headingSpan, bool conditional, PhpMemberAttributes attributes, IEnumerable <FormalTypeParam> typeParamsOpt, INamedTypeRef baseClassOpt, IEnumerable <INamedTypeRef> implements, IEnumerable <LangElement> members, Span bodySpan)
 {
     Debug.Assert(members != null && implements != null);
     return(new AnonymousTypeRef(span, new AnonymousTypeDecl(span, headingSpan,
                                                             conditional, attributes, false, typeParamsOpt.AsArray(),
                                                             baseClassOpt, implements.AsArray(), members.CastToArray <TypeMemberDecl>(),
                                                             bodySpan)));
 }
예제 #7
0
        public override TypeRef AnonymousTypeReference(Span span, Span headingSpan, bool conditional, PhpMemberAttributes attributes, IEnumerable <FormalTypeParam> typeParamsOpt, INamedTypeRef baseClassOpt, IEnumerable <INamedTypeRef> implements, IEnumerable <LangElement> members, Span bodySpan)
        {
            var tref = (AnonymousTypeRef)base.AnonymousTypeReference(span, headingSpan, conditional, attributes, typeParamsOpt, baseClassOpt, implements, members, bodySpan);

            AddAndReturn(ref _types, tref.TypeDeclaration);

            return(tref);
        }
예제 #8
0
 public override LangElement Type(Span span, Span headingSpan, bool conditional, PhpMemberAttributes attributes, Name name, Span nameSpan, IEnumerable <FormalTypeParam> typeParamsOpt, INamedTypeRef baseClassOpt, IEnumerable <INamedTypeRef> implements, IEnumerable <LangElement> members, Span bodySpan)
 {
     return(AddAndReturn(ref _types,
                         (TypeDecl)base.Type(span, headingSpan, conditional, attributes, name, nameSpan, typeParamsOpt, baseClassOpt, implements, members, bodySpan)));
 }
예제 #9
0
            public override LangElement Type(Span span, Span headingSpan, bool conditional, PhpMemberAttributes attributes, Name name, Span nameSpan, IEnumerable <FormalTypeParam> typeParamsOpt, INamedTypeRef baseClassOpt, IEnumerable <INamedTypeRef> implements, IEnumerable <LangElement> members, Span bodySpan)
            {
                var imp = implements != null?implements.ToList() : null;

                return(CountLE(base.Type(span, headingSpan, conditional, attributes, name, nameSpan, typeParamsOpt, baseClassOpt, imp, members, bodySpan)));
            }
예제 #10
0
            => (ActualParam)CountLE(base.ActualParameter(span, expr, flags));     // TODO - replace definitions by interfaces

            public override TypeRef AnonymousTypeReference(Span span, Span headingSpan, bool conditional, PhpMemberAttributes attributes, IEnumerable <FormalTypeParam> typeParamsOpt, INamedTypeRef baseClassOpt, IEnumerable <INamedTypeRef> implements, IEnumerable <LangElement> members, Span blockSpan)
            {
                // TODO - AnonymousTypeRef internaly creates AnonymousTypeDecl
                var reference = CountTR(base.AnonymousTypeReference(span, headingSpan, conditional, attributes, typeParamsOpt, baseClassOpt, implements, members, blockSpan));

                _createdElements.Add(((AnonymousTypeRef)reference).TypeDeclaration);
                return(reference);
            }
예제 #11
0
 public virtual TypeRef AnonymousTypeReference(Span span, Span headingSpan, bool conditional, PhpMemberAttributes attributes, IEnumerable <FormalTypeParam> typeParamsOpt, INamedTypeRef baseClassOpt, IEnumerable <INamedTypeRef> implements, IEnumerable <LangElement> members, Span bodySpan)
 {
     Debug.Assert(members != null && implements != null);
     return(new AnonymousTypeRef(span, new AnonymousTypeDecl(span, headingSpan,
                                                             conditional, attributes, false, (typeParamsOpt != null) ? typeParamsOpt.ToList() : FormalTypeParam.EmptyList,
                                                             baseClassOpt, implements.ToList(), ConvertList <TypeMemberDecl>(members), bodySpan, null)));
 }
예제 #12
0
 internal TypeSymbol ResolveType(INamedTypeRef dtype)
 {
     return (TypeSymbol)_model.GetType(dtype.ClassName);
 }