Changes in / [cf34e82:11ab0b4a]


Ignore:
Location:
src
Files:
1 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/Box.h

    rcf34e82 r11ab0b4a  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Box.h -- Implement polymorphic function calls and types.
     7// Box.h --
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Oct  6 13:37:00 2022
    13 // Update Count     : 7
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Sat Jul 22 09:23:52 2017
     13// Update Count     : 6
    1414//
    1515
     
    1919
    2020class Declaration;
    21 namespace ast {
    22         class TranslationUnit;
    23 }
    2421
    2522namespace GenPoly {
    2623        /// boxes polymorphic function calls
    2724        void box( std::list< Declaration* >& translationUnit );
    28 void box( ast::TranslationUnit & translationUnit );
    2925} // namespace GenPoly
    3026
  • src/GenPoly/InstantiateGenericNew.cpp

    rcf34e82 r11ab0b4a  
    335335ast::Expr const * FixDtypeStatic::postvisit( ast::MemberExpr const * expr ) {
    336336        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 );
    339341        } else if ( auto inst = type.as<ast::UnionInstType>() ) {
    340                 if ( !inst->params.empty() ) return fixMemberExpr( inst, expr );
     342                return fixMemberExpr( inst, expr );
    341343        }
    342344        return expr;
     
    449451        ast::Expr const * postvisit( ast::MemberExpr const * expr );
    450452        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
    456455        void previsit( ast::FunctionType const * ) {
    457456                GuardValue( inFunctionType ) = true;
     
    629628}
    630629
    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;
     630void GenericInstantiator::previsit( ast::ParseNode const * node ) {
     631        GuardValue( location ) = &node->location;
    656632}
    657633
  • src/GenPoly/module.mk

    rcf34e82 r11ab0b4a  
    2222
    2323SRC += $(SRC_GENPOLY) \
    24         GenPoly/BoxNew.cpp \
    2524        GenPoly/Box.cc \
    2625        GenPoly/Box.h \
  • src/main.cc

    rcf34e82 r11ab0b4a  
    419419
    420420                PASS( "Convert L-Value", GenPoly::convertLvalue, transUnit );
    421                 DUMP( bboxp, std::move( transUnit ) );
    422                 PASS( "Box", GenPoly::box, transUnit );
    423421
    424422                translationUnit = convert( std::move( transUnit ) );
     423
     424                DUMP( bboxp, translationUnit );
     425                PASS( "Box", GenPoly::box, translationUnit );
    425426
    426427                PASS( "Link-Once", CodeGen::translateLinkOnce, translationUnit );
Note: See TracChangeset for help on using the changeset viewer.