condition_stack.hh

Go to the documentation of this file.
00001 /*
00002    The lestes compiler suite
00003    Copyright (C) 2002, 2003, 2004, 2005 Miroslav Tichy
00004    Copyright (C) 2002, 2003, 2004, 2005 Petr Zika
00005    Copyright (C) 2002, 2003, 2004, 2005 Vojtech Hala
00006    Copyright (C) 2002, 2003, 2004, 2005 Jiri Kosina
00007    Copyright (C) 2002, 2003, 2004, 2005 Pavel Sanda
00008    Copyright (C) 2002, 2003, 2004, 2005 Jan Zouhar
00009    Copyright (C) 2002, 2003, 2004, 2005 Rudolf Thomas
00010 
00011    This program is free software; you can redistribute it and/or modify
00012    it under the terms of the GNU General Public License as published by
00013    the Free Software Foundation; version 2 of the License.
00014 
00015    This program is distributed in the hope that it will be useful,
00016    but WITHOUT ANY WARRANTY; without even the implied warranty of
00017    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018    GNU General Public License for more details.
00019 
00020    See the full text of the GNU General Public License version 2, and
00021    the limitations in the file doc/LICENSE.
00022 
00023    By accepting the license the licensee waives any and all claims
00024    against the copyright holder(s) related in whole or in part to the
00025    work, its use, and/or the inability to use it.
00026  
00027  */
00028 #ifndef lestes__lang__cplus__lex___condition_stack_hh___included
00029 #define lestes__lang__cplus__lex___condition_stack_hh___included
00030 
00031 /*! \file
00032   \brief Conditional directives stack.
00033 
00034   Declaration of condition class representing stack of
00035   preprocessor conditonal directives.
00036   \author pt
00037 */
00038 #include <lestes/common.hh>
00039 #include <lestes/std/vector.hh>
00040 package(lestes);
00041 
00042 package(std);
00043 // forward declaration to break cycle
00044 class source_location;
00045 end_package(std);
00046 
00047 package(lang);
00048 package(cplus);
00049 package(lex);
00050 
00051 // forward declaration to break cycle
00052 class condition;
00053 
00054 /*!
00055   \brief Conditional directive stack.
00056 
00057   Represents stack of conditional directives.
00058   Holds information in stack of unfinished directives.
00059 */
00060 class condition_stack: public ::lestes::std::object {
00061 public:
00062         //! Types of directives.
00063         typedef enum {
00064                 //! Directive #if.
00065                 DIR_IF = 1,
00066                 //! Directive #ifdef.
00067                 DIR_IFDEF = 2,
00068                 //! Directive #ifndef.
00069                 DIR_IFNDEF = 3,
00070                 //! Directive #elif.
00071                 DIR_ELIF = 4,
00072                 //! Directive #else.
00073                 DIR_ELSE = 5,
00074                 //! Directive #endif.
00075                 DIR_ENDIF = 6,
00076                 //! End of file.
00077                 DIR_EOF = 7
00078         } directive_type;
00079         //! Tests if the output is active.
00080         bool active_get(void) const;
00081         //! Processes a directive.
00082         bool process(directive_type a_dir, bool value, const ptr<source_location> &a_location);
00083         //! Returns depth of the stack.
00084         ulint depth(void) const;
00085         //! Returns new object.
00086         static ptr<condition_stack> create(void);
00087 protected:
00088         //! Creates new object.
00089         condition_stack(void);
00090         //! Marks the object.
00091         virtual void gc_mark(void);
00092 private:   
00093         //! Conditions stack type.
00094         typedef ::lestes::std::vector< srp<condition> > cstack_type;
00095         //! Output activity flag.
00096         bool active;
00097         //! Conditions stack.
00098         srp<cstack_type> cstack;
00099 };
00100 
00101 end_package(lex);
00102 end_package(cplus);
00103 end_package(lang);
00104 end_package(lestes);
00105 
00106 #endif
00107 /* vim: set ft=lestes : */

Generated on Mon Feb 12 18:22:32 2007 for lestes by doxygen 1.5.1-20070107