Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Initializer.cc

    rd3b7937 r84bb4d9  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Initializer.cc -- 
     7// Initializer.cc --
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Aug 12 14:05:25 2015
    13 // Update Count     : 14
     12// Last Modified On : Tue Apr 26 15:51:35 2016
     13// Update Count     : 28
    1414//
    1515
    1616#include "Initializer.h"
    1717#include "Expression.h"
     18#include "Statement.h"
    1819#include "Common/utility.h"
    1920
    20 Initializer::Initializer() {}
     21Initializer::Initializer( bool maybeConstructed ) : maybeConstructed( maybeConstructed ) {}
    2122
    2223Initializer::~Initializer() {}
     
    3132void Initializer::print( std::ostream &os, int indent ) {}
    3233
    33 SingleInit::SingleInit( Expression *v, std::list< Expression *> &_designators ) : value ( v ), designators( _designators ) {
     34SingleInit::SingleInit( Expression *v, const std::list< Expression *> &_designators, bool maybeConstructed ) : Initializer( maybeConstructed ), value ( v ), designators( _designators ) {
    3435}
    3536
    36 SingleInit::SingleInit( const SingleInit &other ) : value ( other.value ) {
     37SingleInit::SingleInit( const SingleInit &other ) : Initializer(other), value ( maybeClone( other.value ) ) {
    3738        cloneAll(other.designators, designators );
    3839}
     
    5455}
    5556
    56 ListInit::ListInit( std::list<Initializer*> &_initializers, std::list<Expression *> &_designators )
    57         : initializers( _initializers ), designators( _designators ) {
     57ListInit::ListInit( const std::list<Initializer*> &_initializers, const std::list<Expression *> &_designators, bool maybeConstructed )
     58        : Initializer( maybeConstructed), initializers( _initializers ), designators( _designators ) {
    5859}
    5960
     
    6566
    6667void ListInit::print( std::ostream &os, int indent ) {
    67         os << std::endl << std::string(indent, ' ') << "Compound initializer:  "; 
     68        os << std::endl << std::string(indent, ' ') << "Compound initializer:  ";
    6869        if ( ! designators.empty() ) {
    6970                os << std::string(indent + 2, ' ' ) << "designated by: [";
    7071                for ( std::list < Expression * >::iterator i = designators.begin();
    7172                          i != designators.end(); i++ ) {
    72                         ( *i )->print(os, indent + 4 ); 
     73                        ( *i )->print(os, indent + 4 );
    7374                } // for
    74        
     75
    7576                os << std::string(indent + 2, ' ' ) << "]";
    7677        } // if
    7778
    78         for ( std::list<Initializer *>::iterator i = initializers.begin(); i != initializers.end(); i++ ) 
     79        for ( std::list<Initializer *>::iterator i = initializers.begin(); i != initializers.end(); i++ )
    7980                (*i)->print( os, indent + 2 );
    8081}
     82
     83
     84ConstructorInit::ConstructorInit( Statement * ctor, Statement * dtor, Initializer * init ) : Initializer( true ), ctor( ctor ), dtor( dtor ), init( init ) {}
     85ConstructorInit::~ConstructorInit() {
     86        delete ctor;
     87        delete init;
     88}
     89
     90ConstructorInit *ConstructorInit::clone() const {
     91        return new ConstructorInit( *this );
     92}
     93
     94void ConstructorInit::print( std::ostream &os, int indent ) {
     95        os << std::endl << std::string(indent, ' ') << "Constructor initializer: " << std::endl;
     96        if ( ctor ) {
     97                os << std::string(indent+2, ' ');
     98                os << "initially constructed with ";
     99                ctor->print( os, indent+4 );
     100        } // if
     101
     102        if ( dtor ) {
     103                os << std::string(indent+2, ' ');
     104                os << "destructed with ";
     105                dtor->print( os, indent+4 );
     106        }
     107
     108        if ( init ) {
     109                os << std::string(indent+2, ' ');
     110                os << "with fallback C-style initializer: ";
     111                init->print( os, indent+4 );
     112        }
     113}
     114
     115std::ostream & operator<<( std::ostream & out, Initializer * init ) {
     116        init->print( out );
     117        return out;
     118}
     119
    81120// Local Variables: //
    82121// tab-width: 4 //
Note: See TracChangeset for help on using the changeset viewer.