AlphaRename.cxx

Go to the documentation of this file.
00001 /**************************************************************************
00002  *
00003  * Copyright (C) 2006, Johns Hopkins University.
00004  * All rights reserved.
00005  *
00006  * Redistribution and use in source and binary forms, with or
00007  * without modification, are permitted provided that the following
00008  * conditions are met:
00009  *
00010  *   - Redistributions of source code must contain the above 
00011  *     copyright notice, this list of conditions, and the following
00012  *     disclaimer. 
00013  *
00014  *   - Redistributions in binary form must reproduce the above
00015  *     copyright notice, this list of conditions, and the following
00016  *     disclaimer in the documentation and/or other materials 
00017  *     provided with the distribution.
00018  *
00019  *   - Neither the names of the copyright holders nor the names of any
00020  *     of any contributors may be used to endorse or promote products
00021  *     derived from this software without specific prior written
00022  *     permission. 
00023  *
00024  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00025  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00026  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00027  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00028  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00029  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00030  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00031  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00032  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00033  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00034  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00035  *
00036  **************************************************************************/
00037 
00038 #include <stdint.h>
00039 #include <stdlib.h>
00040 #include <dirent.h>
00041 #include <fstream>
00042 #include <iostream>
00043 #include <string>
00044 #include <sstream>
00045 #include <libsherpa/UExcept.hxx>
00046 #include <libsherpa/CVector.hxx>
00047 #include <libsherpa/avl.hxx>
00048 #include <assert.h>
00049 #include "AST.hxx"
00050 
00051 using namespace sherpa;
00052 
00053 unsigned long tmpNameCounter = 0;
00054 
00055 // Alpha rename is currently not being employed
00056 
00057 void
00058 AlphaRename(AST *ast)
00059 {
00060   switch(ast->astType) {
00061   case at_ident:
00062     {
00063       if (ast->isGlobal())
00064         break;
00065 
00066       if (ast->symbolDef) {     // use occurrence, copy from defining
00067         assert(!ast->isGlobal());
00068 
00069         if (ast->symbolDef->identFlags & ID_IS_GENSYM) {
00070           ast->s = ast->symbolDef->s;
00071           ast->identFlags |= ID_IS_GENSYM;
00072         }
00073       }
00074       else {                    // defining occurrence
00075         if (!ast->isGlobal()) {
00076           std::stringstream ss;
00077           ss << "an_" << tmpNameCounter++;
00078           ast->s = ss.str();
00079           ast->identFlags |= ID_IS_GENSYM;
00080         }
00081       }
00082 
00083       break;
00084     }
00085 
00086   default:
00087     break;
00088   }
00089 
00090   for (size_t i = 0; i < ast->children.size(); i++) {
00091     AlphaRename(ast->children[i]);
00092   }
00093 }

Generated on Fri Feb 10 07:59:19 2012 for BitC Compiler by  doxygen 1.4.7