Home | History | Annotate | Download | only in MachineIndependent
      1 //
      2 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
      3 // Copyright (C) 2013 LunarG, Inc.
      4 //
      5 // All rights reserved.
      6 //
      7 // Redistribution and use in source and binary forms, with or without
      8 // modification, are permitted provided that the following conditions
      9 // are met:
     10 //
     11 //    Redistributions of source code must retain the above copyright
     12 //    notice, this list of conditions and the following disclaimer.
     13 //
     14 //    Redistributions in binary form must reproduce the above
     15 //    copyright notice, this list of conditions and the following
     16 //    disclaimer in the documentation and/or other materials provided
     17 //    with the distribution.
     18 //
     19 //    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
     20 //    contributors may be used to endorse or promote products derived
     21 //    from this software without specific prior written permission.
     22 //
     23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     24 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     25 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     26 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     27 // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     28 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     29 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     30 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     31 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     32 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
     33 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     34 // POSSIBILITY OF SUCH DAMAGE.
     35 //
     36 
     37 #include "../Include/intermediate.h"
     38 #include "RemoveTree.h"
     39 
     40 namespace glslang {
     41 
     42 //
     43 // Code to recursively delete the intermediate tree.
     44 //
     45 struct TRemoveTraverser : TIntermTraverser {
     46     TRemoveTraverser() : TIntermTraverser(false, false, true, false) {}
     47 
     48     virtual void visitSymbol(TIntermSymbol* node)
     49     {
     50         delete node;
     51     }
     52 
     53     virtual bool visitBinary(TVisit /* visit*/ , TIntermBinary* node)
     54     {
     55         delete node;
     56 
     57         return true;
     58     }
     59 
     60     virtual bool visitUnary(TVisit /* visit */, TIntermUnary* node)
     61     {
     62         delete node;
     63 
     64         return true;
     65     }
     66 
     67     virtual bool visitAggregate(TVisit /* visit*/ , TIntermAggregate* node)
     68     {
     69         delete node;
     70 
     71         return true;
     72     }
     73 
     74     virtual bool visitSelection(TVisit /* visit*/ , TIntermSelection* node)
     75     {
     76         delete node;
     77 
     78         return true;
     79     }
     80 
     81     virtual bool visitSwitch(TVisit /* visit*/ , TIntermSwitch* node)
     82     {
     83         delete node;
     84 
     85         return true;
     86     }
     87 
     88     virtual void visitConstantUnion(TIntermConstantUnion* node)
     89     {
     90         delete node;
     91     }
     92 
     93     virtual bool visitLoop(TVisit /* visit*/ , TIntermLoop* node)
     94     {
     95         delete node;
     96 
     97         return true;
     98     }
     99 
    100     virtual bool visitBranch(TVisit /* visit*/ , TIntermBranch* node)
    101     {
    102         delete node;
    103 
    104         return true;
    105     }
    106 };
    107 
    108 //
    109 // Entry point.
    110 //
    111 void RemoveAllTreeNodes(TIntermNode* root)
    112 {
    113     TRemoveTraverser it;
    114 
    115     root->traverse(&it);
    116 }
    117 
    118 } // end namespace glslang
    119