Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SymTab/Validate.cc

    rfbd7ad6 rfbcde64  
    208208        };
    209209
    210         class ArrayLength : public Visitor {
    211         public:
    212                 /// for array types without an explicit length, compute the length and store it so that it
    213                 /// is known to the rest of the phases. For example,
    214                 ///   int x[] = { 1, 2, 3 };
    215                 ///   int y[][2] = { { 1, 2, 3 }, { 1, 2, 3 } };
    216                 /// here x and y are known at compile-time to have length 3, so change this into
    217                 ///   int x[3] = { 1, 2, 3 };
    218                 ///   int y[3][2] = { { 1, 2, 3 }, { 1, 2, 3 } };
    219                 static void computeLength( std::list< Declaration * > & translationUnit );
    220 
    221                 virtual void visit( ObjectDecl * objDecl );
    222         };
    223 
    224210        class CompoundLiteral final : public GenPoly::DeclMutator {
    225211                Type::StorageClasses storageClasses;
     
    249235                acceptAll( translationUnit, pass3 );
    250236                VerifyCtorDtorAssign::verify( translationUnit );
    251                 ArrayLength::computeLength( translationUnit );
    252237        }
    253238
     
    884869                }
    885870        }
    886 
    887         void ArrayLength::computeLength( std::list< Declaration * > & translationUnit ) {
    888                 ArrayLength len;
    889                 acceptAll( translationUnit, len );
    890         }
    891 
    892         void ArrayLength::visit( ObjectDecl * objDecl ) {
    893                 if ( ArrayType * at = dynamic_cast< ArrayType * >( objDecl->get_type() ) ) {
    894                         if ( at->get_dimension() != nullptr ) return;
    895                         if ( ListInit * init = dynamic_cast< ListInit * >( objDecl->get_init() ) ) {
    896                                 at->set_dimension( new ConstantExpr( Constant::from_ulong( init->get_initializers().size() ) ) );
    897                         }
    898                 }
    899         }
    900871} // namespace SymTab
    901872
Note: See TracChangeset for help on using the changeset viewer.