#include <sa_namespace.g.hh>
Inheritance diagram for lestes::lang::cplus::sem::sa_namespace_definition:

Public Member Functions | |
| bool | result_get () const |
| The method result_get returns the value of the field sa_namespace_definition::result. | |
| void | result_set (bool) |
| The method result_set sets the field sa_namespace_definition::result to the given value. | |
| void | process_named (ptr< as_name > name) |
| void | process_unnamed (ptr< ::lestes::std::source_location > location) |
| void | process_end () |
| virtual void | default_action (ptr< ::lestes::lang::cplus::sem::ss_declaration >) |
| virtual void | visit_ss_namespace_definition (ptr< ::lestes::lang::cplus::sem::ss_namespace_definition >) |
| bool | error_check (const ptr< ::lestes::lang::cplus::sem::ss_declaration > &) |
| "visit-return" method | |
| virtual ptr< reflection_list > | reflection_get () const |
| for purposes of dumping | |
| virtual ptr< field_list_list > | field_values_get () const |
| for purposes of dumping | |
Static Public Member Functions | |
| static ptr< sa_namespace_definition > | instance () |
| Generated instance() method for singleton class sa_namespace_definition. | |
Protected Member Functions | |
| sa_namespace_definition (bool a__sa_namespace_definition__result) | |
| Generated constructor for class sa_namespace_definition. | |
| virtual void | gc_mark () |
| Marking routine for class sa_namespace_definition. | |
Private Attributes | |
| bool | result |
| Was the visited declaration a namespace definition? | |
Static Private Attributes | |
| static ptr< reflection_list > | reflection = reflection |
| static ptr< sa_namespace_definition > | the_instance = the_instance |
Definition at line 33 of file sa_namespace.g.hh.
| lestes::lang::cplus::sem::sa_namespace_definition::sa_namespace_definition | ( | bool | a__sa_namespace_definition__result | ) | [protected] |
Generated constructor for class sa_namespace_definition.
Generated constructor for class sa_namespace_definition.
Definition at line 56 of file sa_namespace.g.cc.
Referenced by instance().
00057 : ss_declaration_default_visitor(), result(a__sa_namespace_definition__result) 00058 {}
| bool lestes::lang::cplus::sem::sa_namespace_definition::result_get | ( | ) | const |
The method result_get returns the value of the field sa_namespace_definition::result.
Definition at line 23 of file sa_namespace.g.cc.
References result.
Referenced by error_check().
00024 { 00025 return result; 00026 }
| void lestes::lang::cplus::sem::sa_namespace_definition::result_set | ( | bool | x | ) |
The method result_set sets the field sa_namespace_definition::result to the given value.
| [in] | x | The new value to set sa_namespace_definition::result to. |
Definition at line 32 of file sa_namespace.g.cc.
References result.
00033 { 00034 sa_namespace_definition::result = x; 00035 }
| void lestes::lang::cplus::sem::sa_namespace_definition::process_named | ( | ptr< as_name > | name | ) |
Definition at line 50 of file sa_namespace.cc.
References lestes::lang::cplus::sem::ss_access_specifier::ACCESS_PUBLIC, lestes::lang::cplus::sem::sa_sa_context::create(), lestes::lang::cplus::sem::sa_ss_context::create(), lestes::lang::cplus::sem::sa_as_context::create(), lestes::lang::cplus::sem::sa_context::create(), lestes::lang::cplus::sem::ss_linkage::create(), lestes::intercode::intercode::create(), lestes::lang::cplus::sem::ss_declaration_time::create(), lestes::lang::cplus::sem::declared_here, error_check(), lestes::lang::cplus::sem::ss_void::instance(), lestes::lang::cplus::sem::sa_decl_seq_compound_pair_creator::instance(), lestes::lang::cplus::sem::li_by_name_in_single_scope::instance(), lestes::lang::cplus::sem::as_id_to_ss_decl_name::instance(), lestes::lang::cplus::sem::sa_context_manager::instance(), lassert, lestes::lang::cplus::sem::ss_linkage::LINKAGE_EXTERNAL, loc, lestes::lang::cplus::sem::name_already_declared, and lestes::report.
00051 { 00052 ptr<source_location> loc = name->location_get(); 00053 ptr<ss_declaration_time> time = ss_declaration_time::create( loc->order_get() ); 00054 ptr<ss_decl_seq> curr_scope = 00055 sa_context_manager::instance()->current()->ss_get()->scope_get(); 00056 ptr<ss_decl_name> decl_name = 00057 as_id_to_ss_decl_name::instance()->process( name->identifier_get() ); 00058 00059 /* 00060 * we MUST NOT rely on the lookup performed by the hinter, 00061 * as that processes using directives (which we want to ignore) 00062 */ 00063 ptr<declaration_set_type> decls = 00064 li_by_name_in_single_scope::instance()->process( decl_name, curr_scope ); 00065 00066 bool is_new = true; 00067 if (!decls->empty()) { 00068 if (error_check( *decls->begin() )) { 00069 /* something with the same name is already declared and it is not a namespace... 00070 * scream, but create the namespace anyway; with a dummy name, that is ;-) 00071 */ 00072 report << name_already_declared << name->identifier_get() << loc; 00073 for ( declaration_set_type::iterator it = decls->begin(); it != decls->end(); ++it ) 00074 report << declared_here << (*it)->location_get(); 00075 decl_name = ss_dummy_name::create( loc ); 00076 } else { 00077 lassert( decls->size() == 1 ); 00078 /* there is only one declaration with that name in current scope AND 00079 * it is a namespace definition, therefore it must be the one to extend 00080 */ 00081 is_new = false; 00082 } 00083 } 00084 if (is_new) { 00085 ptr<ss_decl_seq> new_scope = 00086 sa_decl_seq_compound_pair_creator::instance()->process( 00087 loc, curr_scope, curr_scope->compound_stmt_get() )->first; 00088 ptr<ss_declaration> decl = ss_namespace_definition::create( 00089 loc, time, time, decl_name, curr_scope, ss_void::instance(), 00090 ss_linkage::create( "C++", ss_linkage::LINKAGE_EXTERNAL ), new_scope ); 00091 curr_scope->contents_get()->push_back( decl ); 00092 new_scope->declared_by_set( decl ); 00093 00094 sa_context_manager::instance()->push( 00095 sa_context::create( 00096 sa_as_context::create( name, 00097 as_access_specifier_public::create(loc) ), 00098 sa_ss_context::create( new_scope, 00099 ss_access_specifier::ACCESS_PUBLIC ), 00100 sa_sa_context::create() 00101 ) 00102 ); 00103 } else { 00104 ptr<ss_namespace_definition> nsd = decls->begin()->dncast<ss_namespace_definition>(); 00105 00106 sa_context_manager::instance()->push( 00107 sa_context::create( 00108 sa_as_context::create( name, 00109 as_access_specifier_public::create(loc) ), 00110 sa_ss_context::create( nsd->body_get(), 00111 ss_access_specifier::ACCESS_PUBLIC ), 00112 sa_sa_context::create() 00113 ) 00114 ); 00115 } 00116 }
| void lestes::lang::cplus::sem::sa_namespace_definition::process_unnamed | ( | ptr< ::lestes::std::source_location > | location | ) |
| void lestes::lang::cplus::sem::sa_namespace_definition::process_end | ( | ) |
Definition at line 134 of file sa_namespace.cc.
References lestes::lang::cplus::sem::sa_context_manager::instance().
00135 { 00136 sa_context_manager::instance()->pop(); 00137 }
| virtual void lestes::lang::cplus::sem::sa_namespace_definition::default_action | ( | ptr< ::lestes::lang::cplus::sem::ss_declaration > | ) | [virtual] |
| virtual void lestes::lang::cplus::sem::sa_namespace_definition::visit_ss_namespace_definition | ( | ptr< ::lestes::lang::cplus::sem::ss_namespace_definition > | ) | [virtual] |
Reimplemented from lestes::lang::cplus::sem::ss_declaration_default_visitor.
| ptr< sa_namespace_definition > lestes::lang::cplus::sem::sa_namespace_definition::instance | ( | void | ) | [static] |
Generated instance() method for singleton class sa_namespace_definition.
Generated instance() method for singleton class sa_namespace_definition.
Definition at line 47 of file sa_namespace.g.cc.
References sa_namespace_definition(), and the_instance.
00048 { 00049 return the_instance ? the_instance : the_instance = new sa_namespace_definition(false); 00050 }
| bool lestes::lang::cplus::sem::sa_namespace_definition::error_check | ( | const ptr< ::lestes::lang::cplus::sem::ss_declaration > & | ) |
"visit-return" method
Definition at line 81 of file sa_namespace.g.cc.
References lassert2, and result_get().
Referenced by process_named().
00082 { 00083 lassert2( o, "Cannot visit NULL object." ); 00084 o->accept_ss_declaration_visitor( ptr< ss_declaration_visitor >(this) ); 00085 return result_get(); 00086 }
| ptr< object::reflection_list > lestes::lang::cplus::sem::sa_namespace_definition::reflection_get | ( | ) | const [virtual] |
for purposes of dumping
Reimplemented from lestes::lang::cplus::sem::ss_declaration_default_visitor.
Definition at line 60 of file sa_namespace.g.cc.
References lestes::std::list< T >::create(), reflection, and lestes::lang::cplus::sem::ss_declaration_default_visitor::reflection_get().
00061 { 00062 if (!reflection) { 00063 typedef class_reflection::field_metadata md; 00064 typedef class_reflection::field_metadata_list mdlist; 00065 ptr<mdlist> mdl = mdlist::create(); 00066 mdl->push_back( md::create( "result", "bool" ) ); 00067 reflection = reflection_list::create( ss_declaration_default_visitor::reflection_get() ); 00068 reflection->push_back( class_reflection::create( "sa_namespace_definition", mdl ) ); 00069 } 00070 return reflection; 00071 }
| ptr< object::field_list_list > lestes::lang::cplus::sem::sa_namespace_definition::field_values_get | ( | ) | const [virtual] |
for purposes of dumping
Reimplemented from lestes::lang::cplus::sem::ss_declaration_default_visitor.
Definition at line 73 of file sa_namespace.g.cc.
References lestes::std::list< T >::create(), lestes::lang::cplus::sem::ss_declaration_default_visitor::field_values_get(), and result.
00074 { 00075 ptr < field_list_list > result = ss_declaration_default_visitor::field_values_get(); 00076 result->push_back( value_list::create() ); 00077 result->back()->push_back( objectize< bool > ::create( this->result ) ); 00078 return result; 00079 }
| void lestes::lang::cplus::sem::sa_namespace_definition::gc_mark | ( | void | ) | [protected, virtual] |
Marking routine for class sa_namespace_definition.
Marking routine is used for garbage collection.
Reimplemented from lestes::lang::cplus::sem::ss_declaration_default_visitor.
Definition at line 93 of file sa_namespace.g.cc.
References lestes::lang::cplus::sem::ss_declaration_default_visitor::gc_mark().
00094 { 00095 ss_declaration_default_visitor::gc_mark(); 00096 }
bool lestes::lang::cplus::sem::sa_namespace_definition::result [private] |
Was the visited declaration a namespace definition?
Set to true if the visited declaration was a namespace definition, otherwise set to false.
Moving more functionality to the visit methods turned out to be clumsy.
Definition at line 82 of file sa_namespace.g.hh.
Referenced by field_values_get(), result_get(), and result_set().
ptr< object::reflection_list > lestes::lang::cplus::sem::sa_namespace_definition::reflection = reflection [static, private] |
Reimplemented from lestes::lang::cplus::sem::ss_declaration_default_visitor.
Definition at line 83 of file sa_namespace.g.hh.
Referenced by reflection_get().
ptr< sa_namespace_definition > lestes::lang::cplus::sem::sa_namespace_definition::the_instance = the_instance [static, private] |
Static field sa_namespace_definition::the_instance.
Definition at line 84 of file sa_namespace.g.hh.
Referenced by instance().
1.5.1-20070107