|
||
linker.hGo to the documentation of this file.00001 // $Id: linker.h,v 1.7 2003/08/07 23:13:49 pnav Exp $ 00002 // ---------------------------------------------------------------------- 00003 // 00004 // C-Breeze 00005 // C Compiler Framework 00006 // 00007 // Copyright (c) 2000 University of Texas at Austin 00008 // 00009 // Samuel Z. Guyer 00010 // Daniel A. Jimenez 00011 // Calvin Lin 00012 // 00013 // Permission is hereby granted, free of charge, to any person 00014 // obtaining a copy of this software and associated documentation 00015 // files (the "Software"), to deal in the Software without 00016 // restriction, including without limitation the rights to use, copy, 00017 // modify, merge, publish, distribute, sublicense, and/or sell copies 00018 // of the Software, and to permit persons to whom the Software is 00019 // furnished to do so, subject to the following conditions: 00020 // 00021 // The above copyright notice and this permission notice shall be 00022 // included in all copies or substantial portions of the Software. 00023 // 00024 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00025 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00026 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00027 // NONINFRINGEMENT. IN NO EVENT SHALL THE UNIVERSITY OF TEXAS AT 00028 // AUSTIN BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 00029 // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 00030 // OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00031 // THE SOFTWARE. 00032 // 00033 // We acknowledge the C-to-C Translator from MIT Laboratory for 00034 // Computer Science for inspiring parts of the C-Breeze design. 00035 // 00036 // ---------------------------------------------------------------------- 00037 00038 #ifndef CBZ_LINKER_H 00039 #define CBZ_LINKER_H 00040 00041 typedef map< string, declNode *> decl_name_map; 00042 typedef decl_name_map::iterator decl_name_map_p; 00043 00044 typedef map< declNode *, procNode *> proc_decl_map; 00045 typedef proc_decl_map::iterator proc_decl_map_p; 00046 typedef proc_decl_map::const_iterator proc_decl_map_cp; 00047 00048 typedef map< unitNode *, decl_name_map > unit_decl_name_map; 00049 typedef unit_decl_name_map::iterator unit_decl_name_map_p; 00050 00051 00052 00053 class Linker : public Walker 00054 { 00055 public: 00056 00057 static bool debug; 00058 00059 private: 00060 00063 decl_name_map _external_symbols; 00064 00067 unit_decl_name_map _internal_symbols; 00068 00071 proc_decl_map _procedure_declarations; 00072 00079 decl_name_map _synthetic; 00080 00083 unitNode * current_unit; 00084 00085 public: 00086 00091 Linker(); 00092 00098 ~Linker(); 00099 00105 void clear(); 00106 00114 void link(); 00115 00118 inline const proc_decl_map & procedures() const { return _procedure_declarations; } 00119 00126 virtual void at_id(idNode * the_id, Order ord); 00127 00135 virtual void at_threeAddr(threeAddrNode * ta, Order ord); 00136 00144 virtual void at_call(callNode * call, Order ord); 00145 00146 00149 declNode * lookup_symbol(unitNode * current, string name, bool & is_synthetic_decl); 00150 00156 procNode * lookup_procedure(declNode * decl); 00157 00160 proc_decl_map & procedure_declarations(); 00161 private: 00162 00163 bool create_synthetic(declNode * local_decl); 00164 00165 void process_call(idNode * the_id, callNode * the_call); 00166 }; 00167 00168 #endif // CBZ_LINKER_H |
Generated on August 27, 2003
Back to the C-Breeze home page