|
||
Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages
meta.hGo to the documentation of this file.00001 // $Id: meta.h,v 1.6 2003/08/07 23:13:34 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_META_H 00039 #define CBZ_META_H 00040 00041 #include "ast.h" 00042 #include "c_breeze.h" 00043 00044 class metaVariable 00045 { 00046 private: 00047 00048 string _name; 00049 00050 public: 00051 00052 metaVariable(string & name) 00053 : _name(name) 00054 {} 00055 00056 inline string & name() { return _name; } 00057 }; 00058 00062 class metaexprNode : public exprNode, 00063 public metaVariable 00064 { 00065 public: 00066 00070 static bool is_meta_expr(char * name); 00071 00075 static void add_meta_expr(char * name); 00076 00080 static void clear(); 00081 00082 private: 00083 00086 static list< string > meta_expr_variables; 00087 00088 public: 00089 00090 metaexprNode(idNode * id) 00091 : exprNode(Meta, 0, id->coord()), 00092 metaVariable(id->name()) 00093 { 00094 delete id; 00095 } 00096 00097 // -- Virtual Functions from exprNode 00098 00099 virtual void eval() {} 00100 00101 // -- Walk and change 00102 00103 virtual void visit(Visitor * the_visitor); 00104 virtual void walk(Walker & the_walker); 00105 virtual Node * change(Changer & the_changer, bool redispatch); 00106 00107 // -- Dataflow 00108 00109 virtual void dataflow(FlowVal * v, FlowProblem & fp); 00110 00111 // -- Clone 00112 00113 virtual Node * clone() const { return new metaexprNode ( *this ); } 00114 00115 // -- Output 00116 00117 virtual void output_expr(output_context & ct, Node * par, int prec, Assoc assoc); 00118 00119 }; 00120 00121 00125 class metastmtNode : public stmtNode, 00126 public metaVariable 00127 { 00128 public: 00129 00133 static bool is_meta_stmt(char * name); 00134 00138 static void add_meta_stmt(char * name); 00139 00143 static void clear(); 00144 00145 private: 00146 00149 static list< string > meta_stmt_variables; 00150 00151 public: 00152 00153 metastmtNode(idNode * id) 00154 : stmtNode(Meta, id->coord()), 00155 metaVariable(id->name()) 00156 { 00157 delete id; 00158 } 00159 00160 // -- Walk and change 00161 00162 virtual void visit(Visitor * the_visitor); 00163 virtual void walk(Walker & the_walker); 00164 virtual Node * change(Changer & the_changer, bool redispatch = false); 00165 00166 // -- Dataflow 00167 00168 virtual void dataflow(FlowVal * v, FlowProblem & fp); 00169 00170 // -- Clone 00171 00172 virtual Node * clone() const { return new metastmtNode ( *this ); } 00173 00174 // -- Output 00175 virtual void output_stmt(output_context & ct, Node * par); 00176 00177 }; 00178 00179 00180 #endif // |
Generated on February 1, 2006
Back to the C-Breeze home page