Changeset 2065609 for src/Concurrency


Ignore:
Timestamp:
Aug 28, 2017, 2:59:30 PM (7 years ago)
Author:
Thierry Delisle <tdelisle@…>
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:
26238c1
Parents:
212c421e
Message:

Added new node to PassVisitor?.
Converted Keywords to PassVisitor?.
Fix crash in build waitfor.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Concurrency/Keywords.cc

    r212c421e r2065609  
    1919#include <string>                  // for string, operator==
    2020
     21#include "Common/PassVisitor.h"    // for PassVisitor
    2122#include "Common/SemanticError.h"  // for SemanticError
    2223#include "Common/utility.h"        // for deleteAll, map_range
     
    4647
    4748        //=============================================================================================
    48         // Visitors declaration
     49        // Pass declarations
    4950        //=============================================================================================
    5051
     
    5859        //                                           static inline NewField_t * getter_name( MyType * this ) { return &this->newField; }
    5960        //
    60         class ConcurrentSueKeyword : public Visitor {
    61           protected:
    62             template< typename Visitor >
    63             friend void SymTab::acceptAndAdd( std::list< Declaration * > &translationUnit, Visitor &visitor );
     61        class ConcurrentSueKeyword : public WithDeclsToAdd {
    6462          public:
    6563
     
    6967                virtual ~ConcurrentSueKeyword() {}
    7068
    71                 using Visitor::visit;
    72                 virtual void visit( StructDecl * decl ) override final;
     69                void postvisit( StructDecl * decl );
    7370
    7471                void handle( StructDecl * );
     
    8683                bool needs_main;
    8784
    88                 std::list< Declaration * > declsToAdd, declsToAddAfter;
    8985                StructDecl* type_decl = nullptr;
    9086        };
     
    117113
    118114                static void implement( std::list< Declaration * > & translationUnit ) {
    119                         ThreadKeyword impl;
    120                         SymTab::acceptAndAdd( translationUnit, impl );
     115                        PassVisitor< ThreadKeyword > impl;
     116                        acceptAll( translationUnit, impl );
    121117                }
    122118        };
     
    148144
    149145                static void implement( std::list< Declaration * > & translationUnit ) {
    150                         CoroutineKeyword impl;
    151                         SymTab::acceptAndAdd( translationUnit, impl );
     146                        PassVisitor< CoroutineKeyword > impl;
     147                        acceptAll( translationUnit, impl );
    152148                }
    153149        };
     
    179175
    180176                static void implement( std::list< Declaration * > & translationUnit ) {
    181                         MonitorKeyword impl;
    182                         SymTab::acceptAndAdd( translationUnit, impl );
     177                        PassVisitor< MonitorKeyword > impl;
     178                        acceptAll( translationUnit, impl );
    183179                }
    184180        };
     
    192188        // }                                                               }
    193189        //
    194         class MutexKeyword final : public Visitor {
     190        class MutexKeyword final {
    195191          public:
    196192
    197                 using Visitor::visit;
    198                 virtual void visit( FunctionDecl * decl ) override final;
    199                 virtual void visit(   StructDecl * decl ) override final;
     193                void postvisit( FunctionDecl * decl );
     194                void postvisit(   StructDecl * decl );
    200195
    201196                std::list<DeclarationWithType*> findMutexArgs( FunctionDecl* );
     
    204199
    205200                static void implement( std::list< Declaration * > & translationUnit ) {
    206                         MutexKeyword impl;
     201                        PassVisitor< MutexKeyword > impl;
    207202                        acceptAll( translationUnit, impl );
    208203                }
     
    230225        // }                                                               }
    231226        //
    232         class ThreadStarter final : public Visitor {
     227        class ThreadStarter final {
    233228          public:
    234229
    235                 using Visitor::visit;
    236                 virtual void visit( FunctionDecl * decl ) override final;
     230                void postvisit( FunctionDecl * decl );
    237231
    238232                void addStartStatement( FunctionDecl * decl, DeclarationWithType * param );
    239233
    240234                static void implement( std::list< Declaration * > & translationUnit ) {
    241                         ThreadStarter impl;
     235                        PassVisitor< ThreadStarter > impl;
    242236                        acceptAll( translationUnit, impl );
    243237                }
     
    264258        // Generic keyword implementation
    265259        //=============================================================================================
    266         void ConcurrentSueKeyword::visit(StructDecl * decl) {
    267                 Visitor::visit(decl);
     260        void ConcurrentSueKeyword::postvisit(StructDecl * decl) {
    268261                if( decl->get_name() == type_name && decl->has_body() ) {
    269262                        assert( !type_decl );
     
    353346                }
    354347
    355                 declsToAdd.push_back( forward );
    356                 if( needs_main ) declsToAdd.push_back( main_decl );
    357                 declsToAdd.push_back( get_decl );
     348                declsToAddBefore.push_back( forward );
     349                if( needs_main ) declsToAddBefore.push_back( main_decl );
     350                declsToAddBefore.push_back( get_decl );
    358351
    359352                return get_decl;
     
    405398        //=============================================================================================
    406399
    407         void MutexKeyword::visit(FunctionDecl* decl) {
    408                 Visitor::visit(decl);
     400        void MutexKeyword::postvisit(FunctionDecl* decl) {
    409401
    410402                std::list<DeclarationWithType*> mutexArgs = findMutexArgs( decl );
     
    424416        }
    425417
    426         void MutexKeyword::visit(StructDecl* decl) {
    427                 Visitor::visit(decl);
     418        void MutexKeyword::postvisit(StructDecl* decl) {
    428419
    429420                if( decl->get_name() == "monitor_desc" ) {
     
    532523        // General entry routine
    533524        //=============================================================================================
    534         void ThreadStarter::visit(FunctionDecl * decl) {
    535                 Visitor::visit(decl);
    536 
     525        void ThreadStarter::postvisit(FunctionDecl * decl) {
    537526                if( ! CodeGen::isConstructor(decl->get_name()) ) return;
    538527
Note: See TracChangeset for help on using the changeset viewer.