3 using System.Collections.Generic;
6 using SiliconStudio.Shaders.Ast;
8 namespace SiliconStudio.Shaders.Visitor
16 #region Constructors and Destructors
31 ScopeContainer = scopeContainer;
32 Declarations =
new Dictionary<string, List<IDeclaration>>();
33 Generics =
new Dictionary<string, List<GenericDeclaration>>();
38 #region Public Properties
60 List<IDeclaration> declarationList;
61 if (Declarations.TryGetValue(name, out declarationList))
62 return declarationList;
69 List<GenericDeclaration> declarationList;
70 if (Generics.TryGetValue(name, out declarationList))
71 return declarationList;
78 List<IDeclaration> declarations;
79 if (declaration.
Name != null)
82 string name = declaration.Name.Text;
83 if (
string.IsNullOrEmpty(name))
86 if (!Declarations.TryGetValue(name, out declarations))
88 declarations =
new List<IDeclaration>();
89 Declarations.Add(name, declarations);
94 declarations =
new List<IDeclaration>();
97 var genericsDeclarator = declaration as
IGenerics;
98 if (genericsDeclarator != null)
100 for (
int i = 0; i < genericsDeclarator.GenericParameters.Count; i++)
102 var genericArgument = genericsDeclarator.GenericParameters[i];
103 var genericName = genericArgument.Name.Text;
104 List<GenericDeclaration> generics;
105 if (!Generics.TryGetValue(genericName, out generics))
107 generics =
new List<GenericDeclaration>();
108 Generics.Add(genericName, generics);
111 generics.Add(
new GenericDeclaration(genericArgument.Name, genericsDeclarator, i,
false) { Span = genericArgument.Span });
115 if (!declarations.Contains(declaration))
116 declarations.Add(declaration);
121 foreach (var declaration
in declarations)
122 AddDeclaration(declaration);
127 string name = declaration.Name.Text;
128 if (
string.IsNullOrEmpty(name))
131 List<IDeclaration> declarations;
132 if (Declarations.TryGetValue(name, out declarations))
133 declarations.Remove(declaration);
142 Standard =
new List<IDeclaration>();
143 Generics =
new List<IGenerics>();
152 Standard.Add(declaration);
154 if (genDecl != null && genDecl.GenericParameters.Count > 0)
156 Generics.Add((IGenerics)declaration);
162 Standard.Remove(declaration);
164 Generics.Remove((IGenerics)declaration);
void AddDeclarations(IEnumerable< IDeclaration > declarations)
A tag interface to identify a container for scope declarations.
Identifier Name
Gets or sets the name of this declaration
A generic declaration. This is used internally to identify a generic declaration. ...
A Scope declaration provides a way to retrieve all scope declaration (variable, methods...etc.) and attached nodes.
ScopeDeclaration()
Initializes a new instance of the ScopeDeclaration class.
IEnumerable< GenericDeclaration > FindGenerics(string name)
void RemoveDeclaration(IDeclaration declaration)
void Add(IDeclaration declaration)
An interface used by generic definitions and instance.
List< IGenerics > Generics
ScopeDeclaration(IScopeContainer scopeContainer)
Initializes a new instance of the ScopeDeclaration class.
void Remove(IDeclaration declaration)
void AddDeclaration(IDeclaration declaration)
IEnumerable< IDeclaration > FindDeclaration(string name)
Toplevel interface for a declaration.
List< IDeclaration > Standard