lestes::lang::cplus::sem::ss_function_declaration Class Reference

Class for function definition. More...

#include <ss_declaration.g.hh>

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

lestes::lang::cplus::sem::ss_befriendable_declaration lestes::lang::cplus::sem::ss_declaration_with_access_specifier lestes::lang::cplus::sem::ss_declaration lestes::intercode::ss_base_with_location lestes::intercode::ss_base lestes::intercode::intercode lestes::std::object lestes::std::mem::keystone lestes::lang::cplus::sem::ss_builtin_operator_declaration lestes::lang::cplus::sem::ss_method_declaration List of all members.

Public Member Functions

ptr< ss_decl_seqparameters_get () const
 The method parameters_get returns the value of the field ss_function_declaration::parameters.
void parameters_set (const ptr< ss_decl_seq > &)
 The method parameters_set sets the field ss_function_declaration::parameters to the given value.
ptr< ss_compound_stmtbody_get () const
 The method body_get returns the value of the field ss_function_declaration::body.
void body_set (const ptr< ss_compound_stmt > &)
 The method body_set sets the field ss_function_declaration::body to the given value.
ptr< ::lestes::std::map< srp<
ss_id_label >, srp< ss_statement > > > 
labels_get () const
 The method labels_get returns the value of the field ss_function_declaration::labels.
void labels_set (const ptr< ::lestes::std::map< srp< ss_id_label >, srp< ss_statement > > > &)
 The method labels_set sets the field ss_function_declaration::labels to the given value.
ptr< ::lestes::std::list<
srp< ss_decl_seq > > > 
historical_parameters_get () const
 The method historical_parameters_get returns the value of the field ss_function_declaration::historical_parameters.
void historical_parameters_set (const ptr< ::lestes::std::list< srp< ss_decl_seq > > > &)
 The method historical_parameters_set sets the field ss_function_declaration::historical_parameters to the given value.
bool is_entry_point ()
 Whether is the current function entry point of the whole translation unit.
virtual void accept_ss_declaration_visitor (ptr< ss_declaration_visitor > v)
virtual ulint accept_ss_decl2ulint_base (ptr< ss_decl2ulint_base > v)
virtual lstring accept_ss_decl2lstring_base (ptr< ss_decl2lstring_base > v)
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< ss_function_declarationcreate (ptr< ::lestes::std::source_location > a__ss_base_with_location__location, ptr< ss_declaration_time > a__ss_declaration__visible_since, ptr< ss_declaration_time > a__ss_declaration__decl_time, ptr< ss_decl_name > a__ss_declaration__name, ptr< ss_decl_seq > a__ss_declaration__contained_in, ptr< ss_type > a__ss_declaration__type, ptr< ss_linkage > a__ss_declaration__linkage, ss_access_specifier::type a__ss_declaration_with_access_specifier__access_specifier, ss_storage_class::type a__ss_declaration_with_access_specifier__storage_class, ptr< ::lestes::std::set< srp< ss_struct_base > > > a__ss_befriendable_declaration__friend_of, ptr< ss_decl_seq > a__ss_function_declaration__parameters, ptr< ss_compound_stmt > a__ss_function_declaration__body, ptr< ::lestes::std::map< srp< ss_id_label >, srp< ss_statement > > > a__ss_function_declaration__labels, ptr< ::lestes::std::list< srp< ss_decl_seq > > > a__ss_function_declaration__historical_parameters)
 First generated factory method for class ss_function_declaration.
static ptr< ss_function_declarationcreate (ptr< ::lestes::std::source_location > a__ss_base_with_location__location, ptr< ss_declaration_time > a__ss_declaration__visible_since, ptr< ss_declaration_time > a__ss_declaration__decl_time, ptr< ss_decl_name > a__ss_declaration__name, ptr< ss_decl_seq > a__ss_declaration__contained_in, ptr< ss_type > a__ss_declaration__type, ptr< ss_linkage > a__ss_declaration__linkage, ptr< ss_decl_seq > a__ss_function_declaration__parameters, ptr< ss_compound_stmt > a__ss_function_declaration__body)
 Second generated factory method for class ss_function_declaration.

Protected Member Functions

 ss_function_declaration (ptr< ::lestes::std::source_location > a__ss_base_with_location__location, ptr< ss_declaration_time > a__ss_declaration__visible_since, ptr< ss_declaration_time > a__ss_declaration__decl_time, ptr< ss_decl_name > a__ss_declaration__name, ptr< ss_decl_seq > a__ss_declaration__contained_in, ptr< ss_type > a__ss_declaration__type, ptr< ss_linkage > a__ss_declaration__linkage, ss_access_specifier::type a__ss_declaration_with_access_specifier__access_specifier, ss_storage_class::type a__ss_declaration_with_access_specifier__storage_class, ptr< ::lestes::std::set< srp< ss_struct_base > > > a__ss_befriendable_declaration__friend_of, ptr< ss_decl_seq > a__ss_function_declaration__parameters, ptr< ss_compound_stmt > a__ss_function_declaration__body, ptr< ::lestes::std::map< srp< ss_id_label >, srp< ss_statement > > > a__ss_function_declaration__labels, ptr< ::lestes::std::list< srp< ss_decl_seq > > > a__ss_function_declaration__historical_parameters)
 Generated constructor for class ss_function_declaration.
virtual void gc_mark ()
 Marking routine for class ss_function_declaration.

Private Attributes

srp< ss_decl_seqparameters
srp< ss_compound_stmtbody
 Compound statement of the function.
srp< ::lestes::std::map< srp<
ss_id_label >, srp< ss_statement > > > 
labels
 Labels used inside function body. Used for goto statement.
srp< ::lestes::std::list<
srp< ss_decl_seq > > > 
historical_parameters
 Historical parameters.

Static Private Attributes

static ptr< reflection_listreflection = reflection

Detailed Description

Class for function definition.

Definition at line 967 of file ss_declaration.g.hh.


Constructor & Destructor Documentation

lestes::lang::cplus::sem::ss_function_declaration::ss_function_declaration ( ptr< ::lestes::std::source_location a__ss_base_with_location__location,
ptr< ss_declaration_time a__ss_declaration__visible_since,
ptr< ss_declaration_time a__ss_declaration__decl_time,
ptr< ss_decl_name a__ss_declaration__name,
ptr< ss_decl_seq a__ss_declaration__contained_in,
ptr< ss_type a__ss_declaration__type,
ptr< ss_linkage a__ss_declaration__linkage,
ss_access_specifier::type  a__ss_declaration_with_access_specifier__access_specifier,
ss_storage_class::type  a__ss_declaration_with_access_specifier__storage_class,
ptr< ::lestes::std::set< srp< ss_struct_base > > >  a__ss_befriendable_declaration__friend_of,
ptr< ss_decl_seq a__ss_function_declaration__parameters,
ptr< ss_compound_stmt a__ss_function_declaration__body,
ptr< ::lestes::std::map< srp< ss_id_label >, srp< ss_statement > > >  a__ss_function_declaration__labels,
ptr< ::lestes::std::list< srp< ss_decl_seq > > >  a__ss_function_declaration__historical_parameters 
) [protected]

Generated constructor for class ss_function_declaration.

Generated constructor for class ss_function_declaration.

Author:
lsg

Definition at line 1851 of file ss_declaration.g.cc.

Referenced by create().

01865         : ss_befriendable_declaration(a__ss_base_with_location__location,
01866                 a__ss_declaration__visible_since,
01867                 a__ss_declaration__decl_time,
01868                 a__ss_declaration__name,
01869                 a__ss_declaration__contained_in,
01870                 a__ss_declaration__type,
01871                 a__ss_declaration__linkage,
01872                 a__ss_declaration_with_access_specifier__access_specifier,
01873                 a__ss_declaration_with_access_specifier__storage_class,
01874                 a__ss_befriendable_declaration__friend_of), parameters(checked(a__ss_function_declaration__parameters)), body(a__ss_function_declaration__body), labels(checked(a__ss_function_declaration__labels)), historical_parameters(checked(a__ss_function_declaration__historical_parameters))
01875 {}


Member Function Documentation

ptr< ss_decl_seq > lestes::lang::cplus::sem::ss_function_declaration::parameters_get (  )  const

The method parameters_get returns the value of the field ss_function_declaration::parameters.

Returns:
The value of ss_function_declaration::parameters.
Author:
lsg

Definition at line 1712 of file ss_declaration.g.cc.

References parameters.

01713 {
01714         return parameters;
01715 }

void lestes::lang::cplus::sem::ss_function_declaration::parameters_set ( const ptr< ss_decl_seq > &  x  ) 

The method parameters_set sets the field ss_function_declaration::parameters to the given value.

Parameters:
[in] x The new value to set ss_function_declaration::parameters to.
Author:
lsg

Definition at line 1721 of file ss_declaration.g.cc.

References parameters.

01722 {
01723         ss_function_declaration::parameters = x;
01724 }

ptr< ss_compound_stmt > lestes::lang::cplus::sem::ss_function_declaration::body_get (  )  const

The method body_get returns the value of the field ss_function_declaration::body.

Returns:
The value of ss_function_declaration::body.
Author:
lsg

Definition at line 1730 of file ss_declaration.g.cc.

References body.

01731 {
01732         return body;
01733 }

void lestes::lang::cplus::sem::ss_function_declaration::body_set ( const ptr< ss_compound_stmt > &  x  ) 

The method body_set sets the field ss_function_declaration::body to the given value.

Parameters:
[in] x The new value to set ss_function_declaration::body to.
Author:
lsg

Definition at line 1739 of file ss_declaration.g.cc.

References body.

01740 {
01741         ss_function_declaration::body = x;
01742 }

ptr<::lestes::std::map< srp< ss_id_label >, srp< ss_statement > > > lestes::lang::cplus::sem::ss_function_declaration::labels_get (  )  const

The method labels_get returns the value of the field ss_function_declaration::labels.

Returns:
The value of ss_function_declaration::labels.
Author:
lsg

Definition at line 1748 of file ss_declaration.g.cc.

References labels.

01749 {
01750         return labels;
01751 }

void lestes::lang::cplus::sem::ss_function_declaration::labels_set ( const ptr< ::lestes::std::map< srp< ss_id_label >, srp< ss_statement > > > &  x  ) 

The method labels_set sets the field ss_function_declaration::labels to the given value.

Parameters:
[in] x The new value to set ss_function_declaration::labels to.
Author:
lsg

Definition at line 1757 of file ss_declaration.g.cc.

References labels.

01758 {
01759         ss_function_declaration::labels = x;
01760 }

ptr<::lestes::std::list< srp< ss_decl_seq > > > lestes::lang::cplus::sem::ss_function_declaration::historical_parameters_get (  )  const

The method historical_parameters_get returns the value of the field ss_function_declaration::historical_parameters.

Returns:
The value of ss_function_declaration::historical_parameters.
Author:
lsg

Definition at line 1766 of file ss_declaration.g.cc.

References historical_parameters.

01767 {
01768         return historical_parameters;
01769 }

void lestes::lang::cplus::sem::ss_function_declaration::historical_parameters_set ( const ptr< ::lestes::std::list< srp< ss_decl_seq > > > &  x  ) 

The method historical_parameters_set sets the field ss_function_declaration::historical_parameters to the given value.

Parameters:
[in] x The new value to set ss_function_declaration::historical_parameters to.
Author:
lsg

Definition at line 1775 of file ss_declaration.g.cc.

References historical_parameters.

bool lestes::lang::cplus::sem::ss_function_declaration::is_entry_point (  ) 

Whether is the current function entry point of the whole translation unit.

Check whether the current function is entry point of the translation unit.

This function has to be maintained by semantic part, because backend should be independet on current language, which defines entry point(main)[].

Definition at line 109 of file ss_misc.cc.

References lestes::lang::cplus::sem::ss_declaration::contained_in_get(), lestes::intercode::intercode::create(), lestes::intercode::ss_base_with_location::location_get(), lestes::lang::cplus::sem::ss_declaration::name_get(), and lestes::lang::cplus::sem::ss_decl_seq::root_instance().

00110 {
00111         if (contained_in_get() != ss_decl_seq::root_instance())                 //has to be on global scope
00112                 return false;
00113         ptr<ss_decl_name> main_name = ss_ordinary_name::create( name_get()->location_get(), "main" );
00114         if (main_name->matches(name_get()))                                     //has to be main
00115                 return true;
00116 
00117         return false;
00118 }

void lestes::lang::cplus::sem::ss_function_declaration::accept_ss_declaration_visitor ( ptr< ss_declaration_visitor v  )  [virtual]

Implements lestes::lang::cplus::sem::ss_befriendable_declaration.

Reimplemented in lestes::lang::cplus::sem::ss_method_declaration, and lestes::lang::cplus::sem::ss_builtin_operator_declaration.

Definition at line 1780 of file ss_declaration.g.cc.

01781 {
01782         return v->visit_ss_function_declaration( this );
01783 }

ulint lestes::lang::cplus::sem::ss_function_declaration::accept_ss_decl2ulint_base ( ptr< ss_decl2ulint_base v  )  [virtual]

Implements lestes::lang::cplus::sem::ss_befriendable_declaration.

Reimplemented in lestes::lang::cplus::sem::ss_method_declaration, and lestes::lang::cplus::sem::ss_builtin_operator_declaration.

Definition at line 1785 of file ss_declaration.g.cc.

01786 {
01787         return v->visit_ss_function_declaration( this );
01788 }

lstring lestes::lang::cplus::sem::ss_function_declaration::accept_ss_decl2lstring_base ( ptr< ss_decl2lstring_base v  )  [virtual]

Implements lestes::lang::cplus::sem::ss_befriendable_declaration.

Reimplemented in lestes::lang::cplus::sem::ss_method_declaration, and lestes::lang::cplus::sem::ss_builtin_operator_declaration.

Definition at line 1790 of file ss_declaration.g.cc.

01791 {
01792         return v->visit_ss_function_declaration( this );
01793 }

ptr< ss_function_declaration > lestes::lang::cplus::sem::ss_function_declaration::create ( ptr< ::lestes::std::source_location a__ss_base_with_location__location,
ptr< ss_declaration_time a__ss_declaration__visible_since,
ptr< ss_declaration_time a__ss_declaration__decl_time,
ptr< ss_decl_name a__ss_declaration__name,
ptr< ss_decl_seq a__ss_declaration__contained_in,
ptr< ss_type a__ss_declaration__type,
ptr< ss_linkage a__ss_declaration__linkage,
ss_access_specifier::type  a__ss_declaration_with_access_specifier__access_specifier,
ss_storage_class::type  a__ss_declaration_with_access_specifier__storage_class,
ptr< ::lestes::std::set< srp< ss_struct_base > > >  a__ss_befriendable_declaration__friend_of,
ptr< ss_decl_seq a__ss_function_declaration__parameters,
ptr< ss_compound_stmt a__ss_function_declaration__body,
ptr< ::lestes::std::map< srp< ss_id_label >, srp< ss_statement > > >  a__ss_function_declaration__labels,
ptr< ::lestes::std::list< srp< ss_decl_seq > > >  a__ss_function_declaration__historical_parameters 
) [static]

First generated factory method for class ss_function_declaration.

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

Author:
lsg

Reimplemented in lestes::lang::cplus::sem::ss_builtin_operator_declaration.

Definition at line 1799 of file ss_declaration.g.cc.

References ss_function_declaration().

01813 {
01814         return ptr< ss_function_declaration > ( new ss_function_declaration(a__ss_base_with_location__location,
01815                 a__ss_declaration__visible_since,
01816                 a__ss_declaration__decl_time,
01817                 a__ss_declaration__name,
01818                 a__ss_declaration__contained_in,
01819                 a__ss_declaration__type,
01820                 a__ss_declaration__linkage,
01821                 a__ss_declaration_with_access_specifier__access_specifier,
01822                 a__ss_declaration_with_access_specifier__storage_class,
01823                 a__ss_befriendable_declaration__friend_of,
01824                 a__ss_function_declaration__parameters,
01825                 a__ss_function_declaration__body,
01826                 a__ss_function_declaration__labels,
01827                 a__ss_function_declaration__historical_parameters) );
01828 }

ptr< ss_function_declaration > lestes::lang::cplus::sem::ss_function_declaration::create ( ptr< ::lestes::std::source_location a__ss_base_with_location__location,
ptr< ss_declaration_time a__ss_declaration__visible_since,
ptr< ss_declaration_time a__ss_declaration__decl_time,
ptr< ss_decl_name a__ss_declaration__name,
ptr< ss_decl_seq a__ss_declaration__contained_in,
ptr< ss_type a__ss_declaration__type,
ptr< ss_linkage a__ss_declaration__linkage,
ptr< ss_decl_seq a__ss_function_declaration__parameters,
ptr< ss_compound_stmt a__ss_function_declaration__body 
) [static]

Second generated factory method for class ss_function_declaration.

This factory method for class ss_function_declaration uses initializers.

Author:
lsg

Reimplemented in lestes::lang::cplus::sem::ss_builtin_operator_declaration.

Definition at line 1834 of file ss_declaration.g.cc.

References lestes::lang::cplus::sem::ss_access_specifier::ACCESS_PUBLIC, lestes::intercode::intercode::create(), ss_function_declaration(), and lestes::lang::cplus::sem::ss_storage_class::ST_NONE.

01843 {
01844         return ptr< ss_function_declaration > ( new ss_function_declaration(a__ss_base_with_location__location, a__ss_declaration__visible_since, a__ss_declaration__decl_time, a__ss_declaration__name, a__ss_declaration__contained_in, a__ss_declaration__type, a__ss_declaration__linkage, ss_access_specifier::ACCESS_PUBLIC, ss_storage_class::ST_NONE, ::lestes::std::set< srp< ss_struct_base > > ::create(), a__ss_function_declaration__parameters, a__ss_function_declaration__body, ::lestes::std::map< srp< ss_id_label >, srp< ss_statement > > ::create(), ::lestes::std::list< srp< ss_decl_seq > > ::create()) );
01845 }

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

for purposes of dumping

Reimplemented from lestes::lang::cplus::sem::ss_befriendable_declaration.

Reimplemented in lestes::lang::cplus::sem::ss_method_declaration, and lestes::lang::cplus::sem::ss_builtin_operator_declaration.

Definition at line 1877 of file ss_declaration.g.cc.

References lestes::std::list< T >::create(), reflection, and lestes::lang::cplus::sem::ss_befriendable_declaration::reflection_get().

Referenced by lestes::lang::cplus::sem::ss_builtin_operator_declaration::reflection_get(), and lestes::lang::cplus::sem::ss_method_declaration::reflection_get().

01878 {
01879         if (!reflection) {
01880                 typedef class_reflection::field_metadata md;
01881                 typedef class_reflection::field_metadata_list mdlist;
01882                 ptr<mdlist> mdl = mdlist::create();
01883                 mdl->push_back( md::create( "parameters", "ss_decl_seq" ) );
01884                 mdl->push_back( md::create( "body", "ss_compound_stmt" ) );
01885                 mdl->push_back( md::create( "labels", "map&lt; srp&lt; ss_id_label &gt;, srp&lt; ss_statement &gt; &gt;" ) );
01886                 mdl->push_back( md::create( "historical_parameters", "list&lt; srp&lt; ss_decl_seq &gt; &gt;" ) );
01887                 reflection = reflection_list::create( ss_befriendable_declaration::reflection_get() );
01888                 reflection->push_back( class_reflection::create( "ss_function_declaration", mdl ) );
01889         }
01890         return reflection;
01891 }

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

for purposes of dumping

Reimplemented from lestes::lang::cplus::sem::ss_befriendable_declaration.

Reimplemented in lestes::lang::cplus::sem::ss_method_declaration, and lestes::lang::cplus::sem::ss_builtin_operator_declaration.

Definition at line 1893 of file ss_declaration.g.cc.

References lestes::std::list< T >::create(), and lestes::lang::cplus::sem::ss_befriendable_declaration::field_values_get().

Referenced by lestes::lang::cplus::sem::ss_builtin_operator_declaration::field_values_get(), and lestes::lang::cplus::sem::ss_method_declaration::field_values_get().

01894 {
01895         ptr < field_list_list > result = ss_befriendable_declaration::field_values_get();
01896         result->push_back( value_list::create() );
01897         result->back()->push_back( this->parameters );
01898         result->push_back( value_list::create() );
01899         result->back()->push_back( this->body );
01900         result->push_back( value_list::create() );
01901         result->back()->push_back( this->labels );
01902         result->push_back( value_list::create() );
01903         result->back()->push_back( this->historical_parameters );
01904         return result;
01905 }

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

Marking routine for class ss_function_declaration.

Marking routine is used for garbage collection.

Author:
lsg

Reimplemented from lestes::lang::cplus::sem::ss_befriendable_declaration.

Reimplemented in lestes::lang::cplus::sem::ss_method_declaration, and lestes::lang::cplus::sem::ss_builtin_operator_declaration.

Definition at line 1912 of file ss_declaration.g.cc.

References lestes::lang::cplus::sem::ss_befriendable_declaration::gc_mark().

Referenced by lestes::lang::cplus::sem::ss_builtin_operator_declaration::gc_mark(), and lestes::lang::cplus::sem::ss_method_declaration::gc_mark().

01913 {
01914         ss_befriendable_declaration::gc_mark();
01915 }


Member Data Documentation

srp< ss_decl_seq > lestes::lang::cplus::sem::ss_function_declaration::parameters [private]

Definition at line 1058 of file ss_declaration.g.hh.

Referenced by parameters_get(), and parameters_set().

srp< ss_compound_stmt > lestes::lang::cplus::sem::ss_function_declaration::body [private]

Compound statement of the function.

When the declaration is not a definition (ie. there was no function body), null value is used.

Parent of ss_decl_seq in the body should be set to parameters_get()->parent_get(), not to parameters_get().

Definition at line 1069 of file ss_declaration.g.hh.

Referenced by body_get(), and body_set().

srp< ::lestes::std::map< srp< ss_id_label >, srp< ss_statement > > > lestes::lang::cplus::sem::ss_function_declaration::labels [private]

Labels used inside function body. Used for goto statement.

Definition at line 1071 of file ss_declaration.g.hh.

Referenced by labels_get(), and labels_set().

srp< ::lestes::std::list< srp< ss_decl_seq > > > lestes::lang::cplus::sem::ss_function_declaration::historical_parameters [private]

Historical parameters.

Whenever a function declaration is encountered a new declseq is created, holding the parameters. The old value is of the field ss_function_declaration::parameters is put at the end of that list, so that the old names of the parameters can be retrieved later.

Definition at line 1081 of file ss_declaration.g.hh.

Referenced by historical_parameters_get(), and historical_parameters_set().

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

Reimplemented from lestes::lang::cplus::sem::ss_befriendable_declaration.

Reimplemented in lestes::lang::cplus::sem::ss_method_declaration, and lestes::lang::cplus::sem::ss_builtin_operator_declaration.

Definition at line 1082 of file ss_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:13 2007 for lestes by doxygen 1.5.1-20070107