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___macro_arguments_hh___included 00029 #define lestes__lang__cplus__lex___macro_arguments_hh___included 00030 00031 /*! \file 00032 \brief Macro argument list. 00033 00034 Declaration of macro_arguments class representing list of macro arguments. 00035 \author pt 00036 */ 00037 #include <lestes/common.hh> 00038 #include <lestes/std/vector.hh> 00039 00040 package(lestes); 00041 package(lang); 00042 package(cplus); 00043 package(lex); 00044 00045 // forward declarations to avoid cycle 00046 class token_input; 00047 class macro_argument; 00048 00049 /*! 00050 \brief Macro argument list. 00051 00052 Represents list of macro arguments. Arguments can be empty, which introduces certain 00053 ambiguity when dealing with single empty argument, which is the same as no argument at all. 00054 Such argument list has state == PARSED_EMPTY, length() == 1 and one empty argument. 00055 */ 00056 class macro_arguments: public ::lestes::std::object { 00057 public: 00058 //! Parses argument list. 00059 bool parse(const ptr<token_input> &input); 00060 //! Returns length of the list. 00061 ulint length(void) const; 00062 //! Returns argument at specified index. 00063 ptr<macro_argument> argument_get(ulint index) const; 00064 //! Checks if the arguments match parameter list length. 00065 bool check(ulint pars_length) const; 00066 //! Returns empty list. 00067 static ptr<macro_arguments> create(void); 00068 protected: 00069 //! Creates empty list. 00070 macro_arguments(void); 00071 //! Marks the object. 00072 virtual void gc_mark(void); 00073 private: 00074 //! Type of internal state. 00075 typedef enum { BEGIN, PARSED, PARSED_EMPTY, DEAD } state_type; 00076 //! Internal state of the object. 00077 state_type state; 00078 //! Type of list of macro arguments. 00079 typedef vector< srp<macro_argument> > arguments_type; 00080 //! List of macro arguments. 00081 srp<arguments_type> arguments; 00082 }; 00083 00084 end_package(lex); 00085 end_package(cplus); 00086 end_package(lang); 00087 end_package(lestes); 00088 #endif 00089 /* vim: set ft=lestes : */
1.5.1-20070107