Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
ParadoxReplaceExtern.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 SiliconStudio.Shaders.Ast;
4 using SiliconStudio.Shaders.Visitor;
5 
6 namespace SiliconStudio.Paradox.Shaders.Parser.Mixins
7 {
8  internal class ParadoxReplaceExtern : ShaderVisitor
9  {
10  #region Private members
11 
12  /// <summary>
13  /// The variable to replace
14  /// </summary>
15  private Variable VariableToReplace = null;
16 
17  /// <summary>
18  /// the expression that will replace the variable
19  /// </summary>
20  private IndexerExpression IndexerReplacement = null;
21 
22  #endregion
23 
24  #region Constructor
25 
26  public ParadoxReplaceExtern(Variable variable, IndexerExpression expression)
27  : base(false, true)
28  {
29  VariableToReplace = variable;
30  IndexerReplacement = expression;
31  }
32 
33  public void Run(Node initialNode)
34  {
35  Visit(initialNode);
36  }
37 
38  #endregion
39 
40  [Visit]
41  protected Node Visit(MemberReferenceExpression expression)
42  {
43  Visit((Node)expression);
44  if (expression.Member.Text == VariableToReplace.Name.Text)
45  return new IndexerExpression(new MemberReferenceExpression(expression.Target, (IndexerReplacement.Target as VariableReferenceExpression).Name.Text), IndexerReplacement.Index);
46 
47  return expression;
48  }
49 
50  [Visit]
51  protected Node Visit(VariableReferenceExpression expression)
52  {
53  Visit((Node)expression);
54  if (expression.Name.Text == VariableToReplace.Name.Text)
55  return IndexerReplacement;
56 
57  return expression;
58  }
59  }
60 }
string Text
Gets or sets the name.
Definition: Identifier.cs:77
Abstract node.
Definition: Node.cs:15
A variable declaration.
Definition: Variable.cs:11
A member reference in the form {this}.{Name}
document false