lestes::lang::cplus::sem::sa_namespace_definition Class Reference

#include <sa_namespace.g.hh>

Inheritance diagram for lestes::lang::cplus::sem::sa_namespace_definition:

lestes::lang::cplus::sem::ss_declaration_default_visitor lestes::lang::cplus::sem::ss_declaration_visitor lestes::std::visitor_base lestes::std::object lestes::std::mem::keystone List of all members.

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_listreflection_get () const
 for purposes of dumping
virtual ptr< field_list_listfield_values_get () const
 for purposes of dumping

Static Public Member Functions

static ptr< sa_namespace_definitioninstance ()
 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_listreflection = reflection
static ptr< sa_namespace_definitionthe_instance = the_instance

Detailed Description

Definition at line 33 of file sa_namespace.g.hh.


Constructor & Destructor Documentation

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.

Author:
lsg

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 {}


Member Function Documentation

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.

Returns:
The value of sa_namespace_definition::result.
Author:
lsg

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.

Parameters:
[in] x The new value to set sa_namespace_definition::result to.
Author:
lsg

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]

Implements lestes::lang::cplus::sem::ss_declaration_default_visitor.

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.

Author:
lsg

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.

Author:
lsg

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 }


Member Data Documentation

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.

Author:
lsg

Definition at line 84 of file sa_namespace.g.hh.

Referenced by instance().


The documentation for this class was generated from the following files:
Generated on Mon Feb 12 18:25:02 2007 for lestes by doxygen 1.5.1-20070107