Changeset 1dafdfc
- Timestamp:
- Nov 1, 2022, 10:48:46 AM (2 years ago)
- Branches:
- ADT, ast-experimental, master
- Children:
- b3212de
- Parents:
- e8b8e65
- Files:
-
- 2 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/InstantiateGenericNew.cpp
re8b8e65 r1dafdfc 10 10 // Created On : Tue Aug 16 10:51:00 2022 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Tue Sep 13 16:03:00 202213 // Update Count : 012 // Last Modified On : Mon Oct 31 16:48:00 2022 13 // Update Count : 1 14 14 // 15 15 … … 378 378 // Ptr(int) p; 379 379 // int i; 380 // The original expression: 380 381 // p.x = &i; 381 // becomes 382 // int *& _dtype_static_member_0 = (int **)&p.x; 383 // _dtype_static_member_0 = &i; 382 // Becomes the expression/declaration: 383 // int *& _dtype_static_member_0; 384 // (_dtype_static_member_0 = (int**)&p.x, 385 // _dtype_static_member_0) = &i; 386 387 // The declaration is simple: 384 388 static UniqueName tmpNamer( "_dtype_static_member_" ); 385 ast::Expr * init = new ast::CastExpr( location,386 new ast::AddressExpr( location, memberExpr ),387 new ast::PointerType( ast::deepCopy( concType ) ),388 ast::ExplicitCast389 );390 389 ast::ObjectDecl * tmp = new ast::ObjectDecl( location, 391 390 tmpNamer.newName(), 392 391 new ast::ReferenceType( concType ), 393 n ew ast::SingleInit( location, init ),392 nullptr, 394 393 ast::Storage::Classes(), 395 394 ast::Linkage::C 396 395 ); 397 396 stmtsToAddBefore.push_back( new ast::DeclStmt( location, tmp ) ); 398 return new ast::VariableExpr( location, tmp ); 397 398 // The expression is more complex, uses references and reference / 399 // pointer parity. But breaking it up risks reordering. 400 return new ast::CommaExpr( location, 401 ast::UntypedExpr::createAssign( location, 402 new ast::VariableExpr( location, tmp ), 403 new ast::CastExpr( location, 404 new ast::AddressExpr( location, memberExpr ), 405 new ast::PointerType( ast::deepCopy( concType ) ), 406 ast::ExplicitCast 407 ) 408 ), 409 new ast::VariableExpr( location, tmp ) 410 ); 399 411 } else { 400 412 // Here, it can simply add a cast to actual types.
Note: See TracChangeset
for help on using the changeset viewer.