Changeset cf34e82
- Timestamp:
- Oct 3, 2023, 5:31:59 PM (14 months ago)
- Branches:
- master
- Children:
- 2261bcc, 3cbe320
- Parents:
- 11ab0b4a (diff), 1ee0a4da (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. - Location:
- src
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Box.h
r11ab0b4a rcf34e82 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Box.h -- 7 // Box.h -- Implement polymorphic function calls and types. 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Sat Jul 22 09:23:52 201713 // Update Count : 611 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Oct 6 13:37:00 2022 13 // Update Count : 7 14 14 // 15 15 … … 19 19 20 20 class Declaration; 21 namespace ast { 22 class TranslationUnit; 23 } 21 24 22 25 namespace GenPoly { 23 26 /// boxes polymorphic function calls 24 27 void box( std::list< Declaration* >& translationUnit ); 28 void box( ast::TranslationUnit & translationUnit ); 25 29 } // namespace GenPoly 26 30 -
src/GenPoly/InstantiateGenericNew.cpp
r11ab0b4a rcf34e82 335 335 ast::Expr const * FixDtypeStatic::postvisit( ast::MemberExpr const * expr ) { 336 336 ast::ptr<ast::Type> const & type = expr->aggregate->result; 337 if ( !isGenericType( type ) ) { 338 return expr; 339 } else if ( auto inst = type.as<ast::StructInstType>() ) { 340 return fixMemberExpr( inst, expr ); 337 if ( auto inst = type.as<ast::StructInstType>() ) { 338 if ( !inst->params.empty() ) return fixMemberExpr( inst, expr ); 341 339 } else if ( auto inst = type.as<ast::UnionInstType>() ) { 342 return fixMemberExpr( inst, expr );340 if ( !inst->params.empty() ) return fixMemberExpr( inst, expr ); 343 341 } 344 342 return expr; … … 451 449 ast::Expr const * postvisit( ast::MemberExpr const * expr ); 452 450 ast::Expr const * postvisit( ast::Expr const * expr ); 453 void previsit( ast::ParseNode const * node ); 454 451 ast::Designation const * postvisit( ast::Designation const * ); 452 453 void previsit( ast::ParseNode const * node ) { 454 GuardValue( location ) = &node->location; 455 } 455 456 void previsit( ast::FunctionType const * ) { 456 457 GuardValue( inFunctionType ) = true; … … 628 629 } 629 630 630 void GenericInstantiator::previsit( ast::ParseNode const * node ) { 631 GuardValue( location ) = &node->location; 631 // This attempts to figure out what the final name of the field will be. 632 // Pretty printing can cause this to become incorrect. 633 std::string getPrintName( ast::DeclWithType const * decl ) { 634 return ( decl->linkage.is_mangled ) 635 ? decl->scopedMangleName() : decl->name; 636 } 637 638 ast::Designation const * GenericInstantiator::postvisit( 639 ast::Designation const * designation ) { 640 // Disconnect designator names from their fields. 641 // It is now incorrect to point at the generic definition where the used 642 // type now is replaced with a concrete instance. Ideally, new variable 643 // expressions would point at fields in the concrete instances, but that 644 // is work and that information should not be needed this late in 645 // compilation. 646 647 // Modify all designations, even if not needed. 648 auto mutNode = mutate( designation ); 649 for ( ast::ptr<ast::Expr> & designator : mutNode->designators ) { 650 if ( auto var = designator.as<ast::VariableExpr>() ) { 651 designator = new ast::NameExpr( 652 var->location, getPrintName( var->var ) ); 653 } 654 } 655 return mutNode; 632 656 } 633 657 -
src/GenPoly/module.mk
r11ab0b4a rcf34e82 22 22 23 23 SRC += $(SRC_GENPOLY) \ 24 GenPoly/BoxNew.cpp \ 24 25 GenPoly/Box.cc \ 25 26 GenPoly/Box.h \ -
src/main.cc
r11ab0b4a rcf34e82 419 419 420 420 PASS( "Convert L-Value", GenPoly::convertLvalue, transUnit ); 421 DUMP( bboxp, std::move( transUnit ) ); 422 PASS( "Box", GenPoly::box, transUnit ); 421 423 422 424 translationUnit = convert( std::move( transUnit ) ); 423 424 DUMP( bboxp, translationUnit );425 PASS( "Box", GenPoly::box, translationUnit );426 425 427 426 PASS( "Link-Once", CodeGen::translateLinkOnce, translationUnit );
Note: See TracChangeset
for help on using the changeset viewer.