lestes::lang::cplus::sem::sa_usings Class Reference

FIXME Base abstract class for functionals, representing function call. More...

#include <sa_usings.g.hh>

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

lestes::std::object lestes::std::mem::keystone List of all members.

Public Member Functions

void process_declaration (ptr< ::lestes::lang::cplus::sem::as_using_declaration > declaration)
void process_directive (ptr< ::lestes::lang::cplus::sem::as_using_directive > directive)
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_usingsinstance ()
 Generated instance() method for singleton class sa_usings.

Protected Member Functions

 sa_usings ()
 Generated constructor for class sa_usings.
virtual void gc_mark ()
 Marking routine for class sa_usings.

Static Private Attributes

static ptr< reflection_listreflection = reflection
static ptr< sa_usingsthe_instance = the_instance

Detailed Description

FIXME Base abstract class for functionals, representing function call.

FIXME Detailed documentation for overload functionals

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


Constructor & Destructor Documentation

lestes::lang::cplus::sem::sa_usings::sa_usings (  )  [protected]

Generated constructor for class sa_usings.

Generated constructor for class sa_usings.

Author:
lsg

Definition at line 40 of file sa_usings.g.cc.

Referenced by instance().

00041         : object()
00042 {}


Member Function Documentation

void lestes::lang::cplus::sem::sa_usings::process_declaration ( ptr< ::lestes::lang::cplus::sem::as_using_declaration ud  ) 

Invariant:
!synmanager::in_disambiguation()

Definition at line 78 of file sa_usings.cc.

References lestes::lang::cplus::sem::ss_linkage::create(), lestes::intercode::intercode::create(), lestes::lang::cplus::sem::ss_declaration_time::create(), lestes::msg::eolog, lestes::lang::cplus::syn::manager::in_disambiguation(), lestes::lang::cplus::sem::sa_context_manager::instance(), lestes::lang::cplus::sem::ss_using_target::instance(), lestes::lang::cplus::sem::li_by_name_in_single_scope::instance(), lestes::lang::cplus::sem::sa_scope_of_as_name::instance(), lestes::lang::cplus::sem::as_id_to_ss_decl_name::instance(), lassert, lassert3, lestes::lang::cplus::sem::ss_linkage::LINKAGE_EXTERNAL, and lestes::lang::cplus::sem::ss_storage_class::ST_NONE.

00079 {
00080         lassert(!syn::manager::in_disambiguation());
00081 
00082         ptr < source_location > location = ud->location_get();
00083         ptr < ss_declaration_time > dt = ss_declaration_time::create(location->order_get());
00084 
00085         ptr < as_name > name = ud->name_get();
00086         lassert(name->was_qualified_get());
00087 
00088         ptr < ss_decl_name > decl_name = as_id_to_ss_decl_name::instance()->process(name->identifier_get());
00089         // FIXME: get scope from qualification
00090         ptr < ss_decl_seq > containing = sa_scope_of_as_name::instance()->extract(name);
00091 
00092         // FIXME: lookup in scope
00093         ptr < declaration_set_type > target_declarations = li_by_name_in_single_scope::instance()->process_preserve_usings(decl_name, containing);
00094 
00095         if ( target_declarations->empty() ) {
00096                 lassert3(false, "declaration of used name not found",location);
00097         }
00098 
00099         for (declaration_set_type::iterator it = target_declarations->begin() ; it != target_declarations->end() ; ++it) {
00100                 ptr < ss_declaration > target_decl = *it;
00101 
00102                 // FIXME: a check shall be done whether the fund declaration
00103                 // does not clash with an existing declaration in the current
00104                 // scope.
00105                 
00106                 // FIXME: lookup in scope
00107                 ptr < ss_declaration > real_decl = ss_using_target::instance()->process(target_decl);
00108 
00109                 // FIXME: foreach looked up:
00110                 sa_class_declaration_logger << "using\n" << msg::eolog;
00111                 ptr < ss_using_declaration > using_decl = ss_using_declaration::create(
00112                                 location, // location
00113                                 dt, // visible
00114                                 dt, // decl time
00115                                 decl_name, //name
00116                                 sa_context_manager::instance()->current()->ss_get()->scope_get(), // contained in
00117                                 real_decl->type_get(), // type
00118                                 // FIXME: correct?
00119                                 ss_linkage::create("C++", ss_linkage::LINKAGE_EXTERNAL), // linkage
00120                                 //real_decl->linkage_get(), // linkage
00121                                 // FIXME: correct?
00122                                 sa_context_manager::instance()->current()->ss_get()->access_specifier_get(), // access specifier
00123                                 //real_decl->access_specifier_get(), // access specifier
00124                                 ss_storage_class::ST_NONE, // storage class
00125                                 target_decl, // using's target declaration
00126                                 real_decl // real declaration
00127                                 );
00128                 // add to decl_seq:
00129                 sa_context_manager::instance()->current()->ss_get()->scope_get()->contents_get()->push_back(using_decl);
00130         }
00131 }

void lestes::lang::cplus::sem::sa_usings::process_directive ( ptr< ::lestes::lang::cplus::sem::as_using_directive ud  ) 

Invariant:
!synmanager::in_disambiguation()

Definition at line 136 of file sa_usings.cc.

References lestes::lang::cplus::syn::manager::in_disambiguation(), lassert2, and lassert3.

00137 {
00138         lassert2(!syn::manager::in_disambiguation(), "invariant");
00139         lassert3(false,"using directives not implemented", ud->location_get());
00140 }

ptr< sa_usings > lestes::lang::cplus::sem::sa_usings::instance ( void   )  [static]

Generated instance() method for singleton class sa_usings.

Generated instance() method for singleton class sa_usings.

Author:
lsg

Definition at line 31 of file sa_usings.g.cc.

References sa_usings(), and the_instance.

00032 {
00033          return the_instance ? the_instance : the_instance = new sa_usings();
00034 }

ptr< object::reflection_list > lestes::lang::cplus::sem::sa_usings::reflection_get (  )  const [virtual]

for purposes of dumping

Reimplemented from lestes::std::object.

Definition at line 44 of file sa_usings.g.cc.

References lestes::std::list< T >::create(), reflection, and lestes::std::object::reflection_get().

00045 {
00046         if (!reflection) {
00047                 typedef class_reflection::field_metadata md;
00048                 typedef class_reflection::field_metadata_list mdlist;
00049                 ptr<mdlist> mdl = mdlist::create();
00050                 reflection = reflection_list::create( ::lestes::std::object::reflection_get() );
00051                 reflection->push_back( class_reflection::create( "sa_usings", mdl ) );
00052         }
00053         return reflection;
00054 }

ptr< object::field_list_list > lestes::lang::cplus::sem::sa_usings::field_values_get (  )  const [virtual]

for purposes of dumping

Reimplemented from lestes::std::object.

Definition at line 56 of file sa_usings.g.cc.

References lestes::std::object::field_values_get().

00057 {
00058         ptr < field_list_list > result = ::lestes::std::object::field_values_get();
00059         return result;
00060 }

void lestes::lang::cplus::sem::sa_usings::gc_mark ( void   )  [protected, virtual]

Marking routine for class sa_usings.

Marking routine is used for garbage collection.

Author:
lsg

Reimplemented from lestes::std::mem::keystone.

Definition at line 67 of file sa_usings.g.cc.

References lestes::std::mem::keystone::gc_mark().

00068 {
00069 	::lestes::std::object::gc_mark();
00070 }


Member Data Documentation

ptr< object::reflection_list > lestes::lang::cplus::sem::sa_usings::reflection = reflection [static, private]

Reimplemented from lestes::std::object.

Definition at line 110 of file sa_usings.g.hh.

Referenced by reflection_get().

ptr< sa_usings > lestes::lang::cplus::sem::sa_usings::the_instance = the_instance [static, private]

Static field sa_usings::the_instance.

Author:
lsg

Definition at line 111 of file sa_usings.g.hh.

Referenced by instance().


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