Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
CallstackVisitor.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;
4 using System.Linq;
5 using SiliconStudio.Shaders.Ast;
6 using SiliconStudio.Shaders.Visitor;
7 
8 namespace SiliconStudio.Shaders.Convertor
9 {
11  {
12 
13  public CallstackVisitor() : base(true, true)
14  {
15  }
16 
17  public virtual void Run(MethodDefinition methodEntry)
18  {
19  this.Visit((Node)methodEntry);
20  }
21 
22  [Visit]
23  protected virtual void Visit(MethodInvocationExpression methodInvocationExpression)
24  {
25  // Visit childrens first
26  Visit((Node)methodInvocationExpression);
27 
28  var nestedMethodRef = methodInvocationExpression.Target as VariableReferenceExpression;
29 
30  if (nestedMethodRef != null)
31  {
32  var nestedMethod = nestedMethodRef.TypeInference.Declaration as MethodDefinition;
33  if (nestedMethod != null && !nestedMethod.IsBuiltin)
34  {
35  this.ProcessMethodInvocation(methodInvocationExpression, nestedMethod);
36  }
37  }
38  }
39 
41  {
42  this.VisitDynamic(method);
43  }
44  }
45 }
A method definition with a body of statements.
Abstract node.
Definition: Node.cs:15
virtual void Run(MethodDefinition methodEntry)
virtual void ProcessMethodInvocation(MethodInvocationExpression invoke, MethodDefinition method)
virtual void Visit(MethodInvocationExpression methodInvocationExpression)