Changeset 68f9c43 for src/GenPoly
- Timestamp:
- Mar 16, 2018, 5:15:02 PM (6 years ago)
- Branches:
- new-env, with_gc
- Children:
- 8d7bef2
- Parents:
- 6171841
- git-author:
- Aaron Moss <a3moss@…> (03/16/18 17:04:24)
- git-committer:
- Aaron Moss <a3moss@…> (03/16/18 17:15:02)
- Location:
- src/GenPoly
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Box.cc
r6171841 r68f9c43 860 860 // do not carry over attributes to real type parameters/return values 861 861 for ( DeclarationWithType * dwt : realType->parameters ) { 862 deleteAll( dwt->get_type()->attributes );863 862 dwt->get_type()->attributes.clear(); 864 863 } 865 864 for ( DeclarationWithType * dwt : realType->returnVals ) { 866 deleteAll( dwt->get_type()->attributes );867 865 dwt->get_type()->attributes.clear(); 868 866 } … … 985 983 } // if 986 984 appExpr->get_args().clear(); 987 delete appExpr;988 985 return addAssign; 989 986 } … … 1016 1013 } // if 1017 1014 if ( baseType1 || baseType2 ) { 1018 delete ret->get_result();1019 1015 ret->set_result( appExpr->get_result()->clone() ); 1020 1016 if ( appExpr->get_env() ) { … … 1023 1019 } // if 1024 1020 appExpr->get_args().clear(); 1025 delete appExpr;1026 1021 return ret; 1027 1022 } // if … … 1033 1028 Expression *ret = appExpr->get_args().front(); 1034 1029 // fix expr type to remove pointer 1035 delete ret->get_result();1036 1030 ret->set_result( appExpr->get_result()->clone() ); 1037 1031 if ( appExpr->get_env() ) { … … 1040 1034 } // if 1041 1035 appExpr->get_args().clear(); 1042 delete appExpr;1043 1036 return ret; 1044 1037 } // if … … 1180 1173 Expression *ret = expr->args.front(); 1181 1174 expr->args.clear(); 1182 delete expr;1183 1175 return ret; 1184 1176 } // if … … 1214 1206 if ( polytype || needs ) { 1215 1207 Expression *ret = addrExpr->arg; 1216 delete ret->result;1217 1208 ret->result = addrExpr->result->clone(); 1218 1209 addrExpr->arg = nullptr; 1219 delete addrExpr;1220 1210 return ret; 1221 1211 } else { … … 1227 1217 if ( retval && returnStmt->expr ) { 1228 1218 assert( returnStmt->expr->result && ! returnStmt->expr->result->isVoid() ); 1229 delete returnStmt->expr;1230 1219 returnStmt->expr = nullptr; 1231 1220 } // if … … 1270 1259 } 1271 1260 } 1272 // deleteAll( functions );1273 1261 } 1274 1262 … … 1290 1278 for ( Declaration * param : functionDecl->type->parameters ) { 1291 1279 if ( ObjectDecl * obj = dynamic_cast< ObjectDecl * >( param ) ) { 1292 delete obj->init;1293 1280 obj->init = nullptr; 1294 1281 } … … 1499 1486 // polymorphic aggregate members should be converted into monomorphic members. 1500 1487 // Using char[size_T] here respects the expected sizing rules of an aggregate type. 1501 Type * newType = polyToMonoType( field->type ); 1502 delete field->type; 1503 field->type = newType; 1488 field->type = polyToMonoType( field->type ); 1504 1489 } 1505 1490 } … … 1524 1509 stmtsToAddBefore.push_back( new DeclStmt( newBuf ) ); 1525 1510 1526 delete objectDecl->get_init();1527 1511 objectDecl->set_init( new SingleInit( new VariableExpr( newBuf ) ) ); 1528 1512 } … … 1603 1587 } 1604 1588 1605 delete memberType;1606 delete memberExpr;1607 1589 return newMemberExpr; 1608 1590 } … … 1624 1606 addrExpr->arg = nullptr; 1625 1607 std::swap( addrExpr->env, ret->env ); 1626 delete addrExpr;1627 1608 return ret; 1628 1609 } … … 1750 1731 Type *ty = sizeofExpr->get_isType() ? sizeofExpr->get_type() : sizeofExpr->get_expr()->get_result(); 1751 1732 if ( findGeneric( ty ) ) { 1752 Expression *ret = new NameExpr( sizeofName( mangleType( ty ) ) ); 1753 delete sizeofExpr; 1754 return ret; 1733 return new NameExpr( sizeofName( mangleType( ty ) ) ); 1755 1734 } 1756 1735 return sizeofExpr; … … 1760 1739 Type *ty = alignofExpr->get_isType() ? alignofExpr->get_type() : alignofExpr->get_expr()->get_result(); 1761 1740 if ( findGeneric( ty ) ) { 1762 Expression *ret = new NameExpr( alignofName( mangleType( ty ) ) ); 1763 delete alignofExpr; 1764 return ret; 1741 return new NameExpr( alignofName( mangleType( ty ) ) ); 1765 1742 } 1766 1743 return alignofExpr; … … 1777 1754 if ( i == -1 ) return offsetofExpr; 1778 1755 1779 Expression *offsetInd = makeOffsetIndex( ty, i ); 1780 delete offsetofExpr; 1781 return offsetInd; 1756 return makeOffsetIndex( ty, i ); 1782 1757 } else if ( dynamic_cast< UnionInstType* >( ty ) ) { 1783 1758 // all union members are at offset zero 1784 delete offsetofExpr;1785 1759 return new ConstantExpr( Constant::from_ulong( 0 ) ); 1786 1760 } else return offsetofExpr; … … 1822 1796 } 1823 1797 1824 delete offsetPackExpr;1825 1798 return ret; 1826 1799 } -
src/GenPoly/InstantiateGeneric.cc
r6171841 r68f9c43 58 58 59 59 TypeList& operator= ( const TypeList &that ) { 60 deleteAll( params );61 62 60 params.clear(); 63 61 cloneAll( that.params, params ); … … 67 65 68 66 TypeList& operator= ( TypeList &&that ) { 69 deleteAll( params );70 71 67 params = std::move( that.params ); 72 68 … … 74 70 } 75 71 76 ~TypeList() { deleteAll( params );}72 ~TypeList() {} 77 73 78 74 bool operator== ( const TypeList& that ) const { … … 293 289 /// Strips the instances's type parameters 294 290 void stripInstParams( ReferenceToType *inst ) { 295 deleteAll( inst->get_parameters() );296 291 inst->get_parameters().clear(); 297 292 } … … 300 295 substituteMembers( base->get_members(), baseParams, typeSubs ); 301 296 302 // xxx - can't delete type parameters because they may have assertions that are used303 // deleteAll( baseParams );304 297 baseParams.clear(); 305 298 … … 380 373 newInst->set_baseStruct( concDecl ); 381 374 382 delete inst;383 375 inst = newInst; 384 376 break; … … 390 382 } 391 383 392 deleteAll( typeSubs );393 384 return inst; 394 385 } … … 430 421 newInst->set_baseUnion( concDecl ); 431 422 432 delete inst;433 423 inst = newInst; 434 424 break; … … 439 429 } 440 430 441 deleteAll( typeSubs );442 431 return inst; 443 432 } … … 477 466 ResolvExpr::adjustExprType( ret->result ); // pointer decay 478 467 std::swap( ret->env, memberExpr->env ); 479 delete memberExpr;480 468 return ret; 481 469 } -
src/GenPoly/Lvalue.cc
r6171841 r68f9c43 50 50 assertf( base, "expected pointer type in dereference (type was %s)", toString( arg->result ).c_str() ); 51 51 ApplicationExpr * ret = new ApplicationExpr( deref, { arg } ); 52 delete ret->result;53 52 ret->result = base->clone(); 54 53 ret->result->set_lvalue( true ); … … 171 170 return ret; 172 171 } 173 delete result;174 172 } 175 173 return appExpr; … … 214 212 Type * baseType = InitTweak::getPointerBase( arg->get_result() ); 215 213 assertf( baseType, "parameter is reference, arg must be pointer or reference: %s", toString( arg->get_result() ).c_str() ); 216 PointerType * ptrType = new PointerType( Type::Qualifiers(), baseType->clone() ); 217 delete arg->get_result(); 218 arg->set_result( ptrType ); 214 arg->set_result( new PointerType{ Type::Qualifiers(), baseType->clone() } ); 219 215 arg = mkDeref( arg ); 220 216 } … … 294 290 ) 295 291 callExpr = new AddressExpr( callExpr ); // this doesn't work properly for multiple casts 296 delete callExpr->get_result();297 292 callExpr->set_result( refType->clone() ); 298 293 // move environment out to new top-level … … 300 295 castExpr->set_arg( nullptr ); 301 296 castExpr->set_env( nullptr ); 302 delete castExpr;303 297 return callExpr; 304 298 } … … 318 312 } 319 313 ret->env = castExpr->env; 320 delete ret->result;321 314 ret->result = castExpr->result; 322 315 ret->result->set_lvalue( true ); // ensure result is lvalue … … 324 317 castExpr->arg = nullptr; 325 318 castExpr->result = nullptr; 326 delete castExpr;327 319 return ret; 328 320 } else if ( diff > 0 ) { … … 333 325 } 334 326 ret->env = castExpr->env; 335 delete ret->result;336 327 ret->result = castExpr->result; 337 328 castExpr->env = nullptr; 338 329 castExpr->arg = nullptr; 339 330 castExpr->result = nullptr; 340 delete castExpr;341 331 return ret; 342 332 } … … 360 350 } 361 351 ret->env = castExpr->env; 362 delete ret->result;363 352 ret->result = castExpr->result; 364 353 castExpr->env = nullptr; 365 354 castExpr->arg = nullptr; 366 355 castExpr->result = nullptr; 367 delete castExpr;368 356 return ret; 369 357 } else { … … 390 378 ret->result->set_lvalue( true ); // ensure result is lvalue 391 379 castExpr->arg = nullptr; 392 delete castExpr;393 380 } else { 394 381 // must keep cast if types are different … … 407 394 Type::Qualifiers qualifiers = refType->get_qualifiers(); 408 395 refType->set_base( nullptr ); 409 delete refType;410 396 return new PointerType( qualifiers, base ); 411 397 } … … 419 405 ret->set_env( expr->get_env() ); 420 406 expr->set_env( nullptr ); 421 delete expr;422 407 return ret; 423 408 } else if ( ConditionalExpr * condExpr = dynamic_cast< ConditionalExpr * >( arg ) ) { … … 428 413 ret->set_env( expr->get_env() ); 429 414 expr->set_env( nullptr ); 430 delete expr;431 415 432 416 // conditional expr type may not be either of the argument types, need to unify … … 461 445 arg0 = nullptr; 462 446 addrExpr->set_env( nullptr ); 463 delete addrExpr;464 447 return ret; 465 448 } … … 491 474 addrExpr->set_arg( nullptr ); 492 475 appExpr->set_env( nullptr ); 493 delete appExpr;494 476 return ret; 495 477 } -
src/GenPoly/ScrubTyVars.cc
r6171841 r68f9c43 28 28 if ( ! tyVars ) { 29 29 if ( typeInst->get_isFtype() ) { 30 delete typeInst; 31 return new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ); 30 return new PointerType{ Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) }; 32 31 } else { 33 PointerType * ret = new PointerType( Type::Qualifiers(), new VoidType( typeInst->get_qualifiers() ) ); 34 delete typeInst; 35 return ret; 32 return new PointerType{ Type::Qualifiers(), new VoidType( typeInst->get_qualifiers() ) }; 36 33 } 37 34 } … … 42 39 case TypeDecl::Dtype: 43 40 case TypeDecl::Ttype: 44 { 45 PointerType * ret = new PointerType( Type::Qualifiers(), new VoidType( typeInst->get_qualifiers() ) ); 46 delete typeInst; 47 return ret; 48 } 41 return new PointerType{ Type::Qualifiers(), new VoidType( typeInst->get_qualifiers() ) }; 49 42 case TypeDecl::Ftype: 50 delete typeInst; 51 return new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ); 43 return new PointerType{ Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) }; 52 44 } // switch 53 45 } // if … … 57 49 Type * ScrubTyVars::mutateAggregateType( Type * ty ) { 58 50 if ( shouldScrub( ty ) ) { 59 PointerType * ret = new PointerType( Type::Qualifiers(), new VoidType( ty->get_qualifiers() ) ); 60 delete ty; 61 return ret; 51 return new PointerType{ Type::Qualifiers(), new VoidType( ty->get_qualifiers() ) }; 62 52 } 63 53 return ty; … … 104 94 Type * ret = dynType->acceptMutator( *visitor ); 105 95 ret->get_qualifiers() |= pointer->get_qualifiers(); 106 pointer->base = nullptr;107 delete pointer;108 96 return ret; 109 97 } -
src/GenPoly/Specialize.cc
r6171841 r68f9c43 193 193 explodeSimple( new TupleIndexExpr( expr->clone(), i ), out ); 194 194 } 195 delete expr;196 195 } else { 197 196 // non-tuple type - output a clone of the expression
Note: See TracChangeset
for help on using the changeset viewer.