Changes in / [aadb0c8:8a3d5e7]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/Box.cc

    raadb0c8 r8a3d5e7  
    9595                        /// Pass the extra type parameters from polymorphic generic arguments or return types into a function application
    9696                        /// Will insert 0, 2 or 3 more arguments.
    97                         std::list< Expression *>::iterator passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes );
     97                        void passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes );
    9898                        /// passes extra type parameters into a polymorphic function application
    9999                        /// Returns an iterator to the first argument after the added
     
    531531                }
    532532
    533                 std::list< Expression *>::iterator Pass1::passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ) {
     533                void Pass1::passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ) {
    534534                        Type *polyType = isPolyType( parmType, exprTyVars );
    535535                        if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
    536536                                std::string typeName = mangleType( polyType );
    537                                 if ( seenTypes.count( typeName ) ) return arg;
     537                                if ( seenTypes.count( typeName ) ) return;
    538538
    539539                                arg = appExpr->get_args().insert( arg, new SizeofExpr( argBaseType->clone() ) );
     
    555555                                seenTypes.insert( typeName );
    556556                        }
    557                         return arg;
    558557                }
    559558
     
    594593                        if ( polyRetType ) {
    595594                                Type *concRetType = replaceWithConcrete( polyRetType, env );
    596                                 arg = passArgTypeVars( appExpr, polyRetType, concRetType, arg, exprTyVars, seenTypes );
     595                                passArgTypeVars( appExpr, polyRetType, concRetType, arg, exprTyVars, seenTypes );
    597596                                // Skip the return parameter in the argument list.
    598597                                fnArg = arg + 1;
     
    606605                                Type * argType = (*fnArg)->get_result();
    607606                                if ( ! argType ) continue;
    608                                 arg = passArgTypeVars( appExpr, (*fnParm)->get_type(), argType, arg, exprTyVars, seenTypes );
     607                                passArgTypeVars( appExpr, (*fnParm)->get_type(), argType, arg, exprTyVars, seenTypes );
    609608                        }
    610609                        return arg;
Note: See TracChangeset for help on using the changeset viewer.