Changeset 446dde5


Ignore:
Timestamp:
Mar 25, 2025, 7:53:02 PM (26 hours ago)
Author:
Andrew Beach <ajbeach@…>
Branches:
master
Children:
379b6ea
Parents:
d73e667
Message:

Removed two unused fields from StmtExpr?, returnDecls and dtors, and refactored computeResult to set resultExpr when it can be found at that time.

Location:
src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/AST/Expr.cpp

    rd73e667 r446dde5  
    393393
    394394StmtExpr::StmtExpr( const CodeLocation & loc, const CompoundStmt * ss )
    395 : Expr( loc ), stmts( ss ), returnDecls(), dtors() { computeResult(); }
     395: Expr( loc ), stmts( ss ) { computeResult(); }
    396396
    397397void StmtExpr::computeResult() {
    398398        assert( stmts );
    399399        const std::list<ptr<Stmt>> & body = stmts->kids;
    400         if ( ! returnDecls.empty() ) {
    401                 // prioritize return decl for result type, since if a return decl exists, then the StmtExpr
    402                 // is currently in an intermediate state where the body will always give a void result type
    403                 result = returnDecls.front()->get_type();
    404         } else if ( ! body.empty() ) {
    405                 if ( const ExprStmt * exprStmt = body.back().as< ExprStmt >() ) {
    406                         result = exprStmt->expr->result;
    407                 }
    408         }
    409         // ensure a result type exists
    410         if ( ! result ) { result = new VoidType{}; }
     400        // If there is a tail expression, its result is entire result.
     401        if ( !body.empty() && ( resultExpr = body.back().as<ExprStmt>() ) ) {
     402                result = resultExpr->expr->result;
     403        // Otherwise, fill in the result with void so there is a result type.
     404        } else {
     405                result = new VoidType();
     406        }
    411407}
    412408
  • TabularUnified src/AST/Expr.hpp

    rd73e667 r446dde5  
    782782public:
    783783        ptr<CompoundStmt> stmts;
    784         std::vector<ptr<ObjectDecl>> returnDecls;  ///< return variable(s) for statement expression
    785         std::vector<ptr<Expr>> dtors;              ///< destructor(s) for return variable(s)
    786784
    787785        readonly<ExprStmt> resultExpr;
  • TabularUnified src/AST/Pass.impl.hpp

    rd73e667 r446dde5  
    16971697                }
    16981698                maybe_accept( node, &StmtExpr::stmts       );
    1699                 maybe_accept( node, &StmtExpr::returnDecls );
    1700                 maybe_accept( node, &StmtExpr::dtors       );
    17011699        }
    17021700
  • TabularUnified src/AST/Print.cpp

    rd73e667 r446dde5  
    14061406                os << "Statement Expression:" << endl << indent;
    14071407                safe_print( node->stmts );
    1408                 if ( ! node->returnDecls.empty() ) {
    1409                         os << indent << "... with returnDecls: ";
    1410                         printAll( node->returnDecls );
    1411                 }
    1412                 if ( ! node->dtors.empty() ) {
    1413                         os << indent << "... with dtors: ";
    1414                         printAll( node->dtors );
    1415                 }
    14161408                --indent;
    14171409                postprint( node );
  • TabularUnified src/InitTweak/FixInit.cpp

    rd73e667 r446dde5  
    697697        assert( stmtExpr->result );
    698698        if ( stmtExpr->result->isVoid() ) {
    699                 assert( stmtExpr->returnDecls.empty() );
    700                 assert( stmtExpr->dtors.empty() );
    701 
    702699                return stmtExpr;
    703700        }
     
    747744        // if there is a return decl, add a use as the last statement; will not have return decl on non-constructable returns
    748745        stmts.push_back( new ast::ExprStmt(loc, new ast::VariableExpr(loc, ret ) ) );
    749 
    750         assert( stmtExpr->returnDecls.empty() );
    751         assert( stmtExpr->dtors.empty() );
    752746
    753747        return stmtExpr;
Note: See TracChangeset for help on using the changeset viewer.