private BoundStructType BindStructDeclaration(StructTypeSyntax declaration, Symbol parent)
        {
            ClassOrStructSymbol    baseType;
            List <InterfaceSymbol> baseInterfaces;

            BindBaseList(declaration.BaseList, parent, out baseType, out baseInterfaces);

            var structSymbol = new StructSymbol(declaration, parent, baseType, baseInterfaces.ToImmutableArray());

            AddSymbol(structSymbol, declaration.Name?.SourceRange ?? declaration.SourceRange);

            var variables    = new List <BoundMultipleVariableDeclarations>();
            var structBinder = new Binder(_sharedBinderState, this);

            foreach (var variableDeclarationStatement in declaration.Fields)
            {
                variables.Add(structBinder.Bind(variableDeclarationStatement, x => structBinder.BindField(x, structSymbol)));
            }

            foreach (var member in structBinder.LocalSymbols.Values.SelectMany(x => x))
            {
                structSymbol.AddMember(member);
            }

            return(new BoundStructType(structSymbol, variables.ToImmutableArray()));
        }
Esempio n. 2
0
        public override void VisitStructType(StructTypeSyntax node)
        {
            var symbol = _semanticModel.GetDeclaredSymbol(node);
            if (symbol != null)
                CreateTag(node.Name, _classificationService.StructIdentifier);

            base.VisitStructType(node);
        }
        //structs

        private StructDefinitionSyntax?GetVisibleDefinitionOrNull(StructTypeSyntax syntax)
        {
            var definitions = GetVisibleDefinitionsFor(syntax);

            return(definitions.Any()
                       ? definitions.First()
                       : null);
        }
Esempio n. 4
0
 public override void VisitStructType(StructTypeSyntax node)
 {
     ProcessItem(node.Name, node.Name.Text, node.GetTextSpanSafe(), NavigateToItemKind.Structure, node.Parent, Glyph.Struct);
     foreach (var member in node.Fields)
     {
         Visit(member);
     }
 }
Esempio n. 5
0
        private BoundStructType BindStructDeclaration(StructTypeSyntax declaration, Symbol parent)
        {
            StructSymbol           baseType;
            List <InterfaceSymbol> baseInterfaces;

            BindBaseList(declaration.BaseList, parent, out baseType, out baseInterfaces);

            var structBinder = new Binder(_sharedBinderState, this);
            var structSymbol = new StructSymbol(declaration, parent, baseType, baseInterfaces.ToImmutableArray(), structBinder);

            if (!structSymbol.IsAnonymous)
            {
                AddSymbol(structSymbol, declaration.Name?.SourceRange ?? declaration.SourceRange);
            }

            var members = new List <BoundNode>();

            // Bit of a hack - need to add member symbols to structSymbol as we go, otherwise (for example)
            // static methods defined inline in a struct won't be able to see struct members.
            var    alreadyAddedMemberSymbols = new List <Symbol>();
            Action addMemberSymbols          = () =>
            {
                var newMemberSymbols = structBinder.LocalSymbols.Values
                                       .SelectMany(x => x)
                                       .Except(alreadyAddedMemberSymbols)
                                       .ToList();
                foreach (var member in newMemberSymbols)
                {
                    structSymbol.AddMember(member);
                    alreadyAddedMemberSymbols.Add(member);
                }
            };

            foreach (var memberSyntax in declaration.Members)
            {
                switch (memberSyntax.Kind)
                {
                case SyntaxKind.VariableDeclarationStatement:
                    members.Add(structBinder.Bind((VariableDeclarationStatementSyntax)memberSyntax, x => structBinder.BindField(x, structSymbol)));
                    addMemberSymbols();
                    break;

                case SyntaxKind.FunctionDeclaration:
                    members.Add(structBinder.Bind((FunctionDeclarationSyntax)memberSyntax, x => structBinder.BindFunctionDeclaration(x, structSymbol)));
                    addMemberSymbols();
                    break;

                case SyntaxKind.FunctionDefinition:
                    members.Add(structBinder.Bind((FunctionDefinitionSyntax)memberSyntax, x => structBinder.BindFunctionDefinition(x, structSymbol)));
                    addMemberSymbols();
                    break;
                }
            }

            return(new BoundStructType(structSymbol, members.ToImmutableArray()));
        }
Esempio n. 6
0
        public override void VisitStructType(StructTypeSyntax node)
        {
            var symbol = _semanticModel.GetDeclaredSymbol(node);

            if (symbol != null)
            {
                CreateTag(node.Name, _classificationService.StructIdentifier);
            }

            base.VisitStructType(node);
        }
Esempio n. 7
0
        public override void VisitStructType(StructTypeSyntax node)
        {
            var symbol = _semanticModel.GetDeclaredSymbol(node);

            if (symbol != null)
            {
                CreateTag(node.Name, node.IsClass ? HlslClassificationTypeNames.ClassIdentifier : HlslClassificationTypeNames.StructIdentifier);
            }

            base.VisitStructType(node);
        }
        internal StructSymbol(StructTypeSyntax syntax, Symbol parent, StructSymbol baseType, ImmutableArray <InterfaceSymbol> baseInterfaces, Binder binder)
            : base(syntax.IsClass ? SymbolKind.Class : SymbolKind.Struct, (syntax.Name != null) ? syntax.Name.Text : "<anonymous struct>", string.Empty, parent)
        {
            Syntax         = syntax;
            BaseType       = baseType;
            BaseInterfaces = baseInterfaces;
            Binder         = binder;

            Locations = syntax.Name != null
                ? ImmutableArray.Create(syntax.Name.SourceRange)
                : ImmutableArray <SourceRange> .Empty;

            DeclaringSyntaxNodes = ImmutableArray.Create((SyntaxNodeBase)syntax);
        }
Esempio n. 9
0
        private void BindStructDeclaration(StructTypeSyntax declaration)
        {
            Func <TypeSymbol, IEnumerable <FieldSymbol> > lazyMemberSymbols = cd =>
            {
                var memberSymbols = new List <FieldSymbol>();
                foreach (var memberSyntax in declaration.Fields)
                {
                    memberSymbols.AddRange(BindFields(memberSyntax, cd));
                }
                return(memberSymbols);
            };

            var symbol = new StructSymbol(declaration, null, lazyMemberSymbols);

            _bindingResult.AddSymbol(declaration, symbol);

            _symbolSet.AddGlobal(symbol);
        }
Esempio n. 10
0
        private BoundStructType BindStructDeclaration(StructTypeSyntax declaration, Symbol parent)
        {
            var structSymbol = new StructSymbol(declaration, parent);

            AddSymbol(structSymbol, declaration.Name?.Span ?? declaration.GetTextSpanSafe());

            var variables    = new List <BoundMultipleVariableDeclarations>();
            var structBinder = new Binder(_sharedBinderState, this);

            foreach (var variableDeclarationStatement in declaration.Fields)
            {
                variables.Add(structBinder.Bind(variableDeclarationStatement, x => structBinder.BindField(x, structSymbol)));
            }

            foreach (var member in structBinder.LocalSymbols.Values.SelectMany(x => x))
            {
                structSymbol.AddMember(member);
            }

            return(new BoundStructType(structSymbol, variables.ToImmutableArray()));
        }
Esempio n. 12
0
 internal StructSymbol(StructTypeSyntax syntax, Symbol parent, Func<TypeSymbol, IEnumerable<FieldSymbol>> lazyFields)
     : base(SymbolKind.Struct, syntax.Name.Text, string.Empty, parent, lazyFields)
 {
 }
Esempio n. 13
0
 public override IEnumerable <EditorNavigationTarget> VisitStructType(StructTypeSyntax node)
 {
     yield return(CreateTypeTarget(node.Name, node.GetTextSpanSafe(), Glyph.Struct, node.Fields));
 }
Esempio n. 14
0
 internal StructSymbol(StructTypeSyntax syntax, Symbol parent, ClassOrStructSymbol baseType, ImmutableArray <InterfaceSymbol> baseInterfaces)
     : base(SymbolKind.Struct, (syntax.Name != null) ? syntax.Name.Text : "<anonymous struct>", parent, baseType, baseInterfaces)
 {
     Syntax = syntax;
 }
        public override void VisitStructType(StructTypeSyntax node)
        {
            CreateTag(node.Name, _classificationService.ClassIdentifier);

            base.VisitStructType(node);
        }
Esempio n. 16
0
 public StructSymbol GetDeclaredSymbol(StructTypeSyntax syntax)
 {
     var result = _bindingResult.GetBoundNode(syntax) as BoundStructType;
     return result?.StructSymbol;
 }
Esempio n. 17
0
        private void BindStructDeclaration(StructTypeSyntax declaration)
        {
            Func<TypeSymbol, IEnumerable<FieldSymbol>> lazyMemberSymbols = cd =>
            {
                var memberSymbols = new List<FieldSymbol>();
                foreach (var memberSyntax in declaration.Fields)
                    memberSymbols.AddRange(BindFields(memberSyntax, cd));
                return memberSymbols;
            };

            var symbol = new StructSymbol(declaration, null, lazyMemberSymbols);
            _bindingResult.AddSymbol(declaration, symbol);

            _symbolSet.AddGlobal(symbol);
        }
Esempio n. 18
0
 public virtual void VisitStructType(StructTypeSyntax node)
 {
     DefaultVisit(node);
 }
Esempio n. 19
0
 internal StructSymbol(StructTypeSyntax syntax, Symbol parent)
     : base(SymbolKind.Struct, (syntax.Name != null) ? syntax.Name.Text : "<anonymous struct>", string.Empty, parent)
 {
     Syntax = syntax;
 }
Esempio n. 20
0
 public virtual void VisitStructType(StructTypeSyntax node)
 {
     DefaultVisit(node);
 }
Esempio n. 21
0
        private BoundStructType BindStructDeclaration(StructTypeSyntax declaration, Symbol parent)
        {
            ClassOrStructSymbol baseType;
            List<InterfaceSymbol> baseInterfaces;
            BindBaseList(declaration.BaseList, parent, out baseType, out baseInterfaces);

            var structSymbol = new StructSymbol(declaration, parent, baseType, baseInterfaces.ToImmutableArray());
            AddSymbol(structSymbol, declaration.Name?.Span ?? declaration.GetTextSpanSafe());

            var variables = new List<BoundMultipleVariableDeclarations>();
            var structBinder = new Binder(_sharedBinderState, this);
            foreach (var variableDeclarationStatement in declaration.Fields)
                variables.Add(structBinder.Bind(variableDeclarationStatement, x => structBinder.BindField(x, structSymbol)));

            foreach (var member in structBinder.LocalSymbols.Values.SelectMany(x => x))
                structSymbol.AddMember(member);

            return new BoundStructType(structSymbol, variables.ToImmutableArray());
        }
Esempio n. 22
0
 public override void VisitStructType(StructTypeSyntax node)
 {
     ProcessItem(node.Name, node.Name.Text, node.GetTextSpanSafe(), NavigateToItemKind.Structure, node.Parent, Glyph.Struct);
     foreach (var member in node.Fields)
         Visit(member);
 }
Esempio n. 23
0
        public StructSymbol GetDeclaredSymbol(StructTypeSyntax syntax)
        {
            var result = _bindingResult.GetBoundNode(syntax) as BoundStructType;

            return(result?.StructSymbol);
        }
Esempio n. 24
0
 public TypeSymbol LookupTypeSymbol(StructTypeSyntax structType)
 {
     return(LocalSymbols.OfType <StructSymbol>().FirstOrDefault(x => x.Syntax == structType));
 }
Esempio n. 25
0

        
 private ImmutableArray <StructDefinitionSyntax> GetVisibleDefinitionsFor(StructTypeSyntax syntax)
 {
     return(GetStructDefinitionsWith(syntax.Name, syntax.Arity)
            .Where(def => def.Abstraction <= syntax.Abstraction)
            .ToImmutableArray());
 }
Esempio n. 27
0
        public override void VisitStructType(StructTypeSyntax node)
        {
            CreateTag(node.Name, _classificationService.ClassIdentifier);

            base.VisitStructType(node);
        }
Esempio n. 28
0

        
Esempio n. 29
0
 internal StructSymbol(StructTypeSyntax syntax, Symbol parent, ClassOrStructSymbol baseType, ImmutableArray<InterfaceSymbol> baseInterfaces)
     : base(SymbolKind.Struct, (syntax.Name != null) ? syntax.Name.Text : "<anonymous struct>", parent, baseType, baseInterfaces)
 {
     Syntax = syntax;
 }