Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/InstantiateGenericNew.cpp

    r1dafdfc r0b1ca47  
    1010// Created On       : Tue Aug 16 10:51:00 2022
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Mon Oct 31 16:48:00 2022
    13 // Update Count     : 1
     12// Last Modified On : Tue Sep 13 16:03:00 2022
     13// Update Count     : 0
    1414//
    1515
     
    378378                //   Ptr(int) p;
    379379                //   int i;
    380                 // The original expression:
    381380                //   p.x = &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:
     381                // becomes
     382                //   int *& _dtype_static_member_0 = (int **)&p.x;
     383                //   _dtype_static_member_0 = &i;
    388384                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::ExplicitCast
     389                );
    389390                ast::ObjectDecl * tmp = new ast::ObjectDecl( location,
    390391                        tmpNamer.newName(),
    391392                        new ast::ReferenceType( concType ),
    392                         nullptr,
     393                        new ast::SingleInit( location, init ),
    393394                        ast::Storage::Classes(),
    394395                        ast::Linkage::C
    395396                );
    396397                stmtsToAddBefore.push_back( new ast::DeclStmt( 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                 );
     398                return new ast::VariableExpr( location, tmp );
    411399        } else {
    412400                // Here, it can simply add a cast to actual types.
Note: See TracChangeset for help on using the changeset viewer.