Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Validate/GenericParameter.cpp

    rf02f546 rcaf06aa  
    1616#include "GenericParameter.hpp"
    1717
     18#include "AST/Copy.hpp"
    1819#include "AST/Decl.hpp"
    1920#include "AST/Expr.hpp"
     
    164165
    165166struct TranslateDimensionCore :
    166                 public WithNoIdSymbolTable, public ast::WithGuards,
    167                 public ast::WithVisitorRef<TranslateDimensionCore> {
     167                public WithNoIdSymbolTable, public ast::WithGuards {
    168168
    169169        // SUIT: Struct- or Union- InstType
     
    190190
    191191        const ast::TypeDecl * postvisit( const ast::TypeDecl * decl );
    192         const ast::Type * postvisit( const ast::FunctionType * type );
    193         const ast::Type * postvisit( const ast::TypeInstType * type );
    194 
    195192        const ast::Expr * postvisit( const ast::DimensionExpr * expr );
    196193        const ast::Expr * postvisit( const ast::Expr * expr );
     
    198195};
    199196
    200 // Declaration of type variable: forall( [N] )  ->  forall( N & | sized( N ) )
    201197const ast::TypeDecl * TranslateDimensionCore::postvisit(
    202198                const ast::TypeDecl * decl ) {
     
    210206        }
    211207        return decl;
    212 }
    213 
    214 // Makes postvisit( TypeInstType ) get called on the entries of the function declaration's type's forall list.
    215 // Pass.impl.hpp's visit( FunctionType ) does not consider the forall entries to be child nodes.
    216 // Workaround is: during the current TranslateDimension pass, manually visit down there.
    217 const ast::Type * TranslateDimensionCore::postvisit(
    218                 const ast::FunctionType * type ) {
    219         visitor->maybe_accept( type, &ast::FunctionType::forall );
    220         return type;
    221 }
    222 
    223 // Use of type variable, assuming `forall( [N] )` in scope:  void (*)( foo( /*dimension*/ N ) & )  ->  void (*)( foo( /*dtype*/ N ) & )
    224 const ast::Type * TranslateDimensionCore::postvisit(
    225                 const ast::TypeInstType * type ) {
    226         if ( type->kind == ast::TypeDecl::Dimension ) {
    227                 auto mutType = ast::mutate( type );
    228                 mutType->kind = ast::TypeDecl::Dtype;
    229                 return mutType;
    230         }
    231         return type;
    232208}
    233209
Note: See TracChangeset for help on using the changeset viewer.