|
||
set_container_walker.hGo to the documentation of this file.00001 // $Id: set_container_walker.h,v 1.6 2003/08/07 23:13:53 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_SET_CONTAINER_WALKER_H 00039 #define CBZ_SET_CONTAINER_WALKER_H 00040 00041 00045 class set_container_walker : public Walker 00046 { 00047 00048 public: 00049 00050 static void fixup(Node * n); 00051 00052 private: 00053 00054 stmt_list _stack; 00055 00056 procNode * _current_proc; 00057 00058 stmtNode * nearest(); 00059 switchNode * nearest_switch(); 00060 loopNode * nearest_loop(); 00061 00062 set_container_walker() 00063 : Walker(Both, Subtree), 00064 _stack() 00065 {} 00066 00067 public: 00068 00069 virtual void at_node(Node * the_node, Order ord) 00070 { } 00071 00072 // -- These are the containers; push or pop them... 00073 00074 virtual void at_switch(switchNode * the_switch, Order ord) 00075 { 00076 if (ord == Preorder) { 00077 _stack.push_front(the_switch); 00078 the_switch->cases().clear(); 00079 } 00080 else _stack.pop_front(); 00081 } 00082 00083 virtual void at_loop(loopNode * the_loop, Order ord) 00084 { 00085 if (ord == Preorder) _stack.push_front(the_loop); 00086 else _stack.pop_front(); 00087 } 00088 00089 // -- These are the containees; find their containers... 00090 00091 virtual void at_case(caseNode * the_case, Order ord); 00092 00093 virtual void at_continue(continueNode * the_continue, Order ord); 00094 00095 virtual void at_break(breakNode * the_break, Order ord); 00096 00097 // -- Also handle return statements... 00098 00099 void at_proc(procNode * the_proc, Order ord) 00100 { 00101 if (ord == Preorder) 00102 _current_proc = the_proc; 00103 else 00104 _current_proc = (procNode *)0; 00105 } 00106 00107 void at_return(returnNode * the_return, Order ord) 00108 { 00109 if (ord == Preorder) 00110 the_return->proc(_current_proc); 00111 } 00112 }; 00113 00114 00115 00116 #endif // CBZ_SET_CONTAINER_WALKER_H |
Generated on August 27, 2003
Back to the C-Breeze home page