Home | History | Annotate | Download | only in compiler
      1 //
      2 // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 #ifndef COMPILER_RENAME_FUNCTION
      8 #define COMPILER_RENAME_FUNCTION
      9 
     10 #include "compiler/intermediate.h"
     11 
     12 //
     13 // Renames a function, including its declaration and any calls to it.
     14 //
     15 class RenameFunction : public TIntermTraverser
     16 {
     17 public:
     18     RenameFunction(const TString& oldFunctionName, const TString& newFunctionName)
     19     : TIntermTraverser(true, false, false)
     20     , mOldFunctionName(oldFunctionName)
     21     , mNewFunctionName(newFunctionName) {}
     22 
     23     virtual bool visitAggregate(Visit visit, TIntermAggregate* node)
     24     {
     25         TOperator op = node->getOp();
     26         if ((op == EOpFunction || op == EOpFunctionCall) && node->getName() == mOldFunctionName)
     27             node->setName(mNewFunctionName);
     28         return true;
     29     }
     30 
     31 private:
     32     const TString mOldFunctionName;
     33     const TString mNewFunctionName;
     34 };
     35 
     36 #endif  // COMPILER_RENAME_FUNCTION
     37