Changeset 6054b18 for src/AST


Ignore:
Timestamp:
May 29, 2019, 9:09:30 PM (5 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
466fa01
Parents:
c786e1d (diff), d88f8b3b (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:
4 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Convert.cpp

    rc786e1d r6054b18  
    1010// Created On       : Thu May 09 15::37::05 2019
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Tue May 28 12:00:00 2019
    13 // Update Count     : 7
     12// Last Modified On : Wed May 29 17:05:00 2019
     13// Update Count     : 9
    1414//
    1515
     
    2525#include "AST/TypeSubstitution.hpp"
    2626
     27#include "SymTab/Autogen.h"
    2728#include "SynTree/Attribute.h"
    2829#include "SynTree/Declaration.h"
    2930#include "SynTree/TypeSubstitution.h"
     31
     32#include "Validate/FindSpecialDecls.h"
    3033
    3134//================================================================================================
     
    4043        }
    4144};
     45
     46//================================================================================================
     47namespace {
     48
     49// This is to preserve the SymTab::dereferenceOperator hack. It does not (and perhaps should not)
     50// allow us to use the same stratagy in the new ast.
     51ast::FunctionDecl * dereferenceOperator = nullptr;
     52
     53}
    4254
    4355//================================================================================================
     
    154166                        LinkageSpec::Spec( node->linkage.val ),
    155167                        get<FunctionType>().accept1( node->type ),
    156                         get<CompoundStmt>().accept1( node->stmts ),
     168                        {},
    157169                        get<Attribute>().acceptL( node->attributes ),
    158170                        Type::FuncSpecifiers( node->funcSpec.val )
    159171                );
     172                cache.emplace( node, decl );
     173                decl->statements = get<CompoundStmt>().accept1( node->stmts );
    160174                decl->withExprs = get<Expression>().acceptL( node->withExprs );
     175                if ( dereferenceOperator == node ) {
     176                        Validate::dereferenceOperator = decl;
     177                }
    161178                return declWithTypePostamble( decl, node );
    162179        }
     
    871888                );
    872889
    873                 rslt->tempDecls = get<ObjectDecl>().acceptL(node->tempDecls);
    874                 rslt->returnDecls = get<ObjectDecl>().acceptL(node->returnDecls);
    875                 rslt->dtors = get<Expression>().acceptL(node->dtors);
    876 
    877890                auto expr = visitBaseExpr( node, rslt );
    878891                this->node = expr;
     
    14251438                        old->name,
    14261439                        GET_ACCEPT_1(type, FunctionType),
    1427                         GET_ACCEPT_1(statements, CompoundStmt),
     1440                        {},
    14281441                        { old->storageClasses.val },
    14291442                        { old->linkage.val },
     
    14321445                };
    14331446                cache.emplace( old, decl );
     1447                decl->stmts = GET_ACCEPT_1(statements, CompoundStmt);
    14341448                decl->scopeLevel = old->scopeLevel;
    14351449                decl->mangleName = old->mangleName;
     
    14391453
    14401454                this->node = decl;
     1455
     1456                if ( Validate::dereferenceOperator == old ) {
     1457                        dereferenceOperator = decl;
     1458                }
    14411459        }
    14421460
     
    14841502        virtual void visit( EnumDecl * old ) override final {
    14851503                if ( inCache( old ) ) return;
    1486                 auto decl = new ast::UnionDecl(
     1504                auto decl = new ast::EnumDecl(
    14871505                        old->location,
    14881506                        old->name,
     
    15041522        virtual void visit( TraitDecl * old ) override final {
    15051523                if ( inCache( old ) ) return;
    1506                 auto decl = new ast::UnionDecl(
     1524                auto decl = new ast::TraitDecl(
    15071525                        old->location,
    15081526                        old->name,
     
    22652283                );
    22662284
    2267                 rslt->tempDecls = GET_ACCEPT_V(tempDecls, ObjectDecl);
    2268                 rslt->returnDecls = GET_ACCEPT_V(returnDecls, ObjectDecl);
    2269                 rslt->dtors = GET_ACCEPT_V(dtors, Expr);
    2270 
    22712285                this->node = visitBaseExpr( old, rslt );
    22722286        }
  • src/AST/Expr.hpp

    rc786e1d r6054b18  
    530530public:
    531531        ptr<ApplicationExpr> callExpr;
    532         std::vector<ptr<ObjectDecl>> tempDecls;
    533         std::vector<ptr<ObjectDecl>> returnDecls;
    534         std::vector<ptr<Expr>> dtors;
    535532
    536533        ImplicitCopyCtorExpr( const CodeLocation& loc, const ApplicationExpr * call )
    537         : Expr( loc, call->result ), tempDecls(), returnDecls(), dtors() { assert( call ); }
     534        : Expr( loc, call->result ) { assert( call ); }
    538535
    539536        const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
  • src/AST/Pass.impl.hpp

    rc786e1d r6054b18  
    13191319                }
    13201320                maybe_accept( node, &ImplicitCopyCtorExpr::callExpr    );
    1321                 maybe_accept( node, &ImplicitCopyCtorExpr::tempDecls   );
    1322                 maybe_accept( node, &ImplicitCopyCtorExpr::returnDecls );
    1323                 maybe_accept( node, &ImplicitCopyCtorExpr::dtors       );
    13241321        )
    13251322
  • src/AST/Print.cpp

    rc786e1d r6054b18  
    10231023                os << "Implicit Copy Constructor Expression:" << endl << indent;
    10241024                safe_print( node->callExpr );
    1025                 os << endl << indent-1 << "... with temporaries:" << endl;
    1026                 printAll( node->tempDecls );
    1027                 os << endl << indent-1 << "... with return temporaries:" << endl;
    1028                 printAll( node->returnDecls );
    10291025                --indent;
    10301026                postprint( node );
Note: See TracChangeset for help on using the changeset viewer.