Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/PtrsAssignable.cc

    rf07c1e6 recd4923  
    1414//
    1515
    16 #include "Common/PassVisitor.h"
    1716#include "ResolvExpr/TypeEnvironment.h"  // for EqvClass, TypeEnvironment
    1817#include "SynTree/Type.h"                // for TypeInstType, Type, BasicType
     
    2120
    2221namespace ResolvExpr {
    23         struct PtrsAssignable : public WithShortCircuiting {
     22        class PtrsAssignable : public Visitor {
     23          public:
    2424                PtrsAssignable( Type *dest, const TypeEnvironment &env );
    2525
    2626                int get_result() const { return result; }
    2727
    28                 void previsit( Type * ) { visit_children = false; }
    29 
    30                 void postvisit( VoidType * voidType );
    31                 void postvisit( BasicType * basicType );
    32                 void postvisit( PointerType * pointerType );
    33                 void postvisit( ArrayType * arrayType );
    34                 void postvisit( FunctionType * functionType );
    35                 void postvisit( StructInstType * inst );
    36                 void postvisit( UnionInstType * inst );
    37                 void postvisit( EnumInstType * inst );
    38                 void postvisit( TraitInstType * inst );
    39                 void postvisit( TypeInstType * inst );
    40                 void postvisit( TupleType * tupleType );
    41                 void postvisit( VarArgsType * varArgsType );
    42                 void postvisit( ZeroType * zeroType );
    43                 void postvisit( OneType * oneType );
     28                virtual void visit( VoidType *voidType );
     29                virtual void visit( BasicType *basicType );
     30                virtual void visit( PointerType *pointerType );
     31                virtual void visit( ArrayType *arrayType );
     32                virtual void visit( FunctionType *functionType );
     33                virtual void visit( StructInstType *inst );
     34                virtual void visit( UnionInstType *inst );
     35                virtual void visit( EnumInstType *inst );
     36                virtual void visit( TraitInstType *inst );
     37                virtual void visit( TypeInstType *inst );
     38                virtual void visit( TupleType *tupleType );
     39                virtual void visit( VarArgsType *varArgsType );
     40                virtual void visit( ZeroType *zeroType );
     41                virtual void visit( OneType *oneType );
    4442          private:
    4543                Type *dest;
     
    6159                        return -1;
    6260                } else {
    63                         PassVisitor<PtrsAssignable> ptrs( dest, env );
     61                        PtrsAssignable ptrs( dest, env );
    6462                        src->accept( ptrs );
    65                         return ptrs.pass.get_result();
     63                        return ptrs.get_result();
    6664                } // if
    6765        }
     
    6967        PtrsAssignable::PtrsAssignable( Type *dest, const TypeEnvironment &env ) : dest( dest ), result( 0 ), env( env ) {}
    7068
    71         void PtrsAssignable::postvisit( VoidType * ) {
     69        void PtrsAssignable::visit( VoidType * ) {
    7270                // T * = void * is disallowed - this is a change from C, where any
    7371                // void * can be assigned or passed to a non-void pointer without a cast.
    7472        }
    7573
    76         void PtrsAssignable::postvisit( __attribute__((unused)) BasicType *basicType ) {}
    77         void PtrsAssignable::postvisit( __attribute__((unused)) PointerType *pointerType ) {}
    78         void PtrsAssignable::postvisit( __attribute__((unused)) ArrayType *arrayType ) {}
    79         void PtrsAssignable::postvisit( __attribute__((unused)) FunctionType *functionType ) {}
     74        void PtrsAssignable::visit( __attribute__((unused)) BasicType *basicType ) {}
     75        void PtrsAssignable::visit( __attribute__((unused)) PointerType *pointerType ) {}
     76        void PtrsAssignable::visit( __attribute__((unused)) ArrayType *arrayType ) {}
     77        void PtrsAssignable::visit( __attribute__((unused)) FunctionType *functionType ) {}
    8078
    81         void PtrsAssignable::postvisit(  __attribute__((unused)) StructInstType *inst ) {}
    82         void PtrsAssignable::postvisit(  __attribute__((unused)) UnionInstType *inst ) {}
     79        void PtrsAssignable::visit(  __attribute__((unused)) StructInstType *inst ) {}
     80        void PtrsAssignable::visit(  __attribute__((unused)) UnionInstType *inst ) {}
    8381
    84         void PtrsAssignable::postvisit( EnumInstType * ) {
     82        void PtrsAssignable::visit( EnumInstType * ) {
    8583                if ( dynamic_cast< BasicType* >( dest ) ) {
    8684                        // int * = E *, etc. is safe. This isn't technically correct, as each
     
    9391        }
    9492
    95         void PtrsAssignable::postvisit(  __attribute__((unused)) TraitInstType *inst ) {}
    96         void PtrsAssignable::postvisit( TypeInstType *inst ) {
     93        void PtrsAssignable::visit(  __attribute__((unused)) TraitInstType *inst ) {}
     94        void PtrsAssignable::visit( TypeInstType *inst ) {
    9795                EqvClass eqvClass;
    9896                if ( env.lookup( inst->get_name(), eqvClass ) && eqvClass.type ) {
     
    102100        }
    103101
    104         void PtrsAssignable::postvisit(  __attribute__((unused)) TupleType *tupleType ) {}
    105         void PtrsAssignable::postvisit(  __attribute__((unused)) VarArgsType *varArgsType ) {}
    106         void PtrsAssignable::postvisit(  __attribute__((unused)) ZeroType *zeroType ) {}
    107         void PtrsAssignable::postvisit(  __attribute__((unused)) OneType *oneType ) {}
     102        void PtrsAssignable::visit(  __attribute__((unused)) TupleType *tupleType ) {}
     103        void PtrsAssignable::visit(  __attribute__((unused)) VarArgsType *varArgsType ) {}
     104        void PtrsAssignable::visit(  __attribute__((unused)) ZeroType *zeroType ) {}
     105        void PtrsAssignable::visit(  __attribute__((unused)) OneType *oneType ) {}
    108106
    109107} // namespace ResolvExpr
Note: See TracChangeset for help on using the changeset viewer.