Exemple #1
0
 public BoundStructType(StructSymbol structSymbol, ImmutableArray<BoundMultipleVariableDeclarations> variables)
     : base(BoundNodeKind.StructType, structSymbol)
 {
     StructSymbol = structSymbol;
     Variables = variables;
 }
        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);
        }
        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());
        }