as_class_key_to_ss_struct_base.cc

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 #include <lestes/lang/cplus/sem/as_class_key_to_ss_struct_base.g.hh>
00029 #include <lestes/lang/cplus/sem/as_decl.g.hh>
00030 #include <lestes/lang/cplus/sem/sa_class_declaration.m.hh>
00031 #include <lestes/lang/cplus/sem/sa_loggers.hh>
00032 #include <lestes/lang/cplus/sem/ss_declaration.g.hh>
00033 #include <lestes/lang/cplus/sem/ss_misc.g.hh>
00034 #include <lestes/lang/cplus/sem/ss_type.g.hh>
00035 #include <lestes/msg/logger.hh>
00036 #include <lestes/msg/logger_util.hh>
00037 
00038 package(lestes);
00039 package(lang);
00040 package(cplus);
00041 package(sem);
00042 
00043 void as_class_key_to_ss_struct_base::class_or_struct()
00044 {
00045         sa_class_type_logger << "creating ss_class\n" << msg::eolog;
00046         bool is_POD = true;
00047         ::lestes::std::list < srp < ss_base_specifier > >::iterator it = bases->begin();
00048         for ( ; is_POD && it != bases->end() ; ++it ) {
00049                 is_POD = is_POD && (*it)->base_class_get()->POD_get();
00050         }
00051         sa_class_type_logger << "POD:" << is_POD << '\n' << msg::eolog;
00052         sa_class_type_logger << "ss_class::create\n" << msg::eolog;
00053         ptr < ss_class > a_class = ss_class::create(
00054                         decl_seq, /* members */
00055                         ss_decl_seq::root_instance()->declared_by_get(), /* declaration */
00056                         is_POD, /* POD */
00057                         ss_declaration_time::infinity(), /* completition time */
00058                         bases /* bases */
00059                         /* descendants */
00060                         );
00061 
00062         struct_base_set(a_class);
00063 }
00064 
00065 void as_class_key_to_ss_struct_base::visit_as_class_key_class(ptr< as_class_key_class >)
00066 {
00067         class_or_struct();
00068 }
00069 
00070 void as_class_key_to_ss_struct_base::visit_as_class_key_struct(ptr< as_class_key_struct >)
00071 {
00072         class_or_struct();
00073 }
00074 
00075 void as_class_key_to_ss_struct_base::visit_as_class_key_union(ptr< as_class_key_union >)
00076 {
00077         sa_class_type_logger << "creating ss_union\n" << msg::eolog;
00078 
00079         if (!bases->empty()) {
00080                 report << union_shall_not_have_bases << bases->front()->location_get();
00081         }
00082 
00083         sa_class_type_logger << "ss_union::create\n" << msg::eolog;
00084         ptr < ss_union > a_class = ss_union::create(
00085                         decl_seq, /* members */
00086                         ss_decl_seq::root_instance()->declared_by_get(), /* declaration */
00087                         true, /* POD */
00088                         ss_declaration_time::infinity() /* completition time */
00089                         );
00090 
00091         struct_base_set(a_class);
00092 }
00093 
00094 end_package(sem);
00095 end_package(cplus);
00096 end_package(lang);
00097 end_package(lestes);
00098 

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