Changeset 949934e for src


Ignore:
Timestamp:
Jun 29, 2017, 5:09:37 PM (8 years ago)
Author:
Rob Schluntz <rschlunt@…>
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:
1abc5ab
Parents:
2a7b3ca (diff), fe5c01d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:/u/cforall/software/cfa/cfa-cc

Location:
src
Files:
7 added
30 edited
3 moved

Legend:

Unmodified
Added
Removed
  • src/CodeGen/FixNames.cc

    r2a7b3ca r949934e  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun 21 14:22:59 2017
    13 // Update Count     : 19
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Wed Jun 28 15:26:00 2017
     13// Update Count     : 20
    1414//
    1515
     
    9393        void FixNames::fixDWT( DeclarationWithType *dwt ) {
    9494                if ( dwt->get_name() != "" ) {
    95                         if ( LinkageSpec::isDecoratable( dwt->get_linkage() ) ) {
     95                        if ( LinkageSpec::isMangled( dwt->get_linkage() ) ) {
    9696                                dwt->set_mangleName( SymTab::Mangler::mangle( dwt ) );
    9797                                dwt->set_scopeLevel( scopeLevel );
  • src/ControlStruct/ExceptTranslate.cc

    r2a7b3ca r949934e  
    1010// Created On       : Wed Jun 14 16:49:00 2017
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Jun 22 15:57:00 2017
    13 // Update Count     : 0
     12// Last Modified On : Thr Jun 29 15:18:00 2017
     13// Update Count     : 1
    1414//
    1515
    1616#include "ExceptTranslate.h"
    1717#include "Common/PassVisitor.h"
     18#include "SynTree/Statement.h"
     19#include "SynTree/Declaration.h"
     20#include "SynTree/Expression.h"
     21#include "SynTree/Type.h"
     22#include "SynTree/Attribute.h"
    1823
    1924namespace ControlFlow {
     
    3439
    3540        static void init_func_types() {
    36                 static init_complete = false;
     41                static bool init_complete = false;
    3742                if (init_complete) {
    3843                        return;
    3944                }
    4045                ObjectDecl index_obj(
    41                         "index_t",
     46                        "__handler_index",
    4247                        Type::StorageClasses(),
    4348                        LinkageSpec::Cforall,
     
    4752                );
    4853                ObjectDecl exception_obj(
    49                         "exception_t",
     54                        "__exception_inst",
    5055                        Type::StorageClasses(),
    5156                        LinkageSpec::Cforall,
     
    5560                );
    5661                ObjectDecl bool_obj(
    57                         "bool_t",
     62                        "__ret_bool",
    5863                        Type::StorageClasses(),
    5964                        LinkageSpec::Cforall,
     
    8085                    CatchList& resHandlers ) {
    8186                while ( !allHandlers.empty() ) {
    82                         Statement * stmt = allHandlers.front();
     87                        CatchStmt * stmt = allHandlers.front();
    8388                        allHandlers.pop_front();
    84                         if (CaseStmt::Terminate == stmt->get_kind()) {
     89                        if (CatchStmt::Terminate == stmt->get_kind()) {
    8590                                terHandlers.push_back(stmt);
    8691                        } else {
     
    9297        template<typename T>
    9398        void free_all( std::list<T *> &list ) {
    94                 std::list<T *>::iterator it;
     99                typename std::list<T *>::iterator it;
    95100                for ( it = list.begin() ; it != list.end() ; ++it ) {
    96101                        delete *it;
     
    100105
    101106        void appendDeclStmt( CompoundStmt * block, Declaration * item ) {
    102                 block->push_back(new DeclStmt(no_labels, item));
    103         }
    104 
    105         Expression * nameOf( FunctionDecl * function ) {
    106                 return new VariableExpr( function );
     107                block->push_back(new DeclStmt(noLabels, item));
     108        }
     109
     110        Expression * nameOf( DeclarationWithType * decl ) {
     111                return new VariableExpr( decl );
    107112        }
    108113
     
    111116        Statement * create_terminate_throw( ThrowStmt *throwStmt ) {
    112117                // __throw_terminate( EXPR );
    113                 ApplicationExpr * call = new ApplicationExpr( /* ... */ );
    114                 call->get_args.push_back( throwStmt->get_expr() );
     118                UntypedExpr * call = new UntypedExpr( new NameExpr(
     119                        "__cfaehm__throw_termination" ) );
     120                call->get_args().push_back( throwStmt->get_expr() );
    115121                Statement * result = new ExprStmt( throwStmt->get_labels(), call );
    116122                throwStmt->set_expr( nullptr );
     
    120126        Statement * create_terminate_rethrow( ThrowStmt *throwStmt ) {
    121127                // __rethrow_terminate();
     128                assert( nullptr == throwStmt->get_expr() );
    122129                Statement * result = new ExprStmt(
    123130                        throwStmt->get_labels(),
    124                         new ApplicationExpr( /* ... */ );
     131                        new UntypedExpr( new NameExpr( "__cfaehm__rethrow_termination" ) )
    125132                        );
    126133                delete throwStmt;
     
    129136        Statement * create_resume_throw( ThrowStmt *throwStmt ) {
    130137                // __throw_resume( EXPR );
    131                 ApplicationExpr * call = new ApplicationExpr( /* ... */ );
    132                 call->get_args.push_back( throwStmt->get_expr() );
     138                UntypedExpr * call = new UntypedExpr( new NameExpr(
     139                        "__cfaehm__throw_resumption" ) );
     140                call->get_args().push_back( throwStmt->get_expr() );
    133141                Statement * result = new ExprStmt( throwStmt->get_labels(), call );
    134142                throwStmt->set_expr( nullptr );
     
    140148                Statement * result = new ReturnStmt(
    141149                        throwStmt->get_labels(),
    142                         new ConstantExpr(
    143                                 Constant(
    144                                         new BasicType(
    145                                                 Type::Qualifiers(),
    146                                                 BasicType::Bool
    147                                                 ),
    148                                         "0")
    149                                 )
     150                        new ConstantExpr( Constant::from_bool( false ) )
    150151                        );
    151152                delete throwStmt;
     
    160161                return block;
    161162        }
    162         FunctionDecl * create_try_wrapper( TryStmt *tryStmt ) {
    163                 CompoundStmt * body = base_try->get_block();
    164                 base_try->set_block(nullptr);
    165 
    166                 return new FunctionDecl("try", Type::StorageClasses(),
    167                         LinkageSpec::Cforall, void_func_t, body);
     163        FunctionDecl * create_try_wrapper( CompoundStmt *body ) {
     164
     165                return new FunctionDecl( "try", Type::StorageClasses(),
     166                        LinkageSpec::Cforall, void_func_t.clone(), body );
    168167        }
    169168
    170169        FunctionDecl * create_terminate_catch( CatchList &handlers ) {
    171170                std::list<CaseStmt *> handler_wrappers;
     171
     172                FunctionType *func_type = catch_func_t.clone();
     173                DeclarationWithType * index_obj = func_type->get_parameters().front();
     174        //      DeclarationWithType * except_obj = func_type->get_parameters().back();
    172175
    173176                // Index 1..{number of handlers}
     
    178181                        CatchStmt * handler = *it;
    179182
    180                         std::list<Statement *> core;
    181                         if ( /*the exception is named*/ ) {
    182                                 ObjectDecl * local_except = /* Dynamic case, same */;
    183                                 core->push_back( new DeclStmt( noLabel, local_except ) );
    184                         }
    185                         // Append the provided statement to the handler.
    186                         core->push_back( cur_handler->get_body() );
    187                         // Append return onto the inner block? case stmt list?
    188                         CaseStmt * wrapper = new CaseStmt(
     183                        // INTEGERconstant Version
     184                        // case `index`:
     185                        // {
     186                        //     `handler.body`
     187                        // }
     188                        // return;
     189                        std::list<Statement *> caseBody;
     190                        caseBody.push_back( handler->get_body() );
     191                        handler->set_body( nullptr );
     192                        caseBody.push_back( new ReturnStmt( noLabels, nullptr ) );
     193
     194                        handler_wrappers.push_back( new CaseStmt(
    189195                                noLabels,
    190196                                new ConstantExpr( Constant::from_int( index ) ),
    191                                 core
    192                                 );
    193                         handler_wrappers.push_back(wrapper);
     197                                caseBody
     198                                ) );
    194199                }
    195200                // TODO: Some sort of meaningful error on default perhaps?
     201
     202                std::list<Statement*> stmt_handlers;
     203                while ( !handler_wrappers.empty() ) {
     204                        stmt_handlers.push_back( handler_wrappers.front() );
     205                        handler_wrappers.pop_front();
     206                }
    196207
    197208                SwitchStmt * handler_lookup = new SwitchStmt(
    198209                        noLabels,
    199                         /*parameter 0: index*/,
    200                         handler_wrappers,
    201                         false
     210                        nameOf( index_obj ),
     211                        stmt_handlers
    202212                        );
    203213                CompoundStmt * body = new CompoundStmt( noLabels );
     
    205215
    206216                return new FunctionDecl("catch", Type::StorageClasses(),
    207                         LinkageSpec::Cforall, catch_func_t, body);
     217                        LinkageSpec::Cforall, func_type, body);
    208218        }
    209219
    210220        // Create a single check from a moddified handler.
    211         CompoundStmt *create_single_matcher( CatchStmt * modded_handler ) {
    212                 CompoundStmt * block = new CompoundStmt( noLables );
    213 
    214                 appendDeclStmt( block, modded_handler->get_decl() );
    215 
    216                 // TODO: This is not the actual check.
    217                 LogicalExpr * cond = new ConstantExpr( Constant::from_bool( false ) );
     221        // except_obj is referenced, modded_handler will be freed.
     222        CompoundStmt *create_single_matcher(
     223                        DeclarationWithType * except_obj, CatchStmt * modded_handler ) {
     224                CompoundStmt * block = new CompoundStmt( noLabels );
     225
     226                // INTEGERconstant Version
     227                assert( nullptr == modded_handler->get_decl() );
     228                ConstantExpr * number =
     229                        dynamic_cast<ConstantExpr*>( modded_handler->get_cond() );
     230                assert( number );
     231                modded_handler->set_cond( nullptr );
     232
     233                Expression * cond;
     234                {
     235                        std::list<Expression *> args;
     236                        args.push_back( number );
     237                        args.push_back( nameOf( except_obj ) );
     238                        cond = new UntypedExpr( new NameExpr( "?==?" /*???*/), args );
     239                }
    218240
    219241                if ( modded_handler->get_cond() ) {
    220                         cond = new LogicalExpr( cond, modded_handler->get_cond() )q
     242                        cond = new LogicalExpr( cond, modded_handler->get_cond() );
    221243                }
    222244                block->push_back( new IfStmt( noLabels,
    223                         cond, modded_handler->get_body() );
     245                        cond, modded_handler->get_body(), nullptr ) );
    224246
    225247                modded_handler->set_decl( nullptr );
     
    232254        FunctionDecl * create_terminate_match( CatchList &handlers ) {
    233255                CompoundStmt * body = new CompoundStmt( noLabels );
     256
     257                FunctionType * func_type = match_func_t.clone();
     258                DeclarationWithType * except_obj = func_type->get_parameters().back();
    234259
    235260                // Index 1..{number of handlers}
     
    240265                        CatchStmt * handler = *it;
    241266
    242                         // body should have been taken by create_terminate_catch.
    243                         // assert( nullptr == handler->get_body() );
     267                        // Body should have been taken by create_terminate_catch.
     268                        assert( nullptr == handler->get_body() );
     269
     270                        // Create new body.
    244271                        handler->set_body( new ReturnStmt( noLabels,
    245272                                new ConstantExpr( Constant::from_int( index ) ) ) );
    246273
    247                         body->push_back( create_single_matcher( handler ) );
     274                        // Create the handler.
     275                        body->push_back( create_single_matcher( except_obj, handler ) );
     276                        *it = nullptr;
    248277                }
    249278
    250279                return new FunctionDecl("match", Type::StorageClasses(),
    251                         LinkageSpec::Cforall, match_func_t, body);
    252         }
    253 
    254         Statement * create_terminate_caller(
     280                        LinkageSpec::Cforall, func_type, body);
     281        }
     282
     283        CompoundStmt * create_terminate_caller(
    255284                        FunctionDecl * try_wrapper,
    256285                        FunctionDecl * terminate_catch,
    257286                        FunctionDecl * terminate_match) {
    258287
    259                 ApplicationExpr * caller = new ApplicationExpr( /* ... */ );
    260                 std::list<Expression *>& args = caller.get_args();
     288                UntypedExpr * caller = new UntypedExpr( new NameExpr(
     289                        "__cfaehm__try_terminate" ) );
     290                std::list<Expression *>& args = caller->get_args();
    261291                args.push_back( nameOf( try_wrapper ) );
    262292                args.push_back( nameOf( terminate_catch ) );
    263293                args.push_back( nameOf( terminate_match ) );
    264294
    265                 return new ExprStmt( noLabels, caller );
     295                CompoundStmt * callStmt = new CompoundStmt( noLabels );
     296                callStmt->push_back( new ExprStmt( noLabels, caller ) );
     297                return callStmt;
    266298        }
    267299
    268300        FunctionDecl * create_resume_handler( CatchList &handlers ) {
    269                 CompoundStmt * body = new CompountStmt( noLabels );
     301                CompoundStmt * body = new CompoundStmt( noLabels );
     302
     303                FunctionType * func_type = match_func_t.clone();
     304                DeclarationWithType * except_obj = func_type->get_parameters().back();
    270305
    271306                CatchList::iterator it;
     
    280315                                handling_code->push_back( handler->get_body() );
    281316                        }
    282                         handling_code->push_back( new ReturnStmt( noLabel,
     317                        handling_code->push_back( new ReturnStmt( noLabels,
    283318                                new ConstantExpr( Constant::from_bool( false ) ) ) );
    284319                        handler->set_body( handling_code );
    285320
    286321                        // Create the handler.
    287                         body->push_back( create_single_matcher( handler ) );
     322                        body->push_back( create_single_matcher( except_obj, handler ) );
     323                        *it = nullptr;
    288324                }
    289325
    290326                return new FunctionDecl("handle", Type::StorageClasses(),
    291                         LinkageSpec::Cforall, handle_func_t, body);
    292         }
    293 
    294         Statement * create_resume_wrapper(
     327                        LinkageSpec::Cforall, func_type, body);
     328        }
     329
     330        CompoundStmt * create_resume_wrapper(
     331                        StructDecl * node_decl,
    295332                        Statement * wraps,
    296333                        FunctionDecl * resume_handler ) {
    297334                CompoundStmt * body = new CompoundStmt( noLabels );
    298335
    299                 // struct node = {current top resume handler, call to resume_handler};
    300                 // __attribute__((cleanup( ... )));
    301                 // set top resume handler to node.
    302                 // The wrapped statement.
    303 
    304                 ListInit * node_init;
    305                 {
    306                         std::list<Initializer*> field_inits;
    307                         field_inits.push_back( new SingleInit( /* ... */ ) );
    308                         field_inits.push_back( new SingleInit( nameOf( resume_handler ) ) );
    309                         node_init = new ListInit( field_inits );
    310                 }
     336                // struct __try_resume_node __resume_node
     337                //      __attribute__((cleanup( __cfaehm__try_resume_cleanup )));
     338                // ** unwinding of the stack here could cause problems **
     339                // ** however I don't think that can happen currently **
     340                // __cfaehm__try_resume_setup( &__resume_node, resume_handler );
    311341
    312342                std::list< Attribute * > attributes;
    313343                {
    314344                        std::list< Expression * > attr_params;
    315                         attr_params.push_back( nameOf( /* ... deconstructor ... */ ) );
    316                         attrributes.push_back( new Attribute( "cleanup", attr_params ) );
    317                 }
    318 
    319                 appendDeclStmt( body,
    320                 /**/ ObjectDecl(
    321                         "resume_node",
     345                        attr_params.push_back( new NameExpr(
     346                                "__cfaehm__try_resume_cleanup" ) );
     347                        attributes.push_back( new Attribute( "cleanup", attr_params ) );
     348                }
     349
     350                ObjectDecl * obj = new ObjectDecl(
     351                        "__resume_node",
    322352                        Type::StorageClasses(),
    323353                        LinkageSpec::Cforall,
    324354                        nullptr,
    325                         /* Type* = resume_node */,
    326                         node_init,
     355                        new StructInstType(
     356                                Type::Qualifiers(),
     357                                node_decl
     358                                ),
     359                        nullptr,
    327360                        attributes
    328                         )
    329                 );
     361                        );
     362                appendDeclStmt( body, obj );
     363
     364                UntypedExpr *setup = new UntypedExpr( new NameExpr(
     365                        "__cfaehm__try_resume_setup" ) );
     366                setup->get_args().push_back( nameOf( obj ) );
     367                setup->get_args().push_back( nameOf( resume_handler ) );
     368
     369                body->push_back( new ExprStmt( noLabels, setup ) );
     370
    330371                body->push_back( wraps );
    331372                return body;
     
    333374
    334375        FunctionDecl * create_finally_wrapper( TryStmt * tryStmt ) {
    335                 CompoundStmt * body = tryStmt->get_finally();
     376                FinallyStmt * finally = tryStmt->get_finally();
     377                CompoundStmt * body = finally->get_block();
     378                finally->set_block( nullptr );
     379                delete finally;
    336380                tryStmt->set_finally( nullptr );
    337381
    338382                return new FunctionDecl("finally", Type::StorageClasses(),
    339                         LinkageSpec::Cforall, void_func_t, body);
    340         }
    341 
    342         ObjectDecl * create_finally_hook( FunctionDecl * finally_wrapper ) {
    343                 // struct _cleanup_hook NAME __attribute__((cleanup( ... )));
     383                        LinkageSpec::Cforall, void_func_t.clone(), body);
     384        }
     385
     386        ObjectDecl * create_finally_hook(
     387                        StructDecl * hook_decl, FunctionDecl * finally_wrapper ) {
     388                // struct __cfaehm__cleanup_hook __finally_hook
     389                //      __attribute__((cleanup( finally_wrapper )));
    344390
    345391                // Make Cleanup Attribute.
     
    348394                        std::list< Expression * > attr_params;
    349395                        attr_params.push_back( nameOf( finally_wrapper ) );
    350                         attrributes.push_back( new Attribute( "cleanup", attr_params ) );
    351                 }
    352 
    353                 return ObjectDecl( /* ... */
    354                         const std::string &name "finally_hook",
     396                        attributes.push_back( new Attribute( "cleanup", attr_params ) );
     397                }
     398
     399                return new ObjectDecl(
     400                        "__finally_hook",
    355401                        Type::StorageClasses(),
    356402                        LinkageSpec::Cforall,
    357403                        nullptr,
    358                         /* ... Type * ... */,
     404                        new StructInstType(
     405                                emptyQualifiers,
     406                                hook_decl
     407                                ),
    359408                        nullptr,
    360409                        attributes
     
    363412
    364413
    365         class ExceptionMutatorCore : public WithScoping {
     414        class ExceptionMutatorCore : public WithScopes {
    366415                enum Context { NoHandler, TerHandler, ResHandler };
    367416
     
    370419                // loop, switch or the goto stays within the function.
    371420
    372                 Context curContext;
     421                Context cur_context;
    373422
    374423                // We might not need this, but a unique base for each try block's
     
    377426                //unsigned int try_count = 0;
    378427
     428                StructDecl *node_decl;
     429                StructDecl *hook_decl;
    379430
    380431        public:
    381432                ExceptionMutatorCore() :
    382                         curContext(NoHandler)
     433                        cur_context(NoHandler),
     434                        node_decl(nullptr), hook_decl(nullptr)
    383435                {}
    384436
    385                 void premutate( CatchStmt *tryStmt );
     437                void premutate( CatchStmt *catchStmt );
     438                void premutate( StructDecl *structDecl );
    386439                Statement * postmutate( ThrowStmt *throwStmt );
    387440                Statement * postmutate( TryStmt *tryStmt );
     
    393446                        if ( throwStmt->get_expr() ) {
    394447                                return create_terminate_throw( throwStmt );
    395                         } else if ( TerHandler == curContext ) {
     448                        } else if ( TerHandler == cur_context ) {
    396449                                return create_terminate_rethrow( throwStmt );
    397450                        } else {
    398451                                assertf(false, "Invalid throw in %s at %i\n",
    399                                         throwStmt->location.filename,
     452                                        throwStmt->location.filename.c_str(),
    400453                                        throwStmt->location.linenumber);
    401454                                return nullptr;
     
    404457                        if ( throwStmt->get_expr() ) {
    405458                                return create_resume_throw( throwStmt );
    406                         } else if ( ResHandler == curContext ) {
     459                        } else if ( ResHandler == cur_context ) {
    407460                                return create_resume_rethrow( throwStmt );
    408461                        } else {
    409462                                assertf(false, "Invalid throwResume in %s at %i\n",
    410                                         throwStmt->location.filename,
     463                                        throwStmt->location.filename.c_str(),
    411464                                        throwStmt->location.linenumber);
    412465                                return nullptr;
     
    416469
    417470        Statement * ExceptionMutatorCore::postmutate( TryStmt *tryStmt ) {
     471                assert( node_decl );
     472                assert( hook_decl );
     473
    418474                // Generate a prefix for the function names?
    419475
    420                 CompoundStmt * block = new CompoundStmt();
    421                 Statement * inner = take_try_block( tryStmt );
     476                CompoundStmt * block = new CompoundStmt( noLabels );
     477                CompoundStmt * inner = take_try_block( tryStmt );
    422478
    423479                if ( tryStmt->get_finally() ) {
     
    427483                        appendDeclStmt( block, finally_block );
    428484                        // Create and add the finally cleanup hook.
    429                         appendDeclStmt( block, create_finally_hook( finally_block ) );
    430                 }
    431 
    432                 StatementList termination_handlers;
    433                 StatementList resumption_handlers;
    434                 split( tryStmt->get_handlers(),
     485                        appendDeclStmt( block,
     486                                create_finally_hook( hook_decl, finally_block ) );
     487                }
     488
     489                CatchList termination_handlers;
     490                CatchList resumption_handlers;
     491                split( tryStmt->get_catchers(),
    435492                       termination_handlers, resumption_handlers );
    436493
    437                 if ( resumeption_handlers.size() ) {
     494                if ( resumption_handlers.size() ) {
    438495                        // Define the helper function.
    439496                        FunctionDecl * resume_handler =
     
    441498                        appendDeclStmt( block, resume_handler );
    442499                        // Prepare hooks
    443                         inner = create_resume_wrapper( inner, resume_handler );
     500                        inner = create_resume_wrapper( node_decl, inner, resume_handler );
    444501                }
    445502
     
    462519                block->push_back( inner );
    463520
    464                 free_all( termination_handlers );
    465                 free_all( resumption_handlers );
     521                //free_all( termination_handlers );
     522                //free_all( resumption_handlers );
    466523
    467524                return block;
     
    469526
    470527        void ExceptionMutatorCore::premutate( CatchStmt *catchStmt ) {
    471                 GuardValue( curContext );
    472                 if ( CatchStmt::Termination == catchStmt->get_kind() ) {
    473                         curContext = TerHandler;
     528                GuardValue( cur_context );
     529                if ( CatchStmt::Terminate == catchStmt->get_kind() ) {
     530                        cur_context = TerHandler;
    474531                } else {
    475                         curContext = ResHandler;
    476                 }
     532                        cur_context = ResHandler;
     533                }
     534        }
     535
     536        void ExceptionMutatorCore::premutate( StructDecl *structDecl ) {
     537                if ( !structDecl->has_body() ) {
     538                        // Skip children?
     539                        return;
     540                } else if ( structDecl->get_name() == "__cfaehm__try_resume_node" ) {
     541                        assert( nullptr == node_decl );
     542                        node_decl = structDecl;
     543                } else if ( structDecl->get_name() == "__cfaehm__cleanup_hook" ) {
     544                        assert( nullptr == hook_decl );
     545                        hook_decl = structDecl;
     546                }
     547                // Later we might get the exception type as well.
    477548        }
    478549
    479550    void translateEHM( std::list< Declaration *> & translationUnit ) {
     551                init_func_types();
     552
    480553                PassVisitor<ExceptionMutatorCore> translator;
    481554                for ( Declaration * decl : translationUnit ) {
    482                         decl->mutate( translator );
     555                        decl->acceptMutator( translator );
    483556                }
    484557        }
  • src/ControlStruct/ExceptTranslate.h

    r2a7b3ca r949934e  
    1010// Created On       : Tus Jun 06 10:13:00 2017
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Jun 22 15:57:00 2017
    13 // Update Count     : 0
     12// Last Modified On : Thr Jun 29 15:18:00 2017
     13// Update Count     : 1
    1414//
    1515
    1616#ifndef EXCEPT_TRANSLATE_H
    1717#define EXCEPT_TRANSLATE_H
     18
     19#include <list>
     20#include "SynTree/SynTree.h"
    1821
    1922namespace ControlFlow {
  • src/ControlStruct/module.mk

    r2a7b3ca r949934e  
    1010## Author           : Richard C. Bilson
    1111## Created On       : Mon Jun  1 17:49:17 2015
    12 ## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Thu Aug  4 11:38:06 2016
    14 ## Update Count     : 3
     12## Last Modified By : Andrew Beach
     13## Last Modified On : Wed Jun 28 16:15:00 2017
     14## Update Count     : 4
    1515###############################################################################
    1616
    1717SRC +=  ControlStruct/LabelGenerator.cc \
    1818        ControlStruct/LabelFixer.cc \
    19         ControlStruct/MLEMutator.cc \
     19        ControlStruct/MLEMutator.cc \
    2020        ControlStruct/Mutate.cc \
    21         ControlStruct/ForExprMutator.cc
    22 
     21        ControlStruct/ForExprMutator.cc \
     22        ControlStruct/ExceptTranslate.cc
  • src/Makefile.in

    r2a7b3ca r949934e  
    119119        ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT) \
    120120        ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) \
     121        ControlStruct/driver_cfa_cpp-ExceptTranslate.$(OBJEXT) \
    121122        GenPoly/driver_cfa_cpp-Box.$(OBJEXT) \
    122123        GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT) \
     
    143144        Parser/driver_cfa_cpp-TypeData.$(OBJEXT) \
    144145        Parser/driver_cfa_cpp-LinkageSpec.$(OBJEXT) \
    145         Parser/driver_cfa_cpp-parseutility.$(OBJEXT) \
     146        Parser/driver_cfa_cpp-parserutility.$(OBJEXT) \
    146147        ResolvExpr/driver_cfa_cpp-AlternativeFinder.$(OBJEXT) \
    147148        ResolvExpr/driver_cfa_cpp-Alternative.$(OBJEXT) \
     
    394395        ControlStruct/LabelGenerator.cc ControlStruct/LabelFixer.cc \
    395396        ControlStruct/MLEMutator.cc ControlStruct/Mutate.cc \
    396         ControlStruct/ForExprMutator.cc GenPoly/Box.cc \
     397        ControlStruct/ForExprMutator.cc \
     398        ControlStruct/ExceptTranslate.cc GenPoly/Box.cc \
    397399        GenPoly/GenPoly.cc GenPoly/PolyMutator.cc \
    398400        GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \
     
    405407        Parser/ExpressionNode.cc Parser/StatementNode.cc \
    406408        Parser/InitializerNode.cc Parser/TypeData.cc \
    407         Parser/LinkageSpec.cc Parser/parseutility.cc \
     409        Parser/LinkageSpec.cc Parser/parserutility.cc \
    408410        ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \
    409411        ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \
     
    594596        ControlStruct/$(am__dirstamp) \
    595597        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     598ControlStruct/driver_cfa_cpp-ExceptTranslate.$(OBJEXT):  \
     599        ControlStruct/$(am__dirstamp) \
     600        ControlStruct/$(DEPDIR)/$(am__dirstamp)
    596601GenPoly/$(am__dirstamp):
    597602        @$(MKDIR_P) GenPoly
     
    663668Parser/driver_cfa_cpp-LinkageSpec.$(OBJEXT): Parser/$(am__dirstamp) \
    664669        Parser/$(DEPDIR)/$(am__dirstamp)
    665 Parser/driver_cfa_cpp-parseutility.$(OBJEXT): Parser/$(am__dirstamp) \
     670Parser/driver_cfa_cpp-parserutility.$(OBJEXT): Parser/$(am__dirstamp) \
    666671        Parser/$(DEPDIR)/$(am__dirstamp)
    667672ResolvExpr/$(am__dirstamp):
     
    853858        -rm -f Common/driver_cfa_cpp-UniqueName.$(OBJEXT)
    854859        -rm -f Concurrency/driver_cfa_cpp-Keywords.$(OBJEXT)
     860        -rm -f ControlStruct/driver_cfa_cpp-ExceptTranslate.$(OBJEXT)
    855861        -rm -f ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT)
    856862        -rm -f ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT)
     
    882888        -rm -f Parser/driver_cfa_cpp-lex.$(OBJEXT)
    883889        -rm -f Parser/driver_cfa_cpp-parser.$(OBJEXT)
    884         -rm -f Parser/driver_cfa_cpp-parseutility.$(OBJEXT)
     890        -rm -f Parser/driver_cfa_cpp-parserutility.$(OBJEXT)
    885891        -rm -f ResolvExpr/driver_cfa_cpp-AdjustExprType.$(OBJEXT)
    886892        -rm -f ResolvExpr/driver_cfa_cpp-Alternative.$(OBJEXT)
     
    965971@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-UniqueName.Po@am__quote@
    966972@AMDEP_TRUE@@am__include@ @am__quote@Concurrency/$(DEPDIR)/driver_cfa_cpp-Keywords.Po@am__quote@
     973@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Po@am__quote@
    967974@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ForExprMutator.Po@am__quote@
    968975@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-LabelFixer.Po@am__quote@
     
    9941001@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-lex.Po@am__quote@
    9951002@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-parser.Po@am__quote@
    996 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Po@am__quote@
     1003@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Po@am__quote@
    9971004@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-AdjustExprType.Po@am__quote@
    9981005@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-Alternative.Po@am__quote@
     
    13551362@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ForExprMutator.obj `if test -f 'ControlStruct/ForExprMutator.cc'; then $(CYGPATH_W) 'ControlStruct/ForExprMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ForExprMutator.cc'; fi`
    13561363
     1364ControlStruct/driver_cfa_cpp-ExceptTranslate.o: ControlStruct/ExceptTranslate.cc
     1365@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-ExceptTranslate.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.o `test -f 'ControlStruct/ExceptTranslate.cc' || echo '$(srcdir)/'`ControlStruct/ExceptTranslate.cc
     1366@am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Po
     1367@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='ControlStruct/ExceptTranslate.cc' object='ControlStruct/driver_cfa_cpp-ExceptTranslate.o' libtool=no @AMDEPBACKSLASH@
     1368@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1369@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.o `test -f 'ControlStruct/ExceptTranslate.cc' || echo '$(srcdir)/'`ControlStruct/ExceptTranslate.cc
     1370
     1371ControlStruct/driver_cfa_cpp-ExceptTranslate.obj: ControlStruct/ExceptTranslate.cc
     1372@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-ExceptTranslate.obj -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.obj `if test -f 'ControlStruct/ExceptTranslate.cc'; then $(CYGPATH_W) 'ControlStruct/ExceptTranslate.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ExceptTranslate.cc'; fi`
     1373@am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Po
     1374@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='ControlStruct/ExceptTranslate.cc' object='ControlStruct/driver_cfa_cpp-ExceptTranslate.obj' libtool=no @AMDEPBACKSLASH@
     1375@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1376@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.obj `if test -f 'ControlStruct/ExceptTranslate.cc'; then $(CYGPATH_W) 'ControlStruct/ExceptTranslate.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ExceptTranslate.cc'; fi`
     1377
    13571378GenPoly/driver_cfa_cpp-Box.o: GenPoly/Box.cc
    13581379@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-Box.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-Box.Tpo -c -o GenPoly/driver_cfa_cpp-Box.o `test -f 'GenPoly/Box.cc' || echo '$(srcdir)/'`GenPoly/Box.cc
     
    16911712@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-LinkageSpec.obj `if test -f 'Parser/LinkageSpec.cc'; then $(CYGPATH_W) 'Parser/LinkageSpec.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/LinkageSpec.cc'; fi`
    16921713
    1693 Parser/driver_cfa_cpp-parseutility.o: Parser/parseutility.cc
    1694 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parseutility.o -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Tpo -c -o Parser/driver_cfa_cpp-parseutility.o `test -f 'Parser/parseutility.cc' || echo '$(srcdir)/'`Parser/parseutility.cc
    1695 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Po
    1696 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Parser/parseutility.cc' object='Parser/driver_cfa_cpp-parseutility.o' libtool=no @AMDEPBACKSLASH@
    1697 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1698 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parseutility.o `test -f 'Parser/parseutility.cc' || echo '$(srcdir)/'`Parser/parseutility.cc
    1699 
    1700 Parser/driver_cfa_cpp-parseutility.obj: Parser/parseutility.cc
    1701 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parseutility.obj -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Tpo -c -o Parser/driver_cfa_cpp-parseutility.obj `if test -f 'Parser/parseutility.cc'; then $(CYGPATH_W) 'Parser/parseutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parseutility.cc'; fi`
    1702 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Po
    1703 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Parser/parseutility.cc' object='Parser/driver_cfa_cpp-parseutility.obj' libtool=no @AMDEPBACKSLASH@
    1704 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1705 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parseutility.obj `if test -f 'Parser/parseutility.cc'; then $(CYGPATH_W) 'Parser/parseutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parseutility.cc'; fi`
     1714Parser/driver_cfa_cpp-parserutility.o: Parser/parserutility.cc
     1715@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parserutility.o -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Tpo -c -o Parser/driver_cfa_cpp-parserutility.o `test -f 'Parser/parserutility.cc' || echo '$(srcdir)/'`Parser/parserutility.cc
     1716@am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Po
     1717@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Parser/parserutility.cc' object='Parser/driver_cfa_cpp-parserutility.o' libtool=no @AMDEPBACKSLASH@
     1718@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1719@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parserutility.o `test -f 'Parser/parserutility.cc' || echo '$(srcdir)/'`Parser/parserutility.cc
     1720
     1721Parser/driver_cfa_cpp-parserutility.obj: Parser/parserutility.cc
     1722@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parserutility.obj -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Tpo -c -o Parser/driver_cfa_cpp-parserutility.obj `if test -f 'Parser/parserutility.cc'; then $(CYGPATH_W) 'Parser/parserutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parserutility.cc'; fi`
     1723@am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Po
     1724@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='Parser/parserutility.cc' object='Parser/driver_cfa_cpp-parserutility.obj' libtool=no @AMDEPBACKSLASH@
     1725@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1726@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parserutility.obj `if test -f 'Parser/parserutility.cc'; then $(CYGPATH_W) 'Parser/parserutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parserutility.cc'; fi`
    17061727
    17071728ResolvExpr/driver_cfa_cpp-AlternativeFinder.o: ResolvExpr/AlternativeFinder.cc
  • src/Parser/DeclarationNode.cc

    r2a7b3ca r949934e  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 12:34:05 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar 17 15:46:33 2017
    13 // Update Count     : 1018
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Wed Jun 28 15:27:00 2017
     13// Update Count     : 1019
    1414//
    1515
     
    10631063          case TypeData::Enum:
    10641064          case TypeData::Aggregate: {
    1065                   ReferenceToType * ret = buildComAggInst( type, attributes );
     1065                  ReferenceToType * ret = buildComAggInst( type, attributes, linkage );
    10661066                  buildList( type->aggregate.actuals, ret->get_parameters() );
    10671067                  return ret;
  • src/Parser/ExpressionNode.cc

    r2a7b3ca r949934e  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun 21 16:44:46 2017
    13 // Update Count     : 541
     12// Last Modified On : Wed Jun 28 21:08:15 2017
     13// Update Count     : 542
    1414//
    1515
     
    2727#include "SynTree/Declaration.h"
    2828#include "Common/UnimplementedError.h"
    29 #include "parseutility.h"
     29#include "parserutility.h"
    3030#include "Common/utility.h"
    3131
  • src/Parser/LinkageSpec.cc

    r2a7b3ca r949934e  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 13:22:09 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Oct  2 23:16:21 2016
    13 // Update Count     : 23
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Wed Jun 28 11:51:00 2017
     13// Update Count     : 24
    1414//
    1515
     
    2828        } else if ( *spec == "\"C\"" ) {
    2929                return C;
     30        } else if ( *spec == "\"BuiltinC\"" ) {
     31                return BuiltinC;
    3032        } else {
    3133                throw SemanticError( "Invalid linkage specifier " + *spec );
     
    3638        assert( 0 <= linkage && linkage < LinkageSpec::NoOfSpecs );
    3739        static const char *linkageKinds[LinkageSpec::NoOfSpecs] = {
    38                 "intrinsic", "Cforall", "C", "automatically generated", "compiler built-in",
     40                "intrinsic", "Cforall", "C", "automatically generated", "compiler built-in", "cfa built-in", "c built-in",
    3941        };
    4042        return linkageKinds[linkage];
    4143}
    4244
    43 bool LinkageSpec::isDecoratable( Spec spec ) {
     45bool LinkageSpec::isMangled( Spec spec ) {
    4446        assert( 0 <= spec && spec < LinkageSpec::NoOfSpecs );
    4547        static bool decoratable[LinkageSpec::NoOfSpecs] = {
    46                 //      Intrinsic,      Cforall,        C,              AutoGen,        Compiler
     48                //      Intrinsic,      Cforall,        C,              AutoGen,        Compiler,
    4749                        true,           true,           false,  true,           false,
     50                //      Builtin,        BuiltinC,
     51                        true,           false,
    4852        };
    4953        return decoratable[spec];
     
    5357        assert( 0 <= spec && spec < LinkageSpec::NoOfSpecs );
    5458        static bool generatable[LinkageSpec::NoOfSpecs] = {
    55                 //      Intrinsic,      Cforall,        C,              AutoGen,        Compiler
     59                //      Intrinsic,      Cforall,        C,              AutoGen,        Compiler,
    5660                        true,           true,           true,   true,           false,
     61                //      Builtin,        BuiltinC,
     62                        true,           true,
    5763        };
    5864        return generatable[spec];
     
    6268        assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
    6369        static bool overridable[LinkageSpec::NoOfSpecs] = {
    64                 //      Intrinsic,      Cforall,        C,              AutoGen,        Compiler
     70                //      Intrinsic,      Cforall,        C,              AutoGen,        Compiler,
    6571                        true,           false,          false,  true,           false,
     72                //      Builtin,        BuiltinC,
     73                        false,          false,
    6674        };
    6775        return overridable[spec];
     
    7179        assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
    7280        static bool builtin[LinkageSpec::NoOfSpecs] = {
    73                 //      Intrinsic,      Cforall,        C,              AutoGen,        Compiler
     81                //      Intrinsic,      Cforall,        C,              AutoGen,        Compiler,
    7482                        true,           false,          false,  false,          true,
     83                //      Builtin,        BuiltinC,
     84                        true,           true,
    7585        };
    7686        return builtin[spec];
  • src/Parser/LinkageSpec.h

    r2a7b3ca r949934e  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 13:24:28 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Oct  1 23:03:17 2016
    13 // Update Count     : 11
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Wed Jun 28 11:50:00 2017
     13// Update Count     : 12
    1414//
    1515
     
    2626                AutoGen,                                                                                // built by translator (struct assignment)
    2727                Compiler,                                                                               // gcc internal
     28                Builtin,                                                                                // mangled builtins
     29                BuiltinC,                                                                               // non-mangled builtins
    2830                NoOfSpecs
    2931        };
     
    3234        static std::string linkageName( Spec );
    3335 
    34         static bool isDecoratable( Spec );
     36        static bool isMangled( Spec );
    3537        static bool isGeneratable( Spec );
    3638        static bool isOverridable( Spec );
  • src/Parser/StatementNode.cc

    r2a7b3ca r949934e  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 14:59:41 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Mon Jun 12 13:03:00 2017
    13 // Update Count     : 329
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Jun 28 21:08:37 2017
     13// Update Count     : 330
    1414//
    1515
     
    2121#include "SynTree/Statement.h"
    2222#include "SynTree/Expression.h"
    23 #include "parseutility.h"
     23#include "parserutility.h"
    2424#include "Common/utility.h"
    2525
  • src/Parser/TypeData.cc

    r2a7b3ca r949934e  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 15:12:51 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar 17 15:52:43 2017
    13 // Update Count     : 563
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Wed Jun 28 15:28:00 2017
     13// Update Count     : 564
    1414//
    1515
     
    614614} // buildPointer
    615615
    616 AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes ) {
     616AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) {
    617617        assert( td->kind == TypeData::Aggregate );
    618618        AggregateDecl * at;
     
    622622          case DeclarationNode::Monitor:
    623623          case DeclarationNode::Thread:
    624                 at = new StructDecl( *td->aggregate.name, td->aggregate.kind, attributes );
     624                at = new StructDecl( *td->aggregate.name, td->aggregate.kind, attributes, linkage );
    625625                buildForall( td->aggregate.params, at->get_parameters() );
    626626                break;
     
    643643} // buildAggregate
    644644
    645 ReferenceToType * buildComAggInst( const TypeData * type, std::list< Attribute * > attributes ) {
     645ReferenceToType * buildComAggInst( const TypeData * type, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) {
    646646        switch ( type->kind ) {
    647647          case TypeData::Enum: {
     
    656656                  ReferenceToType * ret;
    657657                  if ( type->aggregate.body ) {
    658                           AggregateDecl * typedecl = buildAggregate( type, attributes );
     658                          AggregateDecl * typedecl = buildAggregate( type, attributes, linkage );
    659659                          switch ( type->aggregate.kind ) {
    660660                                case DeclarationNode::Struct:
     
    802802                return decl->set_asmName( asmName );
    803803        } else if ( td->kind == TypeData::Aggregate ) {
    804                 return buildAggregate( td, attributes );
     804                return buildAggregate( td, attributes, linkage );
    805805        } else if ( td->kind == TypeData::Enum ) {
    806806                return buildEnum( td, attributes );
  • src/Parser/TypeData.h

    r2a7b3ca r949934e  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 15:18:36 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 16 08:32:39 2017
    13 // Update Count     : 185
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Wed Jun 28 15:29:00 2017
     13// Update Count     : 186
    1414//
    1515
     
    102102ArrayType * buildArray( const TypeData * );
    103103AggregateDecl * buildAggregate( const TypeData *, std::list< Attribute * > );
    104 ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes );
     104ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes, LinkageSpec::Spec linkage );
    105105ReferenceToType * buildAggInst( const TypeData * );
    106106TypeDecl * buildVariable( const TypeData * );
  • src/Parser/TypedefTable.h

    r2a7b3ca r949934e  
    1010// Created On       : Sat May 16 15:24:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Aug 15 18:25:04 2016
    13 // Update Count     : 28
     12// Last Modified On : Wed Jun 28 21:56:34 2017
     13// Update Count     : 33
    1414//
    1515
     
    2222#include <stack>
    2323
    24 #include "lex.h"
     24#include "parser.hh"
    2525#include "parser.h"
    2626
  • src/Parser/lex.ll

    r2a7b3ca r949934e  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Tue May 30 22:00:48 2017
    13  * Update Count     : 527
     12 * Last Modified On : Wed Jun 28 21:03:45 2017
     13 * Update Count     : 529
    1414 */
    1515
     
    2727#include <cstdio>                                                                               // FILENAME_MAX
    2828
    29 #include "lex.h"
    30 #include "parser.h"                                                                             // YACC generated definitions based on C++ grammar
    3129#include "ParseNode.h"
    3230#include "TypedefTable.h"
  • src/Parser/module.mk

    r2a7b3ca r949934e  
    1111## Created On       : Sat May 16 15:29:09 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Tue Aug 16 17:28:34 2016
    14 ## Update Count     : 101
     13## Last Modified On : Wed Jun 28 21:58:29 2017
     14## Update Count     : 104
    1515###############################################################################
    1616
     
    2929       Parser/TypeData.cc \
    3030       Parser/LinkageSpec.cc \
    31        Parser/parseutility.cc
     31       Parser/parserutility.cc
    3232
    3333MAINTAINERCLEANFILES += Parser/parser.output
  • src/Parser/parser.hh

    r2a7b3ca r949934e  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // lex.h --
     7// parser.hh --
    88//
    99// Author           : Peter A. Buhr
    1010// Created On       : Sat Sep 22 08:58:10 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Aug 21 11:28:47 2016
    13 // Update Count     : 347
     12// Last Modified On : Wed Jun 28 22:10:17 2017
     13// Update Count     : 349
    1414//
    1515
    16 #ifndef PARSER_LEX_H
    17 #define PARSER_LEX_H
     16#ifndef PARSER_HH
     17#define PARSER_HH
    1818
    1919int yylex();
     
    4242}; // Token
    4343
    44 #endif // PARSER_LEX_H
     44#endif // PARSER_HH
    4545
    4646// Local Variables: //
  • src/Parser/parser.yy

    r2a7b3ca r949934e  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // cfa.y --
     7// parser.yy --
    88//
    99// Author           : Peter A. Buhr
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun 12 12:59:00 2017
    13 // Update Count     : 2402
     12// Last Modified On : Wed Jun 28 22:11:22 2017
     13// Update Count     : 2414
    1414//
    1515
     
    4848#include <cstdio>
    4949#include <stack>
    50 #include "lex.h"
    51 #include "parser.h"
    5250#include "ParseNode.h"
    5351#include "TypedefTable.h"
     
    8886bool forall = false;                                                                    // aggregate have one or more forall qualifiers ?
    8987%}
     88
     89// Types declaration
     90%union
     91{
     92        Token tok;
     93        ParseNode * pn;
     94        ExpressionNode * en;
     95        DeclarationNode * decl;
     96        DeclarationNode::Aggregate aggKey;
     97        DeclarationNode::TypeClass tclass;
     98        StatementNode * sn;
     99        ConstantExpr * constant;
     100        ForCtl * fctl;
     101        LabelNode * label;
     102        InitializerNode * in;
     103        OperKinds op;
     104        std::string * str;
     105        bool flag;
     106}
    90107
    91108//************************* TERMINAL TOKENS ********************************
     
    139156
    140157%token ATassign                                                                                 // @=
    141 
    142 // Types declaration
    143 %union
    144 {
    145         Token tok;
    146         ParseNode * pn;
    147         ExpressionNode * en;
    148         DeclarationNode * decl;
    149         DeclarationNode::Aggregate aggKey;
    150         DeclarationNode::TypeClass tclass;
    151         StatementNode * sn;
    152         ConstantExpr * constant;
    153         ForCtl * fctl;
    154         LabelNode * label;
    155         InitializerNode * in;
    156         OperKinds op;
    157         std::string * str;
    158         bool flag;
    159 }
    160158
    161159%type<tok> identifier  no_attr_identifier  zero_one
     
    959957
    960958handler_clause:
    961         CATCH '(' push push exception_declaration pop ')' compound_statement pop
     959        // TEMPORARY, TEST EXCEPTIONS
     960        CATCH '(' push push INTEGERconstant pop ')' compound_statement pop
     961                { $$ = new StatementNode( build_catch( CatchStmt::Terminate, nullptr, new ExpressionNode( build_constantInteger( *$5 ) ), $8 ) ); }
     962        | handler_clause CATCH '(' push push INTEGERconstant pop ')' compound_statement pop
     963                { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( CatchStmt::Terminate, nullptr, new ExpressionNode( build_constantInteger( *$6 ) ), $9 ) ) ); }
     964
     965        | CATCH '(' push push exception_declaration pop ')' compound_statement pop
    962966                { $$ = new StatementNode( build_catch( CatchStmt::Terminate, $5, nullptr, $8 ) ); }
    963967        | handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
  • src/Parser/parserutility.cc

    r2a7b3ca r949934e  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // parseutility.cc --
     7// parserutility.cc --
    88//
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 15:30:39 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun 21 15:33:41 2017
    13 // Update Count     : 5
     12// Last Modified On : Wed Jun 28 22:11:32 2017
     13// Update Count     : 7
    1414//
    1515
    16 #include "parseutility.h"
     16#include "parserutility.h"
    1717#include "SynTree/Type.h"
    1818#include "SynTree/Expression.h"
  • src/Parser/parserutility.h

    r2a7b3ca r949934e  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // parseutility.h --
     7// parserutility.h --
    88//
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 15:31:46 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat May 16 15:32:58 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Jun 28 22:11:40 2017
     13// Update Count     : 3
    1414//
    1515
  • src/SymTab/Autogen.cc

    r2a7b3ca r949934e  
    99// Author           : Rob Schluntz
    1010// Created On       : Thu Mar 03 15:45:56 2016
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar 17 09:41:08 2017
    13 // Update Count     : 60
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Wed Jun 28 15:30:00 2017
     13// Update Count     : 61
    1414//
    1515
     
    400400        /// generates struct constructors, destructor, and assignment functions
    401401        void makeStructFunctions( StructDecl *aggregateDecl, StructInstType *refType, unsigned int functionNesting, std::list< Declaration * > & declsToAdd, const std::vector< FuncData > & data ) {
     402                // Builtins do not use autogeneration.
     403                if ( aggregateDecl->get_linkage() == LinkageSpec::Builtin ||
     404                         aggregateDecl->get_linkage() == LinkageSpec::BuiltinC ) {
     405                        return;
     406                }
     407
    402408                // Make function polymorphic in same parameters as generic struct, if applicable
    403409                const std::list< TypeDecl* > & typeParams = aggregateDecl->get_parameters(); // List of type variables to be placed on the generated functions
  • src/SymTab/Mangler.cc

    r2a7b3ca r949934e  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 21:40:29 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar 17 09:40:01 2017
    13 // Update Count     : 20
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Wed Jun 28 15:31:00 2017
     13// Update Count     : 21
    1414//
    1515
     
    7272                        } else {
    7373                                // if we add another kind of overridable function, this has to change
    74                                 assert( false );
     74                                assert( false && "unknown overrideable linkage" );
    7575                        } // if
    7676                }
  • src/SynTree/AggregateDecl.cc

    r2a7b3ca r949934e  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 23:56:39 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 16 07:49:07 2017
    13 // Update Count     : 20
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Tus Jun 27 15:30:00 2017
     13// Update Count     : 21
    1414//
    1515
     
    2020
    2121
    22 AggregateDecl::AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes ) : Parent( name, Type::StorageClasses(), LinkageSpec::Cforall ), body( false ), attributes( attributes ) {
     22AggregateDecl::AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes, LinkageSpec::Spec linkage ) : Parent( name, Type::StorageClasses(), linkage ), body( false ), attributes( attributes ) {
    2323}
    2424
  • src/SynTree/Declaration.h

    r2a7b3ca r949934e  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar 17 16:05:08 2017
    13 // Update Count     : 121
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Tus Jun 27 15:31:00 2017
     13// Update Count     : 122
    1414//
    1515
     
    238238        typedef Declaration Parent;
    239239  public:
    240         AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() );
     240        AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall );
    241241        AggregateDecl( const AggregateDecl &other );
    242242        virtual ~AggregateDecl();
     
    266266        typedef AggregateDecl Parent;
    267267  public:
    268         StructDecl( const std::string &name, DeclarationNode::Aggregate kind = DeclarationNode::Struct, const std::list< Attribute * > & attributes = std::list< class Attribute * >() ) : Parent( name, attributes ), kind( kind ) {}
     268        StructDecl( const std::string &name, DeclarationNode::Aggregate kind = DeclarationNode::Struct, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ), kind( kind ) {}
    269269        StructDecl( const StructDecl &other ) : Parent( other ) {}
    270270
     
    284284        typedef AggregateDecl Parent;
    285285  public:
    286         UnionDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() ) : Parent( name, attributes ) {}
     286        UnionDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ) {}
    287287        UnionDecl( const UnionDecl &other ) : Parent( other ) {}
    288288
     
    297297        typedef AggregateDecl Parent;
    298298  public:
    299         EnumDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() ) : Parent( name, attributes ) {}
     299        EnumDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ) {}
    300300        EnumDecl( const EnumDecl &other ) : Parent( other ) {}
    301301
  • src/libcfa/Makefile.am

    r2a7b3ca r949934e  
    1010## Author           : Peter A. Buhr
    1111## Created On       : Sun May 31 08:54:01 2015
    12 ## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Sun May 14 21:04:21 2017
    14 ## Update Count     : 214
     12## Last Modified By : Andrew Beach
     13## Last Modified On : Wed Jun 28 15:36:00 2017
     14## Update Count     : 215
    1515###############################################################################
    1616
     
    6464        ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $<
    6565
     66libcfa_a-exception.o : exception.c
     67        ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $<
     68
    6669concurrency/libcfa_d_a-invoke.o : concurrency/invoke.c
     70        ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $<
     71
     72libcfa_d_a-exception.o : exception.c
    6773        ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $<
    6874
     
    7278libcfa_a_CFLAGS = -nodebug -O2
    7379libcfa_d_a_SOURCES = ${libsrc}
    74 libcfa_d_a_CFLAGS = -debug -O0
     80libcfa_d_a_CFLAGS = -debug -O0 #No need for __CFA_DEBUG__ since we pass -debug
    7581
    7682stdhdr = ${shell echo stdhdr/*}
  • src/libcfa/Makefile.in

    r2a7b3ca r949934e  
    332332libcfa_a_CFLAGS = -nodebug -O2
    333333libcfa_d_a_SOURCES = ${libsrc}
    334 libcfa_d_a_CFLAGS = -debug -O0
     334libcfa_d_a_CFLAGS = -debug -O0 #No need for __CFA_DEBUG__ since we pass -debug
    335335stdhdr = ${shell echo stdhdr/*}
    336336cfa_includedir = $(CFA_INCDIR)
     
    14281428        ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $<
    14291429
     1430libcfa_a-exception.o : exception.c
     1431        ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $<
     1432
    14301433concurrency/libcfa_d_a-invoke.o : concurrency/invoke.c
     1434        ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $<
     1435
     1436libcfa_d_a-exception.o : exception.c
    14311437        ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $<
    14321438
  • src/main.cc

    r2a7b3ca r949934e  
    1010// Author           : Richard C. Bilson
    1111// Created On       : Fri May 15 23:12:02 2015
    12 // Last Modified By : Andrew Beach
    13 // Last Modified On : Wed May 10 14:45:00 2017
    14 // Update Count     : 437
     12// Last Modified By : Peter A. Buhr
     13// Last Modified On : Thu Jun 29 12:46:50 2017
     14// Update Count     : 441
    1515//
    1616
     
    2525using namespace std;
    2626
    27 #include "Parser/lex.h"
    28 #include "Parser/parser.h"
     27#include "Parser/parser.hh"
    2928#include "Parser/TypedefTable.h"
    3029#include "GenPoly/Lvalue.h"
     
    186185                if ( ! nopreludep ) {                                                   // include gcc builtins
    187186                        // -l is for initial build ONLY and builtins.cf is not in the lib directory so access it here.
    188                         FILE * builtins = fopen( libcfap | treep ? "../prelude/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
    189                         assertf( builtins, "cannot open builtins.cf\n" );
    190                         parse( builtins, LinkageSpec::Compiler );
     187
     188                        // Read to gcc builtins, if not generating the cfa library
     189                        FILE * gcc_builtins = fopen( libcfap | treep ? "../prelude/gcc-builtins.cf" : CFA_LIBDIR "/gcc-builtins.cf", "r" );
     190                        assertf( gcc_builtins, "cannot open gcc-builtins.cf\n" );
     191                        parse( gcc_builtins, LinkageSpec::Compiler );
    191192
    192193                        // read the extra prelude in, if not generating the cfa library
     
    200201                                assertf( prelude, "cannot open prelude.cf\n" );
    201202                                parse( prelude, LinkageSpec::Intrinsic );
     203
     204                                // Read to cfa builtins, if not generating the cfa library
     205                                FILE * builtins = fopen( libcfap | treep ? "../prelude/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
     206                                assertf( builtins, "cannot open builtins.cf\n" );
     207                                parse( builtins, LinkageSpec::Builtin );
    202208                        } // if
    203209                } // if
     
    475481                        break;
    476482                  case '?':
    477                         assertf( false, "Unknown option: '%c'\n", (char)optopt );
     483                        if ( optopt ) {                                                         // short option ?
     484                                assertf( false, "Unknown option: -%c\n", (char)optopt );
     485                        } else {
     486                                assertf( false, "Unknown option: %s\n", argv[optind - 1] );
     487                        } // if
    478488                  default:
    479489                        abort();
  • src/prelude/Makefile.am

    r2a7b3ca r949934e  
    2020# put into lib for now
    2121cfalibdir = ${CFA_LIBDIR}
    22 cfalib_DATA = builtins.cf extras.cf prelude.cf bootloader.c
     22cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cf bootloader.c
    2323noinst_DATA = ../libcfa/libcfa-prelude.c
     24
     25$(DEPDIR) :
     26        mkdir $(DEPDIR)
     27
     28$(DEPDIR)/builtins.Po : $(DEPDIR)
     29        touch ${@}
    2430
    2531# create extra forward types/declarations to reduce inclusion of library files
     
    2834
    2935# create forward declarations for gcc builtins
    30 builtins.cf : builtins.c prototypes.sed
     36gcc-builtins.cf : gcc-builtins.c prototypes.sed
    3137        ${AM_V_GEN}@BACKEND_CC@ -E -P $< | sed -f prototypes.sed > $@
    3238
    33 builtins.c : builtins.def prototypes.awk
     39gcc-builtins.c : builtins.def prototypes.awk
    3440        ${AM_V_GEN}@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@
    3541
     
    3844prototypes.awk :
    3945
    40 ../libcfa/libcfa-prelude.c : prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
     46# create forward declarations for cfa builtins
     47builtins.cf : builtins.c
     48        ${AM_V_GEN}@BACKEND_CC@ -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po
     49        ${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po
     50
     51include $(DEPDIR)/builtins.Po
     52
     53../libcfa/libcfa-prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
    4154        ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
    4255
    43 bootloader.c : bootloader.cf prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
     56bootloader.c : bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
    4457        ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpmL bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
    4558
    46 MAINTAINERCLEANFILES = builtins.c builtins.cf extras.cf bootloader.c ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
     59maintainer-clean-local :
     60        rm -rf $(DEPDIR)
     61
     62MAINTAINERCLEANFILES = gcc-builtins.c gcc-builtins.cf builtins.cf extras.cf bootloader.c ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
  • src/prelude/Makefile.in

    r2a7b3ca r949934e  
    211211# put into lib for now
    212212cfalibdir = ${CFA_LIBDIR}
    213 cfalib_DATA = builtins.cf extras.cf prelude.cf bootloader.c
     213cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cf bootloader.c
    214214noinst_DATA = ../libcfa/libcfa-prelude.c
    215 MAINTAINERCLEANFILES = builtins.c builtins.cf extras.cf bootloader.c ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
     215MAINTAINERCLEANFILES = gcc-builtins.c gcc-builtins.cf builtins.cf extras.cf bootloader.c ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
    216216all: all-am
    217217
     
    390390maintainer-clean: maintainer-clean-am
    391391        -rm -f Makefile
    392 maintainer-clean-am: distclean-am maintainer-clean-generic
     392maintainer-clean-am: distclean-am maintainer-clean-generic \
     393        maintainer-clean-local
    393394
    394395mostlyclean: mostlyclean-am
     
    416417        install-ps install-ps-am install-strip installcheck \
    417418        installcheck-am installdirs maintainer-clean \
    418         maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
    419         pdf-am ps ps-am uninstall uninstall-am uninstall-cfalibDATA
    420 
     419        maintainer-clean-generic maintainer-clean-local mostlyclean \
     420        mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
     421        uninstall-cfalibDATA
     422
     423
     424$(DEPDIR) :
     425        mkdir $(DEPDIR)
     426
     427$(DEPDIR)/builtins.Po : $(DEPDIR)
     428        touch ${@}
    421429
    422430# create extra forward types/declarations to reduce inclusion of library files
     
    425433
    426434# create forward declarations for gcc builtins
    427 builtins.cf : builtins.c prototypes.sed
     435gcc-builtins.cf : gcc-builtins.c prototypes.sed
    428436        ${AM_V_GEN}@BACKEND_CC@ -E -P $< | sed -f prototypes.sed > $@
    429437
    430 builtins.c : builtins.def prototypes.awk
     438gcc-builtins.c : builtins.def prototypes.awk
    431439        ${AM_V_GEN}@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@
    432440
     
    435443prototypes.awk :
    436444
    437 ../libcfa/libcfa-prelude.c : prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
     445# create forward declarations for cfa builtins
     446builtins.cf : builtins.c
     447        ${AM_V_GEN}@BACKEND_CC@ -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po
     448        ${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po
     449
     450include $(DEPDIR)/builtins.Po
     451
     452../libcfa/libcfa-prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
    438453        ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
    439454
    440 bootloader.c : bootloader.cf prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
     455bootloader.c : bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
    441456        ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpmL bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
     457
     458maintainer-clean-local :
     459        rm -rf $(DEPDIR)
    442460
    443461# Tell versions [3.59,3.63) of GNU make to not export all variables.
  • src/tests/preempt_longrun/Makefile.am

    r2a7b3ca r949934e  
    1616
    1717repeats=10
    18 max_time=10
    19 N=10ul
     18max_time=30
    2019preempt=10_000ul
    2120
    2221REPEAT = ${abs_top_srcdir}/tools/repeat -s
    2322
    24 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -DN=${N} -DPREEMPTION_RATE=${preempt}
     23BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -DPREEMPTION_RATE=${preempt}
    2524CFLAGS = ${BUILD_FLAGS}
    2625CC = @CFA_BINDIR@/@CFA_NAME@
    2726
    28 TESTS = create stack yield
     27TESTS = barge block create disjoint processor stack wait yield
    2928
    3029.INTERMEDIATE: ${TESTS}
  • src/tests/preempt_longrun/Makefile.in

    r2a7b3ca r949934e  
    178178top_srcdir = @top_srcdir@
    179179repeats = 10
    180 max_time = 10
    181 N = 10ul
     180max_time = 30
    182181preempt = 10_000ul
    183182REPEAT = ${abs_top_srcdir}/tools/repeat -s
    184 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -DN=${N} -DPREEMPTION_RATE=${preempt}
    185 TESTS = create stack yield
     183BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -DPREEMPTION_RATE=${preempt}
     184TESTS = barge block create disjoint processor stack wait yield
    186185all: all-am
    187186
  • src/tests/sched-int-block.c

    r2a7b3ca r949934e  
    55#include <thread>
    66
    7 static const unsigned N = 100_000;
     7#ifndef N
     8#define N 100_000
     9#endif
    810
    911enum state_t { WAITED, SIGNAL, BARGE };
  • src/tests/sched-int-disjoint.c

    r2a7b3ca r949934e  
    44#include <thread>
    55
     6#ifndef N
    67#define N 100_000
     8#endif
    79
    810enum state_t { WAIT, SIGNAL, BARGE };
  • src/tests/sched-int-wait.c

    r2a7b3ca r949934e  
    55#include <thread>
    66
    7 static const int N = 10_000;
     7#ifndef N
     8#define N 10_000
     9#endif
    810
    911monitor global_t {};
Note: See TracChangeset for help on using the changeset viewer.