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())); }
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); }
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); } }
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())); }
public override void VisitStructType(StructTypeSyntax node) { var symbol = _semanticModel.GetDeclaredSymbol(node); if (symbol != null) { CreateTag(node.Name, _classificationService.StructIdentifier); } base.VisitStructType(node); }
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); }
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())); }
internal StructSymbol(StructTypeSyntax syntax, Symbol parent, Func<TypeSymbol, IEnumerable<FieldSymbol>> lazyFields) : base(SymbolKind.Struct, syntax.Name.Text, string.Empty, parent, lazyFields) { }
public override IEnumerable <EditorNavigationTarget> VisitStructType(StructTypeSyntax node) { yield return(CreateTypeTarget(node.Name, node.GetTextSpanSafe(), Glyph.Struct, node.Fields)); }
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); }
public StructSymbol GetDeclaredSymbol(StructTypeSyntax syntax) { var result = _bindingResult.GetBoundNode(syntax) as BoundStructType; return result?.StructSymbol; }
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); }
public virtual void VisitStructType(StructTypeSyntax node) { DefaultVisit(node); }
internal StructSymbol(StructTypeSyntax syntax, Symbol parent) : base(SymbolKind.Struct, (syntax.Name != null) ? syntax.Name.Text : "<anonymous struct>", string.Empty, parent) { Syntax = syntax; }
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()); }
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); }
public StructSymbol GetDeclaredSymbol(StructTypeSyntax syntax) { var result = _bindingResult.GetBoundNode(syntax) as BoundStructType; return(result?.StructSymbol); }
public TypeSymbol LookupTypeSymbol(StructTypeSyntax structType) { return(LocalSymbols.OfType <StructSymbol>().FirstOrDefault(x => x.Syntax == structType)); }
private ImmutableArray <StructDefinitionSyntax> GetVisibleDefinitionsFor(StructTypeSyntax syntax) { return(GetStructDefinitionsWith(syntax.Name, syntax.Arity) .Where(def => def.Abstraction <= syntax.Abstraction) .ToImmutableArray()); }
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; }