Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/FunctionDecl.cc

    rdd020c0 r3a5131ed  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar  3 21:29:41 2017
    13 // Update Count     : 55
     12// Last Modified On : Thu Feb 16 15:01:52 2017
     13// Update Count     : 23
    1414//
    1515
     
    2626extern bool translation_unit_nomain;
    2727
    28 FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, std::list< Attribute * > attributes, DeclarationNode::FuncSpec fs )
    29                 : Parent( name, sc, linkage, attributes, fs ), type( type ), statements( statements ) {
    30         set_functionSpecifiers( fs );
    31 
    32         // hack forcing the function "main" to have Cforall linkage to replace main even if it is inside an extern
     28FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, std::list< Attribute * > attributes )
     29                : Parent( name, sc, linkage, attributes ), type( type ), statements( statements ) {
     30        set_isInline( isInline );
     31        set_isNoreturn( isNoreturn );
     32        // this is a brazen hack to force the function "main" to have Cforall linkage
     33        // because we want to replace the main even if it is inside an extern
    3334        if ( name == "main" ) {
    3435                set_linkage( CodeGen::FixMain::mainLinkage() );
     
    6465                os << LinkageSpec::linkageName( get_linkage() ) << " ";
    6566        } // if
     67        if ( get_isInline() ) {
     68                os << "inline ";
     69        } // if
     70        if ( get_isNoreturn() ) {
     71                os << "_Noreturn ";
     72        } // if
    6673
    6774        printAll( get_attributes(), os, indent );
    6875
    6976        if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
    70                 os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
     77                os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
    7178        } // if
    72         DeclarationNode::print_FuncSpec( os, get_funcSpec() );
    73 
    7479        if ( get_type() ) {
    7580                get_type()->print( os, indent );
     
    9297                os << get_name() << ": ";
    9398        } // if
     99        if ( get_isInline() ) {
     100                os << "inline ";
     101        } // if
     102        if ( get_isNoreturn() ) {
     103                os << "_Noreturn ";
     104        } // if
    94105
    95106        // xxx - should printShort print attributes?
    96107
    97108        if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
    98                 os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
     109                os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
    99110        } // if
    100         DeclarationNode::print_FuncSpec( os, get_funcSpec() );
    101 
    102111        if ( get_type() ) {
    103112                get_type()->print( os, indent );
Note: See TracChangeset for help on using the changeset viewer.