Changes in / [b03eed6:da9d79b]
- File:
-
- 1 edited
-
src/GenPoly/Box.cc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Box.cc
rb03eed6 rda9d79b 184 184 /// change the type of generic aggregate members to char[] 185 185 void mutateMembers( AggregateDecl * aggrDecl ); 186 /// returns the calculated sizeof expression for ty, or nullptr for use C sizeof()187 Expression* genSizeof( Type* ty );188 186 189 187 /// Enters a new scope for type-variables, adding the type variables from ty … … 384 382 unsigned long n_members = 0; 385 383 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 ); 388 386 assert( dwt ); 389 387 Type *memberType = dwt->get_type(); … … 1749 1747 } 1750 1748 1751 Expression * PolyGenericCalculator::genSizeof( Type* ty ) {1752 if ( ArrayType * aty = dynamic_cast<ArrayType *>(ty) ) {1753 // generate calculated size for possibly generic array1754 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 type1761 return new NameExpr( sizeofName( mangleType( ty ) ) );1762 } else return nullptr;1763 }1764 1765 1749 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 ) ) ); 1771 1753 delete sizeofExpr; 1772 return gen; 1773 } else return sizeofExpr; 1754 return ret; 1755 } 1756 return sizeofExpr; 1774 1757 } 1775 1758
Note:
See TracChangeset
for help on using the changeset viewer.