Changes in / [b03eed6:da9d79b]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/Box.cc

    rb03eed6 rda9d79b  
    184184                        /// change the type of generic aggregate members to char[]
    185185                        void mutateMembers( AggregateDecl * aggrDecl );
    186                         /// returns the calculated sizeof expression for ty, or nullptr for use C sizeof()
    187                         Expression* genSizeof( Type* ty );
    188186
    189187                        /// Enters a new scope for type-variables, adding the type variables from ty
     
    384382                unsigned long n_members = 0;
    385383                bool firstMember = true;
    386                 for ( Declaration* member : structDecl->get_members() ) {
    387                         DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( member );
     384                for ( std::list< Declaration* >::const_iterator member = structDecl->get_members().begin(); member != structDecl->get_members().end(); ++member ) {
     385                        DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member );
    388386                        assert( dwt );
    389387                        Type *memberType = dwt->get_type();
     
    17491747                }
    17501748
    1751                 Expression * PolyGenericCalculator::genSizeof( Type* ty ) {
    1752                         if ( ArrayType * aty = dynamic_cast<ArrayType *>(ty) ) {
    1753                                 // generate calculated size for possibly generic array
    1754                                 Expression * sizeofBase = genSizeof( aty->get_base() );
    1755                                 if ( ! sizeofBase ) return nullptr;
    1756                                 Expression * dim = aty->get_dimension();
    1757                                 aty->set_dimension( nullptr );
    1758                                 return makeOp( "?*?", sizeofBase, dim );
    1759                         } else if ( findGeneric( ty ) ) {
    1760                                 // generate calculated size for generic type
    1761                                 return new NameExpr( sizeofName( mangleType( ty ) ) );
    1762                         } else return nullptr;
    1763                 }
    1764 
    17651749                Expression *PolyGenericCalculator::postmutate( SizeofExpr *sizeofExpr ) {
    1766                         Type *ty = sizeofExpr->get_isType() ?
    1767                                 sizeofExpr->get_type() : sizeofExpr->get_expr()->get_result();
    1768                        
    1769                         Expression * gen = genSizeof( ty );
    1770                         if ( gen ) {
     1750                        Type *ty = sizeofExpr->get_isType() ? sizeofExpr->get_type() : sizeofExpr->get_expr()->get_result();
     1751                        if ( findGeneric( ty ) ) {
     1752                                Expression *ret = new NameExpr( sizeofName( mangleType( ty ) ) );
    17711753                                delete sizeofExpr;
    1772                                 return gen;
    1773                         } else return sizeofExpr;
     1754                                return ret;
     1755                        }
     1756                        return sizeofExpr;
    17741757                }
    17751758
Note: See TracChangeset for help on using the changeset viewer.