Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/GenPoly.cc

    r8d7bef2 r682dcae  
    100100                if ( dynamic_cast< TypeInstType * >( type ) ) {
    101101                        return type;
     102                } else if ( ArrayType * arrayType = dynamic_cast< ArrayType * >( type ) ) {
     103                        return isPolyType( arrayType->base, env );
    102104                } else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) {
    103105                        if ( hasPolyParams( structType->get_parameters(), env ) ) return type;
     
    115117                                return type;
    116118                        }
     119                } else if ( ArrayType * arrayType = dynamic_cast< ArrayType * >( type ) ) {
     120                        return isPolyType( arrayType->base, tyVars, env );
    117121                } else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) {
    118122                        if ( hasPolyParams( structType->get_parameters(), tyVars, env ) ) return type;
     
    367371                        return is<VoidType>( ap->get_base() ) || is<VoidType>( bp->get_base() )
    368372                                || typesPolyCompatible( ap->get_base(), bp->get_base() );
     373                } else if ( aid == type_index{typeid(ReferenceType)} ) {
     374                        ReferenceType *ap = as<ReferenceType>(a), *bp = as<ReferenceType>(b);
     375                        return is<VoidType>( ap->get_base() ) || is<VoidType>( bp->get_base() )
     376                                || typesPolyCompatible( ap->get_base(), bp->get_base() );
    369377                } else if ( aid == type_index{typeid(ArrayType)} ) {
    370378                        ArrayType *aa = as<ArrayType>(a), *ba = as<ArrayType>(b);
     
    437445                Type * newType = arg->clone();
    438446                if ( env ) env->apply( newType );
     447                std::unique_ptr<Type> manager( newType );
    439448                // if the argument's type is polymorphic, we don't need to box again!
    440449                return ! isPolyType( newType );
Note: See TracChangeset for help on using the changeset viewer.