Changes in / [cf34e82:11ab0b4a]
- Location:
- src
- Files:
-
- 1 deleted
- 4 edited
-
GenPoly/Box.h (modified) (2 diffs)
-
GenPoly/BoxNew.cpp (deleted)
-
GenPoly/InstantiateGenericNew.cpp (modified) (3 diffs)
-
GenPoly/module.mk (modified) (1 diff)
-
main.cc (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Box.h
rcf34e82 r11ab0b4a 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Box.h -- Implement polymorphic function calls and types.7 // Box.h -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Thr Oct 6 13:37:00 202213 // Update Count : 711 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jul 22 09:23:52 2017 13 // Update Count : 6 14 14 // 15 15 … … 19 19 20 20 class Declaration; 21 namespace ast {22 class TranslationUnit;23 }24 21 25 22 namespace GenPoly { 26 23 /// boxes polymorphic function calls 27 24 void box( std::list< Declaration* >& translationUnit ); 28 void box( ast::TranslationUnit & translationUnit );29 25 } // namespace GenPoly 30 26 -
src/GenPoly/InstantiateGenericNew.cpp
rcf34e82 r11ab0b4a 335 335 ast::Expr const * FixDtypeStatic::postvisit( ast::MemberExpr const * expr ) { 336 336 ast::ptr<ast::Type> const & type = expr->aggregate->result; 337 if ( auto inst = type.as<ast::StructInstType>() ) { 338 if ( !inst->params.empty() ) return fixMemberExpr( inst, expr ); 337 if ( !isGenericType( type ) ) { 338 return expr; 339 } else if ( auto inst = type.as<ast::StructInstType>() ) { 340 return fixMemberExpr( inst, expr ); 339 341 } else if ( auto inst = type.as<ast::UnionInstType>() ) { 340 if ( !inst->params.empty() )return fixMemberExpr( inst, expr );342 return fixMemberExpr( inst, expr ); 341 343 } 342 344 return expr; … … 449 451 ast::Expr const * postvisit( ast::MemberExpr const * expr ); 450 452 ast::Expr const * postvisit( ast::Expr const * expr ); 451 ast::Designation const * postvisit( ast::Designation const * ); 452 453 void previsit( ast::ParseNode const * node ) { 454 GuardValue( location ) = &node->location; 455 } 453 void previsit( ast::ParseNode const * node ); 454 456 455 void previsit( ast::FunctionType const * ) { 457 456 GuardValue( inFunctionType ) = true; … … 629 628 } 630 629 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; 630 void GenericInstantiator::previsit( ast::ParseNode const * node ) { 631 GuardValue( location ) = &node->location; 656 632 } 657 633 -
src/GenPoly/module.mk
rcf34e82 r11ab0b4a 22 22 23 23 SRC += $(SRC_GENPOLY) \ 24 GenPoly/BoxNew.cpp \25 24 GenPoly/Box.cc \ 26 25 GenPoly/Box.h \ -
src/main.cc
rcf34e82 r11ab0b4a 419 419 420 420 PASS( "Convert L-Value", GenPoly::convertLvalue, transUnit ); 421 DUMP( bboxp, std::move( transUnit ) );422 PASS( "Box", GenPoly::box, transUnit );423 421 424 422 translationUnit = convert( std::move( transUnit ) ); 423 424 DUMP( bboxp, translationUnit ); 425 PASS( "Box", GenPoly::box, translationUnit ); 425 426 426 427 PASS( "Link-Once", CodeGen::translateLinkOnce, translationUnit );
Note:
See TracChangeset
for help on using the changeset viewer.