Changeset 1cdfa82 for src/GenPoly/Box.cc
- Timestamp:
- Apr 25, 2018, 4:55:53 PM (6 years ago)
- Branches:
- new-env, with_gc
- Children:
- 42107b4
- Parents:
- 2efe4b8 (diff), 9d5fb67 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Box.cc
r2efe4b8 r1cdfa82 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 ); 186 188 187 189 /// Enters a new scope for type-variables, adding the type variables from ty … … 383 385 unsigned long n_members = 0; 384 386 bool firstMember = true; 385 for ( std::list< Declaration* >::const_iterator member = structDecl->get_members().begin(); member != structDecl->get_members().end(); ++member) {386 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member );387 for ( Declaration* member : structDecl->get_members() ) { 388 DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( member ); 387 389 assert( dwt ); 388 390 Type *memberType = dwt->get_type(); … … 1737 1739 } 1738 1740 1741 Expression * PolyGenericCalculator::genSizeof( Type* ty ) { 1742 if ( ArrayType * aty = dynamic_cast<ArrayType *>(ty) ) { 1743 // generate calculated size for possibly generic array 1744 Expression * sizeofBase = genSizeof( aty->get_base() ); 1745 if ( ! sizeofBase ) return nullptr; 1746 Expression * dim = aty->get_dimension(); 1747 aty->set_dimension( nullptr ); 1748 return makeOp( "?*?", sizeofBase, dim ); 1749 } else if ( findGeneric( ty ) ) { 1750 // generate calculated size for generic type 1751 return new NameExpr( sizeofName( mangleType( ty ) ) ); 1752 } else return nullptr; 1753 } 1754 1739 1755 Expression *PolyGenericCalculator::postmutate( SizeofExpr *sizeofExpr ) { 1740 Type *ty = sizeofExpr->get_isType() ? sizeofExpr->get_type() : sizeofExpr->get_expr()->get_result();1741 if ( findGeneric( ty ) ) {1742 return new NameExpr( sizeofName( mangleType( ty ) ) );1743 }1744 return sizeofExpr;1756 Type *ty = sizeofExpr->get_isType() ? 1757 sizeofExpr->get_type() : sizeofExpr->get_expr()->get_result(); 1758 1759 Expression * gen = genSizeof( ty ); 1760 return gen ? gen : sizeofExpr; 1745 1761 } 1746 1762
Note: See TracChangeset
for help on using the changeset viewer.