Changeset 896737b


Ignore:
Timestamp:
May 17, 2019, 12:10:09 PM (3 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
arm-eh, cleanup-dtors, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr
Children:
74dbbf6
Parents:
10a1225 (diff), d66e7b7 (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:software/cfa/cfa-cc

Location:
src/AST
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Convert.cpp

    r10a1225 r896737b  
    1010// Created On       : Thu May 09 15::37::05 2019
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Thu May 16 17:21:00 2019
    13 // Update Count     : 1
     12// Last Modified On : Fri May 17 11:14:00 2019
     13// Update Count     : 2
    1414//
    1515
     
    5454//================================================================================================
    5555
    56 #define ACCEPT_1(name, child, type) \
    57         old->child->accept(*this); \
    58         auto name = strict_dynamic_cast< ast::type * >( node );
    59 
    60 #define ACCEPT_N(name, child, type) \
    61         std::vector< ast::ptr<ast::type> > name; \
    62         name.reserve( old->child.size() ); \
    63         for( auto a : old->child ) { \
    64                 a->accept( *this ); \
    65                 name.emplace_back( strict_dynamic_cast< ast::type * >(node) ); \
    66         }
    67 
    6856class ConverterOldToNew : public Visitor {
    6957public:
     
    122110
    123111        virtual void visit( ObjectDecl * old ) override final {
    124                 ACCEPT_1(type, type, Type)
    125                 ACCEPT_1(init, init, Init)
    126                 ACCEPT_1(bitWd, bitfieldWidth, Expr)
    127                 ACCEPT_N(attr, attributes, Attribute)
    128 
    129112                auto decl = new ast::ObjectDecl(
    130113                        old->location,
    131114                        old->name,
    132                         type,
    133                         init,
     115                        GET_ACCEPT_1(type, Type),
     116                        GET_ACCEPT_1(init, Init),
    134117                        { old->get_storageClasses().val },
    135118                        { old->linkage.val },
    136                         bitWd,
    137                         std::move( attr ),
     119                        GET_ACCEPT_1(bitfieldWidth, Expr),
     120                        GET_ACCEPT_V(attributes, Attribute),
    138121                        { old->get_funcSpec().val }
    139122                );
     
    152135
    153136        virtual void visit( StructDecl * old ) override final {
    154                 ACCEPT_N(members, members, Decl)
    155                 ACCEPT_N(params, parameters, TypeDecl)
    156                 ACCEPT_1(parent, parent, AggregateDecl)
    157                 ACCEPT_N(attr, attributes, Attribute)
    158 
    159137                auto decl = new ast::StructDecl(
    160138                        old->location,
    161139                        old->name,
    162140                        old->kind,
    163                         std::move( attr ),
     141                        GET_ACCEPT_V(attributes, Attribute),
    164142                        { old->linkage.val }
    165143                );
    166                 decl->parent = parent;
     144                decl->parent = GET_ACCEPT_1(parent, AggregateDecl);
    167145                decl->body   = old->body;
    168                 decl->params = params;
    169                 decl->members    = members;
     146                decl->params = GET_ACCEPT_V(parameters, TypeDecl);
     147                decl->members    = GET_ACCEPT_V(members, Decl);
    170148                decl->extension  = old->extension;
    171149                decl->uniqueId   = old->uniqueId;
     
    176154
    177155        virtual void visit( UnionDecl * old ) override final {
    178                 ACCEPT_N(members, members, Decl)
    179                 ACCEPT_N(params, parameters, TypeDecl)
    180                 ACCEPT_1(parent, parent, AggregateDecl)
    181                 ACCEPT_N(attr, attributes, Attribute)
    182 
    183156                auto decl = new ast::UnionDecl(
    184157                        old->location,
    185158                        old->name,
    186                         std::move( attr ),
     159                        GET_ACCEPT_V(attributes, Attribute),
    187160                        { old->linkage.val }
    188161                );
    189                 decl->parent = parent;
     162                decl->parent = GET_ACCEPT_1(parent, AggregateDecl);
    190163                decl->body   = old->body;
    191                 decl->params = params;
    192                 decl->members    = members;
     164                decl->params = GET_ACCEPT_V(parameters, TypeDecl);
     165                decl->members    = GET_ACCEPT_V(members, Decl);
    193166                decl->extension  = old->extension;
    194167                decl->uniqueId   = old->uniqueId;
     
    199172
    200173        virtual void visit( EnumDecl * old ) override final {
    201                 ACCEPT_N(members, members, Decl)
    202                 ACCEPT_N(params, parameters, TypeDecl)
    203                 ACCEPT_1(parent, parent, AggregateDecl)
    204                 ACCEPT_N(attr, attributes, Attribute)
    205 
    206174                auto decl = new ast::UnionDecl(
    207175                        old->location,
    208176                        old->name,
    209                         std::move( attr ),
     177                        GET_ACCEPT_V(attributes, Attribute),
    210178                        { old->linkage.val }
    211179                );
    212                 decl->parent = parent;
     180                decl->parent = GET_ACCEPT_1(parent, AggregateDecl);
    213181                decl->body   = old->body;
    214                 decl->params = params;
    215                 decl->members    = members;
     182                decl->params = GET_ACCEPT_V(parameters, TypeDecl);
     183                decl->members    = GET_ACCEPT_V(members, Decl);
    216184                decl->extension  = old->extension;
    217185                decl->uniqueId   = old->uniqueId;
     
    222190
    223191        virtual void visit( TraitDecl * old ) override final {
    224                 ACCEPT_N(members, members, Decl)
    225                 ACCEPT_N(params, parameters, TypeDecl)
    226                 ACCEPT_1(parent, parent, AggregateDecl)
    227                 ACCEPT_N(attr, attributes, Attribute)
    228 
    229192                auto decl = new ast::UnionDecl(
    230193                        old->location,
    231194                        old->name,
    232                         std::move( attr ),
     195                        GET_ACCEPT_V(attributes, Attribute),
    233196                        { old->linkage.val }
    234197                );
    235                 decl->parent = parent;
     198                decl->parent = GET_ACCEPT_1(parent, AggregateDecl);
    236199                decl->body   = old->body;
    237                 decl->params = params;
    238                 decl->members    = members;
     200                decl->params = GET_ACCEPT_V(parameters, TypeDecl);
     201                decl->members    = GET_ACCEPT_V(members, Decl);
    239202                decl->extension  = old->extension;
    240203                decl->uniqueId   = old->uniqueId;
     
    249212
    250213        virtual void visit( TypedefDecl * old ) override final {
    251                 ACCEPT_1(type, base, Type)
    252                 ACCEPT_N(params, parameters, TypeDecl)
    253                 ACCEPT_N(asserts, assertions, DeclWithType)
    254214                auto decl = new ast::TypedefDecl(
    255215                        old->location,
    256216                        old->name,
    257217                        { old->storageClasses.val },
    258                         type,
     218                        GET_ACCEPT_1(base, Type),
    259219                        { old->linkage.val }
    260220                );
    261 
    262                 decl->assertions = asserts;
    263                 decl->params     = params;
     221                decl->assertions = GET_ACCEPT_V(assertions, DeclWithType);
     222                decl->params     = GET_ACCEPT_V(parameters, TypeDecl);
    264223                decl->extension  = old->extension;
    265224                decl->uniqueId   = old->uniqueId;
     
    278237
    279238        virtual void visit( CompoundStmt * old ) override final {
    280                 ACCEPT_N(kids, kids, Stmt)
    281239                auto stmt = new ast::CompoundStmt(
    282240                        old->location,
    283                         to<std::list>::from( std::move(kids) )
    284                 );
    285                 stmt->labels = to<std::vector>::from( make_labels( std::move( old->labels ) ) );
     241                        to<std::list>::from( GET_ACCEPT_V(kids, Stmt) ),
     242                        GET_LABELS_V(old->labels)
     243                );
    286244
    287245                this->node = stmt;
     
    388346                        CASE(FallThroughDefault);
    389347                        #undef CASE
     348                        default:
     349                                assertf(false, "Invalid BranchStmt::Type %d\n", old->type);
    390350                        }
    391351
     
    419379                        kind = ast::ThrowStmt::Resume;
    420380                        break;
     381                default:
     382                        assertf(false, "Invalid ThrowStmt::Kind %d\n", old->kind);
    421383                }
    422384
     
    449411                        kind = ast::CatchStmt::Resume;
    450412                        break;
     413                default:
     414                        assertf(false, "Invalid CatchStmt::Kind %d\n", old->kind);
    451415                }
    452416
     
    789753#undef GET_ACCEPT_1
    790754
    791 #undef ACCEPT_N
    792 #undef ACCEPT_1
    793 
    794755std::list< ast::ptr< ast::Decl > > convert( const std::list< Declaration * > & translationUnit ) {
    795756        ConverterOldToNew c;
  • src/AST/Stmt.hpp

    r10a1225 r896737b  
    1010// Created On       : Wed May  8 13:00:00 2019
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Wed May 16 12:20:00 2019
    13 // Update Count     : 3
     12// Last Modified On : Fri May 17 10:03:00 2019
     13// Update Count     : 4
    1414//
    1515
     
    5454        std::list<ptr<Stmt>> kids;
    5555
    56         CompoundStmt(const CodeLocation & loc, std::list<ptr<Stmt>> && ks = {} )
    57         : Stmt(loc), kids(std::move(ks)) {}
     56        CompoundStmt(const CodeLocation & loc, std::list<ptr<Stmt>> && ks = {},
     57                std::vector<Label>&& labels = {} )
     58        : Stmt(loc, std::move(labels)), kids(std::move(ks)) {}
    5859
    5960        CompoundStmt( const CompoundStmt& o );
Note: See TracChangeset for help on using the changeset viewer.