Ignore:
Timestamp:
Mar 3, 2017, 10:12:02 PM (7 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
8191203
Parents:
f37147b
Message:

first attempt to create function specifiers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/FunctionDecl.cc

    rf37147b rdd020c0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Feb 16 15:01:52 2017
    13 // Update Count     : 23
     12// Last Modified On : Fri Mar  3 21:29:41 2017
     13// Update Count     : 55
    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, 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
     28FunctionDecl::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
    3433        if ( name == "main" ) {
    3534                set_linkage( CodeGen::FixMain::mainLinkage() );
     
    6564                os << LinkageSpec::linkageName( get_linkage() ) << " ";
    6665        } // if
    67         if ( get_isInline() ) {
    68                 os << "inline ";
    69         } // if
    70         if ( get_isNoreturn() ) {
    71                 os << "_Noreturn ";
    72         } // if
    7366
    7467        printAll( get_attributes(), os, indent );
    7568
    7669        if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
    77                 os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
     70                os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
    7871        } // if
     72        DeclarationNode::print_FuncSpec( os, get_funcSpec() );
     73
    7974        if ( get_type() ) {
    8075                get_type()->print( os, indent );
     
    9792                os << get_name() << ": ";
    9893        } // if
    99         if ( get_isInline() ) {
    100                 os << "inline ";
    101         } // if
    102         if ( get_isNoreturn() ) {
    103                 os << "_Noreturn ";
    104         } // if
    10594
    10695        // xxx - should printShort print attributes?
    10796
    10897        if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
    109                 os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
     98                os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
    11099        } // if
     100        DeclarationNode::print_FuncSpec( os, get_funcSpec() );
     101
    111102        if ( get_type() ) {
    112103                get_type()->print( os, indent );
Note: See TracChangeset for help on using the changeset viewer.