lestes::lang::cplus::sem::sa_class_declaration Class Reference

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

#include <sa_class_declaration.g.hh>

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

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

Public Member Functions

void process (ptr< ::lestes::lang::cplus::sem::as_class_specifier > cs)
void process_end (ptr< ::lestes::std::source_location > location)
void process_undeclared (ptr< ::lestes::lang::cplus::sem::as_class_specifier > cs)
void process_declared (ptr< ::lestes::lang::cplus::sem::as_class_specifier > cs, ptr< ::lestes::lang::cplus::sem::ss_structure_declaration > dn)
void process_forward_declaration (ptr< ::lestes::lang::cplus::sem::as_class_specifier > cs)
ptr< ::lestes::lang::cplus::sem::ss_structure_declarationinsert_class_forward_into_scope (ptr< ::lestes::lang::cplus::sem::as_class_specifier > cs, bool visibly, ptr< ::lestes::lang::cplus::sem::ss_decl_seq > scope)
void new_context (ptr< ::lestes::std::source_location > location, ss_access_specifier::type access_specifier, ptr< ::lestes::lang::cplus::sem::ss_decl_seq > scope, ptr< ::lestes::lang::cplus::sem::as_name > name)
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_class_declarationcreate ()
 First generated factory method for class sa_class_declaration.

Protected Member Functions

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

Static Private Attributes

static ptr< reflection_listreflection = reflection

Detailed Description

FIXME Base abstract class for functionals, representing function call.

FIXME Detailed documentation for overload functionals

Definition at line 85 of file sa_class_declaration.g.hh.


Constructor & Destructor Documentation

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

Generated constructor for class sa_class_declaration.

Generated constructor for class sa_class_declaration.

Author:
lsg

Definition at line 34 of file sa_class_declaration.g.cc.

Referenced by create().

00035         : object()
00036 {}


Member Function Documentation

void lestes::lang::cplus::sem::sa_class_declaration::process ( ptr< ::lestes::lang::cplus::sem::as_class_specifier cs  ) 

void lestes::lang::cplus::sem::sa_class_declaration::process_end ( ptr< ::lestes::std::source_location location  ) 

void lestes::lang::cplus::sem::sa_class_declaration::process_undeclared ( ptr< ::lestes::lang::cplus::sem::as_class_specifier cs  ) 

void lestes::lang::cplus::sem::sa_class_declaration::process_declared ( ptr< ::lestes::lang::cplus::sem::as_class_specifier cs,
ptr< ::lestes::lang::cplus::sem::ss_structure_declaration dn 
)

void lestes::lang::cplus::sem::sa_class_declaration::process_forward_declaration ( ptr< ::lestes::lang::cplus::sem::as_class_specifier cs  ) 

ptr<::lestes::lang::cplus::sem::ss_structure_declaration > lestes::lang::cplus::sem::sa_class_declaration::insert_class_forward_into_scope ( ptr< ::lestes::lang::cplus::sem::as_class_specifier cs,
bool  visibly,
ptr< ::lestes::lang::cplus::sem::ss_decl_seq parent_scope 
)

Invariant:
!synmanager::in_disambiguation()

Definition at line 258 of file sa_class_declaration.cc.

References lestes::lang::cplus::sem::ss_access_specifier::ACCESS_PUBLIC, lestes::lang::cplus::sem::ss_linkage::create(), lestes::lang::cplus::sem::ss_declaration_time::create(), lestes::intercode::intercode::create(), create(), lestes::lang::cplus::sem::as_class_key_to_ss_struct_base::create(), lestes::lang::cplus::syn::manager::in_disambiguation(), lestes::lang::cplus::sem::ss_declaration_time::infinity(), lestes::lang::cplus::sem::sa_context_manager::instance(), lestes::lang::cplus::sem::sa_decl_seq_compound_pair_creator::instance(), lestes::lang::cplus::sem::as_id_to_ss_decl_name::instance(), lassert, lestes::lang::cplus::sem::ss_linkage::LINKAGE_EXTERNAL, and lestes::lang::cplus::sem::ss_storage_class::ST_NONE.

00259 {
00260         lassert(!syn::manager::in_disambiguation());
00261 
00262         if (syn::manager::in_disambiguation())
00263                 return NULL;
00264         /* location */
00265         ptr < source_location > location = cs->location_get();
00266 
00267         sa_class_logger << "sa_class_declaration:: name\n" << msg::eolog;
00268         ptr < ss_decl_name > decl_name = as_id_to_ss_decl_name::instance()->process(cs->name_get()->identifier_get());;
00269         lassert(decl_name);
00270 
00271         sa_class_declaration_logger << "declseq & compound\n" << msg::eolog;
00272         ptr < ::lestes::std::pair < srp < ss_decl_seq >, srp < ss_compound_stmt > > > p = 
00273                 sa_decl_seq_compound_pair_creator::instance()->process(location, 
00274                         parent_scope,
00275                         parent_scope->compound_stmt_get()
00276                 );
00277         lassert(p);
00278 
00279         ptr < ss_decl_seq > decl_seq = p->first;
00280         ptr < ss_compound_stmt > stmt = p->second;
00281         lassert(decl_seq && stmt);
00282 
00283         sa_class_declaration_logger << "type\n" << msg::eolog;
00284         ptr < ss_struct_base > type =
00285                 as_class_key_to_ss_struct_base::create(
00286                         decl_seq,
00287                         ::lestes::std::list < srp < ss_base_specifier > >::create()
00288                         )->process(cs->key_get());
00289 
00290         sa_class_declaration_logger << "proper\n" << msg::eolog;
00291         ptr < ss_structure_declaration > class_decl = ss_structure_declaration::create(
00292                         location, // location
00293                         visibly
00294                                 ? ss_declaration_time::create(location->order_get())
00295                                 : ss_declaration_time::infinity(), // visible
00296                         ss_declaration_time::create(location->order_get()), // decl time
00297                         decl_name, //name
00298                         parent_scope, // contained in
00299                         type, // type
00300                         // FIXME: determine linkage according to parent scope
00301                         ss_linkage::create("C++",ss_linkage::LINKAGE_EXTERNAL), // linkage
00302                         sa_context_manager::instance()->current()->ss_get()->access_specifier_get(), // access specifier
00303                         ss_storage_class::ST_NONE, // storage class
00304                         ::lestes::std::set< srp< ss_struct_base > >::create(), // friends
00305                         decl_seq
00306                         );
00307 
00308         sa_class_declaration_logger << "injected\n" << msg::eolog;
00309         ptr < ss_injected_class_declaration > class_decl_alias = ss_injected_class_declaration::create(
00310                         location, // location
00311                         ss_declaration_time::create(location->order_get()), // visible
00312                         ss_declaration_time::create(location->order_get()), // decl time
00313                         decl_name, //name
00314                         decl_seq, // contained in
00315                         type, // type
00316                         // FIXME: correct?
00317                         class_decl->linkage_get(), // linkage
00318                         ss_access_specifier::ACCESS_PUBLIC, // access specifier
00319                         ss_storage_class::ST_NONE, // storage class
00320                         class_decl // real class
00321                         );
00322 
00323         sa_class_declaration_logger << "fixup circular structures\n" << msg::eolog;
00324         /* fill right values */
00325         type->decl_set(class_decl);
00326         decl_seq->declared_by_set(class_decl);
00327         decl_seq->contents_get()->push_back(class_decl_alias);
00328         parent_scope->contents_get()->push_back(class_decl);
00329 
00330         return class_decl;
00331 
00332 }

void lestes::lang::cplus::sem::sa_class_declaration::new_context ( ptr< ::lestes::std::source_location location,
ss_access_specifier::type  access_specifier,
ptr< ::lestes::lang::cplus::sem::ss_decl_seq scope,
ptr< ::lestes::lang::cplus::sem::as_name name 
)

ptr< sa_class_declaration > lestes::lang::cplus::sem::sa_class_declaration::create ( void   )  [static]

First generated factory method for class sa_class_declaration.

This factory method for class sa_class_declaration takes values of all fields as arguments.

Author:
lsg

Definition at line 25 of file sa_class_declaration.g.cc.

References sa_class_declaration().

Referenced by insert_class_forward_into_scope().

00026 {
00027         return ptr< sa_class_declaration > ( new sa_class_declaration() );
00028 }

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

for purposes of dumping

Reimplemented from lestes::std::object.

Definition at line 38 of file sa_class_declaration.g.cc.

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

00039 {
00040         if (!reflection) {
00041                 typedef class_reflection::field_metadata md;
00042                 typedef class_reflection::field_metadata_list mdlist;
00043                 ptr<mdlist> mdl = mdlist::create();
00044                 reflection = reflection_list::create( ::lestes::std::object::reflection_get() );
00045                 reflection->push_back( class_reflection::create( "sa_class_declaration", mdl ) );
00046         }
00047         return reflection;
00048 }

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

for purposes of dumping

Reimplemented from lestes::std::object.

Definition at line 50 of file sa_class_declaration.g.cc.

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

00051 {
00052         ptr < field_list_list > result = ::lestes::std::object::field_values_get();
00053         return result;
00054 }

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

Marking routine for class sa_class_declaration.

Marking routine is used for garbage collection.

Author:
lsg

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

Definition at line 61 of file sa_class_declaration.g.cc.

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

00062 {
00063 	::lestes::std::object::gc_mark();
00064 }


Member Data Documentation

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

Reimplemented from lestes::std::object.

Definition at line 122 of file sa_class_declaration.g.hh.

Referenced by reflection_get().


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