Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
ParadoxVariableUsageVisitor.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System.Collections.Generic;
4 
5 using SiliconStudio.Paradox.Shaders.Parser.Ast;
6 using SiliconStudio.Shaders.Ast;
7 using SiliconStudio.Shaders.Visitor;
8 
9 namespace SiliconStudio.Paradox.Shaders.Parser.Mixins
10 {
11  internal class ParadoxVariableUsageVisitor : ShaderVisitor
12  {
13  private Dictionary<Variable, bool> VariablesUsages;
14 
15  public ParadoxVariableUsageVisitor(Dictionary<Variable, bool> variablesUsages)
16  : base(false, false)
17  {
18  if (variablesUsages == null)
19  VariablesUsages = new Dictionary<Variable, bool>();
20  else
21  VariablesUsages = variablesUsages;
22  }
23 
24  public void Run(ShaderClassType shaderClassType)
25  {
26  Visit(shaderClassType);
27  }
28 
29  [Visit]
30  private void Visit(VariableReferenceExpression variableReferenceExpression)
31  {
32  Visit((Node)variableReferenceExpression);
33  CheckUsage(variableReferenceExpression.TypeInference.Declaration as Variable);
34  }
35 
36  [Visit]
37  private void Visit(MemberReferenceExpression memberReferenceExpression)
38  {
39  Visit((Node)memberReferenceExpression);
40  CheckUsage(memberReferenceExpression.TypeInference.Declaration as Variable);
41  }
42 
43  private void CheckUsage(Variable variable)
44  {
45  if (variable == null)
46  return;
47 
48  if (VariablesUsages.ContainsKey(variable))
49  VariablesUsages[variable] = true;
50  }
51  }
52 }
Abstract node.
Definition: Node.cs:15
IDeclaration Declaration
Gets or sets the declaration.
TypeInference TypeInference
Gets or sets the type reference.
Definition: Expression.cs:28
A variable declaration.
Definition: Variable.cs:11
A member reference in the form {this}.{Name}
document false