Changeset 446dde5 for src/AST/Expr.cpp
- Timestamp:
- Mar 25, 2025, 7:53:02 PM (3 weeks ago)
- Branches:
- master
- Children:
- 379b6ea
- Parents:
- d73e667
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/AST/Expr.cpp ¶
rd73e667 r446dde5 393 393 394 394 StmtExpr::StmtExpr( const CodeLocation & loc, const CompoundStmt * ss ) 395 : Expr( loc ), stmts( ss ) , returnDecls(), dtors(){ computeResult(); }395 : Expr( loc ), stmts( ss ) { computeResult(); } 396 396 397 397 void StmtExpr::computeResult() { 398 398 assert( stmts ); 399 399 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 } 411 407 } 412 408
Note: See TracChangeset
for help on using the changeset viewer.